1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use crateGpuIndex;
/// Check there is enough memory on the GPU to allocate a certain size
/// # Example
///
/// ```rust
/// use rand::Rng;
/// use tfhe::prelude::*;
/// use tfhe::{set_server_key, ClientKey, CompressedServerKey, ConfigBuilder, FheInt32, GpuIndex};
///
/// let config = ConfigBuilder::default();
/// let client_key = ClientKey::generate(config);
/// let csks = CompressedServerKey::new(&client_key);
/// let server_key = csks.decompress_to_gpu();
/// set_server_key(server_key);
/// let mut rng = rand::thread_rng();
/// let clear_a = rng.gen_range(1..=i32::MAX);
/// let clear_b = rng.gen_range(1..=i32::MAX);
/// let mut a = FheInt32::try_encrypt(clear_a, &client_key).unwrap();
/// let mut b = FheInt32::try_encrypt(clear_b, &client_key).unwrap();
/// let ciphertexts_size = a.get_size_on_gpu() + b.get_size_on_gpu();
/// check_valid_cuda_malloc_assert_oom(ciphertexts_size, GpuIndex::new(0));
///
/// a.move_to_current_device();
/// b.move_to_current_device();
///
/// let tmp_buffer_size = a.get_add_size_on_gpu(&b);
/// check_valid_cuda_malloc_assert_oom(tmp_buffer_size, GpuIndex::new(0));
/// a += &b;
/// ```