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);
+ }
+}