tfhe_cuda_backend/
cuda_bind.rs

1use std::ffi::c_void;
2
3#[link(name = "tfhe_cuda_backend", kind = "static")]
4extern "C" {
5
6    pub fn cuda_create_stream(gpu_index: u32) -> *mut c_void;
7
8    pub fn cuda_destroy_stream(stream: *mut c_void, gpu_index: u32);
9
10    pub fn cuda_synchronize_stream(stream: *mut c_void, gpu_index: u32);
11
12    pub fn cuda_is_available() -> u32;
13
14    pub fn cuda_malloc(size: u64, gpu_index: u32) -> *mut c_void;
15
16    pub fn cuda_malloc_with_size_tracking_async(
17        size: u64,
18        stream: *mut c_void,
19        gpu_index: u32,
20        size_tracker: *mut u64,
21        allocate_gpu_memory: bool,
22    ) -> *mut c_void;
23
24    pub fn cuda_malloc_async(size: u64, stream: *mut c_void, gpu_index: u32) -> *mut c_void;
25    pub fn cuda_check_valid_malloc(size: u64, gpu_index: u32) -> bool;
26    pub fn cuda_device_total_memory(gpu_index: u32) -> u64;
27
28    pub fn cuda_memcpy_with_size_tracking_async_to_gpu(
29        dest: *mut c_void,
30        src: *const c_void,
31        size: u64,
32        stream: *mut c_void,
33        gpu_index: u32,
34        gpu_memory_allocated: bool,
35    );
36
37    pub fn cuda_memcpy_async_to_gpu(
38        dest: *mut c_void,
39        src: *const c_void,
40        size: u64,
41        stream: *mut c_void,
42        gpu_index: u32,
43    );
44
45    pub fn cuda_memcpy_gpu_to_gpu(dest: *mut c_void, src: *const c_void, size: u64, gpu_index: u32);
46
47    pub fn cuda_memcpy_with_size_tracking_async_gpu_to_gpu(
48        dest: *mut c_void,
49        src: *const c_void,
50        size: u64,
51        stream: *mut c_void,
52        gpu_index: u32,
53        gpu_memory_allocated: bool,
54    );
55
56    pub fn cuda_memcpy_async_gpu_to_gpu(
57        dest: *mut c_void,
58        src: *const c_void,
59        size: u64,
60        stream: *mut c_void,
61        gpu_index: u32,
62    );
63
64    pub fn cuda_memcpy_async_to_cpu(
65        dest: *mut c_void,
66        src: *const c_void,
67        size: u64,
68        stream: *mut c_void,
69        gpu_index: u32,
70    );
71
72    pub fn cuda_memset_with_size_tracking_async(
73        dest: *mut c_void,
74        val: u64,
75        size: u64,
76        stream: *mut c_void,
77        gpu_index: u32,
78        gpu_memory_allocated: bool,
79    );
80
81    pub fn cuda_memset_async(
82        dest: *mut c_void,
83        val: u64,
84        size: u64,
85        stream: *mut c_void,
86        gpu_index: u32,
87    );
88
89    pub fn cuda_get_number_of_gpus() -> i32;
90
91    pub fn cuda_synchronize_device(gpu_index: u32);
92
93    pub fn cuda_drop(ptr: *mut c_void, gpu_index: u32);
94
95    pub fn cuda_drop_with_size_tracking_async(
96        ptr: *mut c_void,
97        stream: *mut c_void,
98        gpu_index: u32,
99        size_tracker: *mut u64,
100        allocate_gpu_memory: bool,
101    );
102
103    pub fn cuda_drop_async(ptr: *mut c_void, stream: *mut c_void, gpu_index: u32);
104
105    pub fn cuda_setup_multi_gpu(gpu_index: u32) -> i32;
106
107} // extern "C"