Skip to content

Commit 47589ea

Browse files
committed
chore(bench): run core_crypto benchmarks on all parameters p-fail
This also add KS-PBS benchmarks.
1 parent ce327b7 commit 47589ea

File tree

13 files changed

+1395
-239
lines changed

13 files changed

+1395
-239
lines changed

.github/workflows/benchmark_core_crypto.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ jobs:
6868

6969
- name: Run benchmarks with AVX512
7070
run: |
71+
make bench_ks_pbs
7172
make bench_pbs
7273
make bench_pbs128
7374
make bench_ks

.github/workflows/benchmark_gpu_core_crypto.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ jobs:
9191

9292
- name: Run benchmarks with AVX512
9393
run: |
94+
make bench_ks_pbs_gpu
9495
make bench_pbs_gpu
9596
make bench_ks_gpu
9697

Makefile

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ FAST_BENCH?=FALSE
1818
NIGHTLY_TESTS?=FALSE
1919
BENCH_OP_FLAVOR?=DEFAULT
2020
BENCH_TYPE?=latency
21+
BENCH_PARAM_TYPE?=classical
22+
BENCH_PARAMS_SET?=default
2123
NODE_VERSION=22.6
2224
BACKWARD_COMPAT_DATA_URL=https://github.com/zama-ai/tfhe-backward-compat-data.git
2325
BACKWARD_COMPAT_DATA_BRANCH?=$(shell ./scripts/backward_compat_data_version.py)
@@ -1171,10 +1173,24 @@ bench_boolean: install_rs_check_toolchain
11711173

11721174
.PHONY: bench_pbs # Run benchmarks for PBS
11731175
bench_pbs: install_rs_check_toolchain
1174-
RUSTFLAGS="$(RUSTFLAGS)" cargo $(CARGO_RS_CHECK_TOOLCHAIN) bench \
1176+
RUSTFLAGS="$(RUSTFLAGS)" __TFHE_RS_PARAMS_SET=$(BENCH_PARAMS_SET) cargo $(CARGO_RS_CHECK_TOOLCHAIN) bench \
11751177
--bench pbs-bench \
11761178
--features=boolean,shortint,internal-keycache,nightly-avx512 -p $(TFHE_SPEC)
11771179

1180+
.PHONY: bench_ks_pbs # Run benchmarks for KS-PBS
1181+
bench_ks_pbs: install_rs_check_toolchain
1182+
RUSTFLAGS="$(RUSTFLAGS)" __TFHE_RS_PARAM_TYPE=$(BENCH_PARAM_TYPE) __TFHE_RS_PARAMS_SET=$(BENCH_PARAMS_SET) \
1183+
cargo $(CARGO_RS_CHECK_TOOLCHAIN) bench \
1184+
--bench ks-pbs-bench \
1185+
--features=boolean,shortint,internal-keycache,nightly-avx512 -p $(TFHE_SPEC)
1186+
1187+
.PHONY: bench_ks_pbs_gpu # Run benchmarks for KS-PBS on GPU backend
1188+
bench_ks_pbs_gpu: install_rs_check_toolchain
1189+
RUSTFLAGS="$(RUSTFLAGS)" __TFHE_RS_PARAM_TYPE=$(BENCH_PARAM_TYPE) __TFHE_RS_PARAMS_SET=$(BENCH_PARAMS_SET) \
1190+
cargo $(CARGO_RS_CHECK_TOOLCHAIN) bench \
1191+
--bench ks-pbs-bench \
1192+
--features=boolean,shortint,gpu,internal-keycache,nightly-avx512 -p $(TFHE_SPEC)
1193+
11781194
.PHONY: bench_pbs128 # Run benchmarks for PBS using FFT 128 bits
11791195
bench_pbs128: install_rs_check_toolchain
11801196
RUSTFLAGS="$(RUSTFLAGS)" cargo $(CARGO_RS_CHECK_TOOLCHAIN) bench \
@@ -1183,19 +1199,20 @@ bench_pbs128: install_rs_check_toolchain
11831199

11841200
.PHONY: bench_pbs_gpu # Run benchmarks for PBS on GPU backend
11851201
bench_pbs_gpu: install_rs_check_toolchain
1186-
RUSTFLAGS="$(RUSTFLAGS)" __TFHE_RS_FAST_BENCH=$(FAST_BENCH) cargo $(CARGO_RS_CHECK_TOOLCHAIN) bench \
1202+
RUSTFLAGS="$(RUSTFLAGS)" __TFHE_RS_FAST_BENCH=$(FAST_BENCH) __TFHE_RS_PARAMS_SET=$(BENCH_PARAMS_SET) \
1203+
cargo $(CARGO_RS_CHECK_TOOLCHAIN) bench \
11871204
--bench pbs-bench \
11881205
--features=boolean,shortint,gpu,internal-keycache,nightly-avx512 -p $(TFHE_SPEC)
11891206

11901207
.PHONY: bench_ks # Run benchmarks for keyswitch
11911208
bench_ks: install_rs_check_toolchain
1192-
RUSTFLAGS="$(RUSTFLAGS)" cargo $(CARGO_RS_CHECK_TOOLCHAIN) bench \
1209+
RUSTFLAGS="$(RUSTFLAGS)" __TFHE_RS_PARAMS_SET=$(BENCH_PARAMS_SET) cargo $(CARGO_RS_CHECK_TOOLCHAIN) bench \
11931210
--bench ks-bench \
11941211
--features=boolean,shortint,internal-keycache,nightly-avx512 -p $(TFHE_SPEC)
11951212

11961213
.PHONY: bench_ks_gpu # Run benchmarks for PBS on GPU backend
11971214
bench_ks_gpu: install_rs_check_toolchain
1198-
RUSTFLAGS="$(RUSTFLAGS)" cargo $(CARGO_RS_CHECK_TOOLCHAIN) bench \
1215+
RUSTFLAGS="$(RUSTFLAGS)" __TFHE_RS_PARAMS_SET=$(BENCH_PARAMS_SET) cargo $(CARGO_RS_CHECK_TOOLCHAIN) bench \
11991216
--bench ks-bench \
12001217
--features=boolean,shortint,gpu,internal-keycache,nightly-avx512 -p $(TFHE_SPEC)
12011218

tfhe/Cargo.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,12 @@ path = "benches/core_crypto/pbs_bench.rs"
162162
harness = false
163163
required-features = ["boolean", "shortint", "internal-keycache"]
164164

165+
[[bench]]
166+
name = "ks-pbs-bench"
167+
path = "benches/core_crypto/ks_pbs_bench.rs"
168+
harness = false
169+
required-features = ["shortint", "internal-keycache"]
170+
165171
[[bench]]
166172
name = "dev-bench"
167173
path = "benches/core_crypto/dev_bench.rs"

tfhe/benches/core_crypto/ks_bench.rs

Lines changed: 102 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
#[path = "../utilities.rs"]
22
mod utilities;
33

4-
use crate::utilities::{write_to_json, CryptoParametersRecord, OperatorType};
5-
use criterion::{black_box, criterion_main, Criterion};
4+
use crate::utilities::{
5+
filter_parameters, init_parameters_set, write_to_json, CryptoParametersRecord, DesiredBackend,
6+
DesiredNoiseDistribution, OperatorType, ParametersSet, PARAMETERS_SET,
7+
};
8+
use criterion::{black_box, Criterion};
69
use serde::Serialize;
710
use tfhe::boolean::prelude::*;
811
use tfhe::core_crypto::prelude::*;
912
use tfhe::keycache::NamedParam;
1013
use tfhe::shortint::parameters::current_params::{
1114
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
1215
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
13-
V1_0_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
16+
V1_0_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128, VEC_ALL_MULTI_BIT_PBS_PARAMETERS,
1417
};
1518
#[cfg(not(feature = "gpu"))]
1619
use tfhe::shortint::parameters::current_params::{
@@ -29,9 +32,11 @@ use tfhe::shortint::parameters::{
2932
#[cfg(feature = "gpu")]
3033
use tfhe::shortint::parameters::{
3134
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64,
35+
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_TUNIFORM_2M64,
3236
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
3337
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
3438
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64,
39+
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_TUNIFORM_2M64,
3540
};
3641
use tfhe::shortint::prelude::*;
3742
use tfhe::shortint::{MultiBitPBSParameters, PBSParameters};
@@ -64,8 +69,10 @@ const SHORTINT_MULTI_BIT_BENCH_PARAMS: [MultiBitPBSParameters; 6] = [
6469
];
6570

6671
#[cfg(feature = "gpu")]
67-
const SHORTINT_MULTI_BIT_BENCH_PARAMS: [MultiBitPBSParameters; 4] = [
72+
const SHORTINT_MULTI_BIT_BENCH_PARAMS: [MultiBitPBSParameters; 6] = [
73+
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_TUNIFORM_2M64,
6874
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
75+
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_TUNIFORM_2M64,
6976
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64,
7077
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
7178
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64,
@@ -80,28 +87,78 @@ const BOOLEAN_BENCH_PARAMS: [(&str, BooleanParameters); 2] = [
8087
];
8188

8289
fn benchmark_parameters_64bits() -> Vec<(String, CryptoParametersRecord<u64>)> {
83-
let classic = SHORTINT_BENCH_PARAMS
84-
.iter()
85-
.map(|params| {
86-
(
87-
params.name(),
88-
<ClassicPBSParameters as Into<PBSParameters>>::into(*params)
89-
.to_owned()
90-
.into(),
90+
let (classic, multi_bit) = match PARAMETERS_SET.get().unwrap() {
91+
ParametersSet::Default => {
92+
let classic = SHORTINT_BENCH_PARAMS
93+
.iter()
94+
.map(|params| {
95+
(
96+
params.name(),
97+
<ClassicPBSParameters as Into<PBSParameters>>::into(*params)
98+
.to_owned()
99+
.into(),
100+
)
101+
})
102+
.collect::<Vec<(String, CryptoParametersRecord<u64>)>>();
103+
104+
let multi_bit = SHORTINT_MULTI_BIT_BENCH_PARAMS
105+
.iter()
106+
.map(|params| {
107+
(
108+
params.name(),
109+
<MultiBitPBSParameters as Into<PBSParameters>>::into(*params)
110+
.to_owned()
111+
.into(),
112+
)
113+
})
114+
.collect();
115+
116+
(classic, multi_bit)
117+
}
118+
ParametersSet::All => {
119+
let desired_noise = DesiredNoiseDistribution::Both;
120+
let desired_backend = if cfg!(feature = "gpu") {
121+
DesiredBackend::Gpu
122+
} else {
123+
DesiredBackend::Cpu
124+
};
125+
126+
let classic = filter_parameters(
127+
&VEC_ALL_CLASSIC_PBS_PARAMETERS,
128+
desired_noise,
129+
DesiredBackend::Cpu, // No parameters set are specific to GPU in this vector
91130
)
92-
})
93-
.collect::<Vec<(String, CryptoParametersRecord<u64>)>>();
94-
let multi_bit = SHORTINT_MULTI_BIT_BENCH_PARAMS
95-
.iter()
96-
.map(|params| {
97-
(
98-
params.name(),
99-
<MultiBitPBSParameters as Into<PBSParameters>>::into(*params)
100-
.to_owned()
101-
.into(),
131+
.into_iter()
132+
.map(|(params, name)| {
133+
(
134+
name.to_string(),
135+
<ClassicPBSParameters as Into<PBSParameters>>::into(*params)
136+
.to_owned()
137+
.into(),
138+
)
139+
})
140+
.collect::<Vec<(String, CryptoParametersRecord<u64>)>>();
141+
142+
let multi_bit = filter_parameters(
143+
&VEC_ALL_MULTI_BIT_PBS_PARAMETERS,
144+
desired_noise,
145+
desired_backend,
102146
)
103-
})
104-
.collect();
147+
.into_iter()
148+
.map(|(params, name)| {
149+
(
150+
name.to_string(),
151+
<MultiBitPBSParameters as Into<PBSParameters>>::into(*params)
152+
.to_owned()
153+
.into(),
154+
)
155+
})
156+
.collect();
157+
158+
(classic, multi_bit)
159+
}
160+
};
161+
105162
[classic, multi_bit].concat()
106163
}
107164

@@ -526,6 +583,7 @@ mod cuda {
526583

527584
#[cfg(feature = "gpu")]
528585
use cuda::cuda_keyswitch_group;
586+
use tfhe::shortint::parameters::v1_0::VEC_ALL_CLASSIC_PBS_PARAMETERS;
529587

530588
pub fn keyswitch_group() {
531589
let mut criterion: Criterion<_> = (Criterion::default()
@@ -555,7 +613,24 @@ pub fn packing_keyswitch_group() {
555613
);
556614
}
557615

558-
#[cfg(not(feature = "gpu"))]
559-
criterion_main!(keyswitch_group, packing_keyswitch_group);
560616
#[cfg(feature = "gpu")]
561-
criterion_main!(cuda_keyswitch_group);
617+
fn go_through_gpu_bench_groups() {
618+
cuda_keyswitch_group();
619+
}
620+
621+
#[cfg(not(feature = "gpu"))]
622+
fn go_through_cpu_bench_groups() {
623+
keyswitch_group();
624+
packing_keyswitch_group();
625+
}
626+
627+
fn main() {
628+
init_parameters_set();
629+
630+
#[cfg(feature = "gpu")]
631+
go_through_gpu_bench_groups();
632+
#[cfg(not(feature = "gpu"))]
633+
go_through_cpu_bench_groups();
634+
635+
Criterion::default().configure_from_args().final_summary();
636+
}

0 commit comments

Comments
 (0)