Skip to content

Commit b3ff768

Browse files
committed
chore(gpu): add vectorized bitand bench (64 bits)
1 parent b532f37 commit b3ff768

File tree

3 files changed

+68
-9
lines changed

3 files changed

+68
-9
lines changed

tfhe-benchmark/Cargo.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,12 @@ path = "benches/high_level_api/noise_squash.rs"
9090
harness = false
9191
required-features = ["integer", "internal-keycache"]
9292

93+
[[bench]]
94+
name = "hlapi-arrays"
95+
path = "benches/high_level_api/arrays.rs"
96+
harness = false
97+
required-features = ["integer", "internal-keycache"]
98+
9399
[[bench]]
94100
name = "glwe_packing_compression-integer-bench"
95101
path = "benches/integer/glwe_packing_compression.rs"
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
use benchmark::utilities::{write_to_json, OperatorType};
2+
use criterion::{Criterion};
3+
use rand::prelude::*;
4+
use benchmark::params_aliases::BENCH_PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
5+
use tfhe::keycache::NamedParam;
6+
use tfhe::prelude::*;
7+
use tfhe::{
8+
ClientKey, CompressedServerKey,
9+
};
10+
use tfhe::array::GpuFheUint64Array;
11+
12+
#[cfg(feature = "gpu")]
13+
fn main() {
14+
let cks = {
15+
use tfhe::{set_server_key, ConfigBuilder};
16+
let config = ConfigBuilder::with_custom_parameters(
17+
BENCH_PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
18+
)
19+
.build();
20+
let cks = ClientKey::generate(config);
21+
let compressed_sks = CompressedServerKey::new(&cks);
22+
23+
set_server_key(compressed_sks.decompress_to_gpu());
24+
cks
25+
};
26+
27+
let array_dim = 32;
28+
let num_elems = array_dim * array_dim;
29+
let mut rng = thread_rng();
30+
let clear_xs = (0..num_elems as u64).map(| _ | rng.gen::<u64>()).collect::<Vec<_>>();
31+
let clear_ys = (0..num_elems as u64).map(| _ | rng.gen::<u64>()).collect::<Vec<_>>();
32+
33+
let xs = GpuFheUint64Array::try_encrypt((clear_xs.as_slice(), vec![array_dim, array_dim]), &cks).unwrap();
34+
let ys = GpuFheUint64Array::try_encrypt((clear_ys.as_slice(), vec![array_dim, array_dim]), &cks).unwrap();
35+
36+
let mut c = Criterion::default().configure_from_args();
37+
let bench_id = format!("bench::hlapi::array::cuda::bitand::");
38+
c.bench_function(&bench_id, |b| {
39+
40+
b.iter(|| {
41+
let _ = &xs & &ys;
42+
})
43+
});
44+
45+
let params = cks.computation_parameters();
46+
47+
write_to_json::<u64, _>(
48+
&bench_id,
49+
params,
50+
params.name(),
51+
"erc20-transfer",
52+
&OperatorType::Atomic,
53+
64,
54+
vec![],
55+
);
56+
57+
58+
c.final_summary();
59+
}

tfhe/src/integer/gpu/mod.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7732,9 +7732,7 @@ pub unsafe fn unchecked_bitop_vec_radix_kb_assign<T: UnsignedInteger, B: Numeric
77327732
num_radix_ciphertexts,
77337733
);
77347734
scratch_cuda_integer_radix_bitop_kb_64(
7735-
streams.ptr.as_ptr(),
7736-
streams.gpu_indexes_ptr(),
7737-
streams.len() as u32,
7735+
streams.ffi(),
77387736
std::ptr::addr_of_mut!(mem_ptr),
77397737
glwe_dimension.0 as u32,
77407738
polynomial_size.0 as u32,
@@ -7754,9 +7752,7 @@ pub unsafe fn unchecked_bitop_vec_radix_kb_assign<T: UnsignedInteger, B: Numeric
77547752
noise_reduction_type as u32,
77557753
);
77567754
cuda_bitop_integer_radix_ciphertext_kb_64(
7757-
streams.ptr.as_ptr(),
7758-
streams.gpu_indexes_ptr(),
7759-
streams.len() as u32,
7755+
streams.ffi(),
77607756
&raw mut cuda_ffi_radix_lwe_left,
77617757
&raw const cuda_ffi_radix_lwe_left,
77627758
&raw const cuda_ffi_radix_lwe_right,
@@ -7766,9 +7762,7 @@ pub unsafe fn unchecked_bitop_vec_radix_kb_assign<T: UnsignedInteger, B: Numeric
77667762
&raw const ms_noise_reduction_key_ffi,
77677763
);
77687764
cleanup_cuda_integer_bitop(
7769-
streams.ptr.as_ptr(),
7770-
streams.gpu_indexes_ptr(),
7771-
streams.len() as u32,
7765+
streams.ffi(),
77727766
std::ptr::addr_of_mut!(mem_ptr),
77737767
);
77747768
update_noise_degree(radix_lwe_left, &cuda_ffi_radix_lwe_left);

0 commit comments

Comments
 (0)