mirror of
https://github.com/zama-ai/tfhe-rs.git
synced 2026-01-09 14:47:56 -05:00
chore(gpu): update noise squashing parameters
This commit is contained in:
@@ -178,8 +178,8 @@ mod cuda {
|
|||||||
use tfhe::core_crypto::prelude::*;
|
use tfhe::core_crypto::prelude::*;
|
||||||
use tfhe::shortint::engine::ShortintEngine;
|
use tfhe::shortint::engine::ShortintEngine;
|
||||||
use tfhe::shortint::parameters::{
|
use tfhe::shortint::parameters::{
|
||||||
ModulusSwitchType, NOISE_SQUASHING_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
ModulusSwitchType, NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
||||||
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
||||||
};
|
};
|
||||||
use tfhe::shortint::server_key::ModulusSwitchNoiseReductionKey;
|
use tfhe::shortint::server_key::ModulusSwitchNoiseReductionKey;
|
||||||
|
|
||||||
@@ -191,8 +191,8 @@ mod cuda {
|
|||||||
.measurement_time(std::time::Duration::from_secs(30));
|
.measurement_time(std::time::Duration::from_secs(30));
|
||||||
|
|
||||||
type Scalar = u128;
|
type Scalar = u128;
|
||||||
let input_params = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
|
let input_params = PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
|
||||||
let squash_params = NOISE_SQUASHING_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
|
let squash_params = NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
|
||||||
|
|
||||||
let lwe_noise_distribution_u64 = DynamicDistribution::new_t_uniform(46);
|
let lwe_noise_distribution_u64 = DynamicDistribution::new_t_uniform(46);
|
||||||
let ct_modulus_u64: CiphertextModulus<u64> = CiphertextModulus::new_native();
|
let ct_modulus_u64: CiphertextModulus<u64> = CiphertextModulus::new_native();
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
pub(crate) use crate::core_crypto::algorithms::test::gen_keys_or_get_from_cache_if_enabled;
|
pub(crate) use crate::core_crypto::algorithms::test::gen_keys_or_get_from_cache_if_enabled;
|
||||||
use crate::shortint::parameters::DynamicDistribution;
|
use crate::shortint::parameters::{
|
||||||
|
DynamicDistribution, NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
||||||
|
PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
||||||
|
};
|
||||||
use crate::shortint::prelude::{DecompositionBaseLog, LweDimension};
|
use crate::shortint::prelude::{DecompositionBaseLog, LweDimension};
|
||||||
|
|
||||||
use crate::core_crypto::algorithms::par_allocate_and_generate_new_lwe_bootstrap_key;
|
use crate::core_crypto::algorithms::par_allocate_and_generate_new_lwe_bootstrap_key;
|
||||||
@@ -18,13 +21,9 @@ use crate::core_crypto::prelude::{
|
|||||||
Plaintext, SignedDecomposer, UnsignedTorus,
|
Plaintext, SignedDecomposer, UnsignedTorus,
|
||||||
};
|
};
|
||||||
use crate::shortint::engine::ShortintEngine;
|
use crate::shortint::engine::ShortintEngine;
|
||||||
use crate::shortint::parameters::{
|
use crate::shortint::parameters::{ModulusSwitchType, NoiseSquashingParameters};
|
||||||
ModulusSwitchType, NoiseSquashingParameters,
|
|
||||||
NOISE_SQUASHING_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
|
||||||
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
|
||||||
};
|
|
||||||
use crate::shortint::server_key::ModulusSwitchNoiseReductionKey;
|
use crate::shortint::server_key::ModulusSwitchNoiseReductionKey;
|
||||||
use crate::shortint::ClassicPBSParameters;
|
use crate::shortint::MultiBitPBSParameters;
|
||||||
use serde::de::DeserializeOwned;
|
use serde::de::DeserializeOwned;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
@@ -74,7 +73,7 @@ pub fn generate_keys<
|
|||||||
|
|
||||||
pub fn execute_bootstrap_u128(
|
pub fn execute_bootstrap_u128(
|
||||||
squash_params: NoiseSquashingParameters,
|
squash_params: NoiseSquashingParameters,
|
||||||
input_params: ClassicPBSParameters,
|
input_params: MultiBitPBSParameters,
|
||||||
) {
|
) {
|
||||||
let glwe_dimension = squash_params.glwe_dimension;
|
let glwe_dimension = squash_params.glwe_dimension;
|
||||||
let polynomial_size = squash_params.polynomial_size;
|
let polynomial_size = squash_params.polynomial_size;
|
||||||
@@ -207,7 +206,7 @@ pub fn execute_bootstrap_u128(
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_bootstrap_u128_with_squashing() {
|
fn test_bootstrap_u128_with_squashing() {
|
||||||
execute_bootstrap_u128(
|
execute_bootstrap_u128(
|
||||||
NOISE_SQUASHING_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
||||||
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ use crate::high_level_api::{
|
|||||||
};
|
};
|
||||||
use crate::integer::U256;
|
use crate::integer::U256;
|
||||||
use crate::set_server_key;
|
use crate::set_server_key;
|
||||||
|
#[cfg(feature = "gpu")]
|
||||||
|
use crate::shortint::parameters::NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
|
||||||
use crate::shortint::parameters::{
|
use crate::shortint::parameters::{
|
||||||
NOISE_SQUASHING_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
NOISE_SQUASHING_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
||||||
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
||||||
@@ -82,7 +84,7 @@ fn test_gpu_noise_squashing() {
|
|||||||
let config = ConfigBuilder::with_custom_parameters(
|
let config = ConfigBuilder::with_custom_parameters(
|
||||||
crate::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
crate::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
||||||
)
|
)
|
||||||
.enable_noise_squashing(NOISE_SQUASHING_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128)
|
.enable_noise_squashing(NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128)
|
||||||
.build();
|
.build();
|
||||||
let cks = crate::ClientKey::generate(config);
|
let cks = crate::ClientKey::generate(config);
|
||||||
let sks = cks.generate_compressed_server_key();
|
let sks = cks.generate_compressed_server_key();
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ use crate::shortint::parameters::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use crate::shortint::parameters::current_params::key_switching::p_fail_2_minus_128::ks_pbs_gpu::V1_3_PARAM_MULTI_BIT_GROUP_4_KEYSWITCH_PKE_TO_SMALL_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
|
use crate::shortint::parameters::current_params::key_switching::p_fail_2_minus_128::ks_pbs_gpu::V1_3_PARAM_MULTI_BIT_GROUP_4_KEYSWITCH_PKE_TO_SMALL_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
|
||||||
|
use crate::shortint::parameters::v1_3::V1_3_NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
|
||||||
use current_params::classic::gaussian::p_fail_2_minus_128::ks_pbs::{
|
use current_params::classic::gaussian::p_fail_2_minus_128::ks_pbs::{
|
||||||
V1_3_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
|
V1_3_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
|
||||||
V1_3_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
|
V1_3_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
|
||||||
@@ -120,6 +121,10 @@ pub const NOISE_SQUASHING_COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128:
|
|||||||
NoiseSquashingCompressionParameters =
|
NoiseSquashingCompressionParameters =
|
||||||
V1_3_NOISE_SQUASHING_COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
|
V1_3_NOISE_SQUASHING_COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
|
||||||
|
|
||||||
|
pub const NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128:
|
||||||
|
NoiseSquashingParameters =
|
||||||
|
V1_3_NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
|
||||||
|
|
||||||
// GPU 2^-64
|
// GPU 2^-64
|
||||||
// GPU TUniform
|
// GPU TUniform
|
||||||
pub const PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_1_CARRY_1_KS_PBS_TUNIFORM_2M64:
|
pub const PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_1_CARRY_1_KS_PBS_TUNIFORM_2M64:
|
||||||
|
|||||||
@@ -1689,10 +1689,16 @@ pub const VEC_ALL_COMPACT_PUBLIC_KEY_ENCRYPTION_PARAMETERS: [(
|
|||||||
];
|
];
|
||||||
|
|
||||||
/// All [`NoiseSquashingParameters`] in this module.
|
/// All [`NoiseSquashingParameters`] in this module.
|
||||||
pub const VEC_ALL_NOISE_SQUASHING_PARAMETERS: [(&NoiseSquashingParameters, &str); 1] = [(
|
pub const VEC_ALL_NOISE_SQUASHING_PARAMETERS: [(&NoiseSquashingParameters, &str); 2] = [
|
||||||
&V1_3_NOISE_SQUASHING_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
(
|
||||||
"V1_3_NOISE_SQUASHING_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128",
|
&V1_3_NOISE_SQUASHING_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
||||||
)];
|
"V1_3_NOISE_SQUASHING_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128",
|
||||||
|
),
|
||||||
|
(
|
||||||
|
&V1_3_NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
||||||
|
"V1_3_NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128",
|
||||||
|
),
|
||||||
|
];
|
||||||
|
|
||||||
/// All [`NoiseSquashingCompressionParameters`] in this module.
|
/// All [`NoiseSquashingCompressionParameters`] in this module.
|
||||||
pub const VEC_ALL_NOISE_SQUASHING_COMPRESSION_PARAMETERS: [(
|
pub const VEC_ALL_NOISE_SQUASHING_COMPRESSION_PARAMETERS: [(
|
||||||
|
|||||||
@@ -38,3 +38,23 @@ pub const V1_3_NOISE_SQUASHING_COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M12
|
|||||||
message_modulus: MessageModulus(4),
|
message_modulus: MessageModulus(4),
|
||||||
carry_modulus: CarryModulus(4),
|
carry_modulus: CarryModulus(4),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pub const V1_3_NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128:
|
||||||
|
NoiseSquashingParameters = NoiseSquashingParameters {
|
||||||
|
glwe_dimension: GlweDimension(1),
|
||||||
|
polynomial_size: PolynomialSize(4096),
|
||||||
|
glwe_noise_distribution: DynamicDistribution::new_t_uniform(30),
|
||||||
|
decomp_base_log: DecompositionBaseLog(24),
|
||||||
|
decomp_level_count: DecompositionLevelCount(3),
|
||||||
|
modulus_switch_noise_reduction_params: ModulusSwitchType::DriftTechniqueNoiseReduction(
|
||||||
|
ModulusSwitchNoiseReductionParams {
|
||||||
|
modulus_switch_zeros_count: LweCiphertextCount(2827),
|
||||||
|
ms_bound: NoiseEstimationMeasureBound(288230376151711744f64),
|
||||||
|
ms_r_sigma_factor: RSigmaFactor(20.83904137608219f64),
|
||||||
|
ms_input_variance: Variance(2.7596542105799535e-07f64),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
message_modulus: MessageModulus(4),
|
||||||
|
carry_modulus: CarryModulus(4),
|
||||||
|
ciphertext_modulus: CoreCiphertextModulus::<u128>::new_native(),
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user