#ifndef CUDA_BOOTSTRAP_H #define CUDA_BOOTSTRAP_H #include "pbs_enums.h" #include extern "C" { void cuda_fourier_polynomial_mul(void *stream, uint32_t gpu_index, void const *input1, void const *input2, void *output, uint32_t polynomial_size, uint32_t total_polynomials); void cuda_convert_lwe_programmable_bootstrap_key_32( void *stream, uint32_t gpu_index, void *dest, void const *src, uint32_t input_lwe_dim, uint32_t glwe_dim, uint32_t level_count, uint32_t polynomial_size); void cuda_convert_lwe_programmable_bootstrap_key_64( void *stream, uint32_t gpu_index, void *dest, void const *src, uint32_t input_lwe_dim, uint32_t glwe_dim, uint32_t level_count, uint32_t polynomial_size); void cuda_convert_lwe_programmable_bootstrap_key_128( void *stream, uint32_t gpu_index, void *dest, void const *src, uint32_t input_lwe_dim, uint32_t glwe_dim, uint32_t level_count, uint32_t polynomial_size); uint64_t scratch_cuda_programmable_bootstrap_amortized_32( void *stream, uint32_t gpu_index, int8_t **pbs_buffer, uint32_t glwe_dimension, uint32_t polynomial_size, uint32_t input_lwe_ciphertext_count, bool allocate_gpu_memory); uint64_t scratch_cuda_programmable_bootstrap_amortized_64( void *stream, uint32_t gpu_index, int8_t **pbs_buffer, uint32_t glwe_dimension, uint32_t polynomial_size, uint32_t input_lwe_ciphertext_count, bool allocate_gpu_memory); void cuda_programmable_bootstrap_amortized_lwe_ciphertext_vector_32( void *stream, uint32_t gpu_index, void *lwe_array_out, void const *lwe_output_indexes, void const *lut_vector, void const *lut_vector_indexes, void const *lwe_array_in, void const *lwe_input_indexes, void const *bootstrapping_key, int8_t *pbs_buffer, uint32_t lwe_dimension, uint32_t glwe_dimension, uint32_t polynomial_size, uint32_t base_log, uint32_t level_count, uint32_t num_samples); void cuda_programmable_bootstrap_amortized_lwe_ciphertext_vector_64( void *stream, uint32_t gpu_index, void *lwe_array_out, void const *lwe_output_indexes, void const *lut_vector, void const *lut_vector_indexes, void const *lwe_array_in, void const *lwe_input_indexes, void const *bootstrapping_key, int8_t *pbs_buffer, uint32_t lwe_dimension, uint32_t glwe_dimension, uint32_t polynomial_size, uint32_t base_log, uint32_t level_count, uint32_t num_samples); void cleanup_cuda_programmable_bootstrap_amortized(void *stream, uint32_t gpu_index, int8_t **pbs_buffer); uint64_t scratch_cuda_programmable_bootstrap_32( void *stream, uint32_t gpu_index, int8_t **buffer, uint32_t lwe_dimension, uint32_t glwe_dimension, uint32_t polynomial_size, uint32_t level_count, uint32_t input_lwe_ciphertext_count, bool allocate_gpu_memory, PBS_MS_REDUCTION_T noise_reduction_type); uint64_t scratch_cuda_programmable_bootstrap_64( void *stream, uint32_t gpu_index, int8_t **buffer, uint32_t lwe_dimension, uint32_t glwe_dimension, uint32_t polynomial_size, uint32_t level_count, uint32_t input_lwe_ciphertext_count, bool allocate_gpu_memory, PBS_MS_REDUCTION_T noise_reduction_type); uint64_t scratch_cuda_programmable_bootstrap_32_64( void *stream, uint32_t gpu_index, int8_t **buffer, uint32_t lwe_dimension, uint32_t glwe_dimension, uint32_t polynomial_size, uint32_t level_count, uint32_t input_lwe_ciphertext_count, bool allocate_gpu_memory, PBS_MS_REDUCTION_T noise_reduction_type); uint64_t scratch_cuda_programmable_bootstrap_128( void *stream, uint32_t gpu_index, int8_t **buffer, uint32_t lwe_dimension, uint32_t glwe_dimension, uint32_t polynomial_size, uint32_t level_count, uint32_t input_lwe_ciphertext_count, bool allocate_gpu_memory, PBS_MS_REDUCTION_T noise_reduction_type); void cuda_programmable_bootstrap_lwe_ciphertext_vector_64_64( void *stream, uint32_t gpu_index, void *lwe_array_out, void const *lwe_output_indexes, void const *lut_vector, void const *lut_vector_indexes, void const *lwe_array_in, void const *lwe_input_indexes, void const *bootstrapping_key, int8_t *buffer, uint32_t lwe_dimension, uint32_t glwe_dimension, uint32_t polynomial_size, uint32_t base_log, uint32_t level_count, uint32_t num_samples, uint32_t num_many_lut, uint32_t lut_stride); void cuda_programmable_bootstrap_lwe_ciphertext_vector_32_64( void *stream, uint32_t gpu_index, void *lwe_array_out, void const *lwe_output_indexes, void const *lut_vector, void const *lut_vector_indexes, void const *lwe_array_in, void const *lwe_input_indexes, void const *bootstrapping_key, int8_t *buffer, uint32_t lwe_dimension, uint32_t glwe_dimension, uint32_t polynomial_size, uint32_t base_log, uint32_t level_count, uint32_t num_samples, uint32_t num_many_lut, uint32_t lut_stride); void cuda_programmable_bootstrap_lwe_ciphertext_vector_128( void *stream, uint32_t gpu_index, void *lwe_array_out, void const *lut_vector, void const *lwe_array_in, void const *bootstrapping_key, int8_t *buffer, uint32_t lwe_dimension, uint32_t glwe_dimension, uint32_t polynomial_size, uint32_t base_log, uint32_t level_count, uint32_t num_samples); void cleanup_cuda_programmable_bootstrap(void *stream, uint32_t gpu_index, int8_t **pbs_buffer); void cleanup_cuda_programmable_bootstrap_128(void *stream, uint32_t gpu_index, int8_t **pbs_buffer); } #endif // CUDA_BOOTSTRAP_H