openvm_recursion_circuit/cuda/
abi.rs1#![allow(clippy::missing_safety_doc)]
2
3use openvm_cuda_backend::prelude::F;
4use openvm_cuda_common::{d_buffer::DeviceBuffer, error::CudaError, stream::cudaStream_t};
5
6extern "C" {
7 fn _merkle_precomputation_hash_vectors(
8 d_data: *const F,
9 d_descriptors: *const VectorDescriptor,
10 num_vectors: usize,
11 d_pre_states: *mut F,
12 d_post_states: *mut F,
13 stream: cudaStream_t,
14 ) -> i32;
15}
16
17#[repr(C)]
18#[derive(Clone, Copy, Debug)]
19pub struct VectorDescriptor {
20 pub data_offset: usize,
21 pub len: usize,
22 pub output_offset: usize,
23}
24
25pub unsafe fn merkle_precomputation_hash_vectors(
26 d_data: &DeviceBuffer<F>,
27 d_descriptors: &DeviceBuffer<VectorDescriptor>,
28 num_vectors: usize,
29 d_pre_states: &DeviceBuffer<F>,
30 d_post_states: &DeviceBuffer<F>,
31 stream: cudaStream_t,
32) -> Result<(), CudaError> {
33 CudaError::from_result(_merkle_precomputation_hash_vectors(
34 d_data.as_ptr(),
35 d_descriptors.as_ptr(),
36 num_vectors,
37 d_pre_states.as_mut_ptr(),
38 d_post_states.as_mut_ptr(),
39 stream,
40 ))
41}