From 28f61d4681cc144ddbe9905b0f1b5d569777a197 Mon Sep 17 00:00:00 2001 From: Arthur Meyre Date: Wed, 2 Oct 2024 15:38:20 +0200 Subject: [PATCH] chore(doc): add make command to print parameters used in doc benchmarks --- Makefile | 5 ++ tfhe/Cargo.toml | 5 ++ .../getting_started/benchmarks/summary.md | 6 ++ .../utilities/print_doc_bench_parameters.rs | 82 +++++++++++++++++++ 4 files changed, 98 insertions(+) create mode 100644 tfhe/examples/utilities/print_doc_bench_parameters.rs diff --git a/Makefile b/Makefile index 95eff0563..23dcb79d1 100644 --- a/Makefile +++ b/Makefile @@ -947,6 +947,11 @@ dieharder_csprng: install_dieharder build_concrete_csprng # Benchmarks # +.PHONY: print_doc_bench_parameters # Print parameters used in doc benchmarks +print_doc_bench_parameters: + RUSTFLAGS="" cargo run --example print_doc_bench_parameters \ + --features=$(TARGET_ARCH_FEATURE),shortint,internal-keycache -p tfhe + .PHONY: bench_integer # Run benchmarks for unsigned integer bench_integer: install_rs_check_toolchain RUSTFLAGS="$(RUSTFLAGS)" __TFHE_RS_BENCH_OP_FLAVOR=$(BENCH_OP_FLAVOR) __TFHE_RS_FAST_BENCH=$(FAST_BENCH) \ diff --git a/tfhe/Cargo.toml b/tfhe/Cargo.toml index c6b31ad66..8e92de46a 100644 --- a/tfhe/Cargo.toml +++ b/tfhe/Cargo.toml @@ -295,6 +295,11 @@ name = "write_params_to_file" path = "examples/utilities/params_to_file.rs" required-features = ["boolean", "shortint", "internal-keycache"] +[[example]] +name = "print_doc_bench_parameters" +path = "examples/utilities/print_doc_bench_parameters.rs" +required-features = ["shortint", "internal-keycache"] + # Real use-case examples [[example]] diff --git a/tfhe/docs/getting_started/benchmarks/summary.md b/tfhe/docs/getting_started/benchmarks/summary.md index 4734b7166..46bc8292e 100644 --- a/tfhe/docs/getting_started/benchmarks/summary.md +++ b/tfhe/docs/getting_started/benchmarks/summary.md @@ -2,6 +2,12 @@ This document summarizes the timings of some homomorphic operations over 64-bit encrypted integers, depending on the hardware. More details are given for [the CPU](cpu\_benchmarks.md), [the GPU](gpu\_benchmarks.md), or [zeros-knowledge proofs](zk\_proof\_benchmarks.md). +You can get the parameters used for benchmarks by cloning the repository and checking out the commit you want to use (starting with the v0.8.0 release) and run the following make command: + +```console +make print_doc_bench_parameters +``` + ### Operation time (ms) over FheUint 64 {% embed url="https://docs.google.com/spreadsheets/d/1ZbgsKnFH8eKrFjy9khFeaLYnUhbSV8Xu4H6rwulo0o8/edit?usp=sharing" %} diff --git a/tfhe/examples/utilities/print_doc_bench_parameters.rs b/tfhe/examples/utilities/print_doc_bench_parameters.rs new file mode 100644 index 000000000..0f205743e --- /dev/null +++ b/tfhe/examples/utilities/print_doc_bench_parameters.rs @@ -0,0 +1,82 @@ +use tfhe::keycache::NamedParam; +use tfhe::shortint::parameters::classic::gaussian::p_fail_2_minus_64::ks_pbs::{ + PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64, PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, + PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64, PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M64, +}; +use tfhe::shortint::parameters::classic::tuniform::p_fail_2_minus_64::ks_pbs::PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64; +use tfhe::shortint::parameters::compact_public_key_only::p_fail_2_minus_64::ks_pbs::PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64; +use tfhe::shortint::parameters::key_switching::p_fail_2_minus_64::ks_pbs::PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64; +use tfhe::shortint::parameters::multi_bit::p_fail_2_minus_64::ks_pbs_gpu::{ + PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64, + PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, + PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64, +}; + +pub fn main() { + println!("CPU Integer parameters:\n"); + println!("{}", PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64.name()); + println!("{PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64:?}"); + + println!("\n\n===========================================================================\n\n"); + + println!("CUDA GPU Integer parameters:\n"); + println!( + "{}", + PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64.name() + ); + println!("{PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64:?}"); + + println!("\n\n===========================================================================\n\n"); + + println!("CPU PBS parameters:\n"); + for param in [ + PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64, + PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, + PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64, + PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M64, + ] { + let bits = (param.message_modulus.0 * param.carry_modulus.0).ilog2(); + println!("Precision {bits} bits"); + println!("{}", param.name()); + println!("{param:?}\n"); + } + + println!("\n===========================================================================\n\n"); + + println!("CUDA GPU PBS parameters:\n"); + for param in [ + PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64, + PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, + PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64, + ] { + let bits = (param.message_modulus.0 * param.carry_modulus.0).ilog2(); + println!("Precision {bits} bits"); + println!("{}", param.name()); + println!("{param:?}\n"); + } + + println!("\n===========================================================================\n\n"); + + println!("ZK POK parameters:\n"); + + println!("Compact Public Key parameters (encryption + ZK):"); + println!( + "{}", + stringify!(PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64) + ); + println!("{PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64:?}\n"); + + println!("Corresponding compute FHE parameters:"); + println!( + "{}", + stringify!(PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64) + ); + println!("{PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64:?}\n"); + + println!("Keyswitch from encryption + ZK to compute parameters:"); + println!( + "{}", + stringify!(PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64) + ); + println!("{PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64:?}"); +}