diff --git a/tfhe/src/integer/gpu/server_key/radix/tests_unsigned/test_add.rs b/tfhe/src/integer/gpu/server_key/radix/tests_unsigned/test_add.rs index c3a8dddf34..def231ea5d 100644 --- a/tfhe/src/integer/gpu/server_key/radix/tests_unsigned/test_add.rs +++ b/tfhe/src/integer/gpu/server_key/radix/tests_unsigned/test_add.rs @@ -1,5 +1,6 @@ -use crate::core_crypto::gpu::CudaStreams; +use crate::core_crypto::gpu::{get_number_of_gpus, CudaStreams}; use crate::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; +use crate::integer::gpu::server_key::radix::tests_long_run::GpuMultiDeviceFunctionExecutor; use crate::integer::gpu::server_key::radix::tests_unsigned::{ create_gpu_parameterized_test, GpuFunctionExecutor, }; @@ -14,8 +15,10 @@ use crate::shortint::parameters::*; create_gpu_parameterized_test!(integer_unchecked_add); create_gpu_parameterized_test!(integer_unchecked_add_assign); create_gpu_parameterized_test!(integer_add); +create_gpu_parameterized_test!(multi_device_integer_add); create_gpu_parameterized_test!(integer_sum_ciphertexts_vec); create_gpu_parameterized_test!(integer_default_overflowing_add); +create_gpu_parameterized_test!(multi_device_integer_default_overflowing_add); fn integer_unchecked_add

(param: P) where @@ -41,6 +44,17 @@ where default_add_test(param, executor); } +fn multi_device_integer_add

(param: P) +where + P: Into, +{ + let executor = GpuMultiDeviceFunctionExecutor::new(&CudaServerKey::add); + let num_gpus = get_number_of_gpus(); + if num_gpus > 1 { + default_add_test(param, executor); + } +} + fn integer_sum_ciphertexts_vec

(param: P) where P: Into, @@ -65,3 +79,14 @@ where let executor = GpuFunctionExecutor::new(&CudaServerKey::unsigned_overflowing_add); default_overflowing_add_test(param, executor); } + +fn multi_device_integer_default_overflowing_add

(param: P) +where + P: Into, +{ + let executor = GpuMultiDeviceFunctionExecutor::new(&CudaServerKey::unsigned_overflowing_add); + let num_gpus = get_number_of_gpus(); + if num_gpus > 1 { + default_overflowing_add_test(param, executor); + } +} diff --git a/tfhe/src/integer/gpu/server_key/radix/tests_unsigned/test_cmux.rs b/tfhe/src/integer/gpu/server_key/radix/tests_unsigned/test_cmux.rs index afb5401fec..bbd479e36b 100644 --- a/tfhe/src/integer/gpu/server_key/radix/tests_unsigned/test_cmux.rs +++ b/tfhe/src/integer/gpu/server_key/radix/tests_unsigned/test_cmux.rs @@ -1,3 +1,5 @@ +use crate::core_crypto::gpu::get_number_of_gpus; +use crate::integer::gpu::server_key::radix::tests_long_run::GpuMultiDeviceFunctionExecutor; use crate::integer::gpu::server_key::radix::tests_unsigned::{ create_gpu_parameterized_test, GpuFunctionExecutor, }; @@ -6,6 +8,7 @@ use crate::integer::server_key::radix_parallel::tests_unsigned::test_cmux::defau use crate::shortint::parameters::*; create_gpu_parameterized_test!(integer_if_then_else); +create_gpu_parameterized_test!(multi_device_integer_if_then_else); fn integer_if_then_else

(param: P) where @@ -14,3 +17,13 @@ where let executor = GpuFunctionExecutor::new(&CudaServerKey::if_then_else); default_if_then_else_test(param, executor); } +fn multi_device_integer_if_then_else

(param: P) +where + P: Into, +{ + let executor = GpuMultiDeviceFunctionExecutor::new(&CudaServerKey::if_then_else); + let num_gpus = get_number_of_gpus(); + if num_gpus > 1 { + default_if_then_else_test(param, executor); + } +} diff --git a/tfhe/src/integer/gpu/server_key/radix/tests_unsigned/test_comparison.rs b/tfhe/src/integer/gpu/server_key/radix/tests_unsigned/test_comparison.rs index 93715cea48..d39d99b40c 100644 --- a/tfhe/src/integer/gpu/server_key/radix/tests_unsigned/test_comparison.rs +++ b/tfhe/src/integer/gpu/server_key/radix/tests_unsigned/test_comparison.rs @@ -1,3 +1,5 @@ +use crate::core_crypto::gpu::get_number_of_gpus; +use crate::integer::gpu::server_key::radix::tests_long_run::GpuMultiDeviceFunctionExecutor; use crate::integer::gpu::server_key::radix::tests_unsigned::{ create_gpu_parameterized_test, GpuFunctionExecutor, }; @@ -40,6 +42,20 @@ macro_rules! define_gpu_comparison_test_functions { ) } + fn []

(param: P) where P: Into { + let num_tests = 1; + let executor = GpuMultiDeviceFunctionExecutor::new(&CudaServerKey::[<$comparison_name>]); + let num_gpus = get_number_of_gpus(); + if num_gpus > 1 { + test_default_function( + param, + num_tests, + executor, + |lhs, rhs| $clear_type::from(<$clear_type>::$comparison_name(&lhs, &rhs)), + ) + } + } + create_gpu_parameterized_test!([]{ PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, @@ -50,6 +66,11 @@ macro_rules! define_gpu_comparison_test_functions { PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, V1_0_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, }); + create_gpu_parameterized_test!([]{ + PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, + PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, + V1_0_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, + }); } }; } diff --git a/tfhe/src/integer/gpu/server_key/radix/tests_unsigned/test_sub.rs b/tfhe/src/integer/gpu/server_key/radix/tests_unsigned/test_sub.rs index e8cf7df371..0fb2a88dde 100644 --- a/tfhe/src/integer/gpu/server_key/radix/tests_unsigned/test_sub.rs +++ b/tfhe/src/integer/gpu/server_key/radix/tests_unsigned/test_sub.rs @@ -1,3 +1,5 @@ +use crate::core_crypto::gpu::get_number_of_gpus; +use crate::integer::gpu::server_key::radix::tests_long_run::GpuMultiDeviceFunctionExecutor; use crate::integer::gpu::server_key::radix::tests_unsigned::{ create_gpu_parameterized_test, GpuFunctionExecutor, }; @@ -10,7 +12,9 @@ use crate::shortint::parameters::*; create_gpu_parameterized_test!(integer_unchecked_sub); create_gpu_parameterized_test!(integer_sub); +create_gpu_parameterized_test!(multi_device_integer_sub); create_gpu_parameterized_test!(integer_default_overflowing_sub); +create_gpu_parameterized_test!(multi_device_integer_default_overflowing_sub); fn integer_unchecked_sub

(param: P) where @@ -28,6 +32,17 @@ where default_sub_test(param, executor); } +fn multi_device_integer_sub

(param: P) +where + P: Into, +{ + let executor = GpuMultiDeviceFunctionExecutor::new(&CudaServerKey::sub); + let num_gpus = get_number_of_gpus(); + if num_gpus > 1 { + default_sub_test(param, executor); + } +} + fn integer_default_overflowing_sub

(param: P) where P: Into, @@ -35,3 +50,14 @@ where let executor = GpuFunctionExecutor::new(&CudaServerKey::unsigned_overflowing_sub); default_overflowing_sub_test(param, executor); } + +fn multi_device_integer_default_overflowing_sub

(param: P) +where + P: Into, +{ + let executor = GpuMultiDeviceFunctionExecutor::new(&CudaServerKey::unsigned_overflowing_sub); + let num_gpus = get_number_of_gpus(); + if num_gpus > 1 { + default_overflowing_sub_test(param, executor); + } +}