openvm_recursion_circuit/cuda/
abi.rs

1#![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}