sig
  type cuda_extra
  external cuda_create_extra : int -> Kernel.Cuda.cuda_extra
    = "spoc_cuda_create_extra"
  external cuda_load_param_vec :
    int Pervasives.ref -> Kernel.Cuda.cuda_extra -> Vector.device_vec -> unit
    = "spoc_cuda_load_param_vec_b" "spoc_cuda_load_param_vec_n"
  external cuda_custom_load_param_vec :
    int Pervasives.ref -> Kernel.Cuda.cuda_extra -> Vector.device_vec -> unit
    = "spoc_cuda_custom_load_param_vec_b" "spoc_cuda_custom_load_param_vec_n"
  external cuda_load_param_int :
    int Pervasives.ref -> Kernel.Cuda.cuda_extra -> int -> unit
    = "spoc_cuda_load_param_int_b" "spoc_cuda_load_param_int_n"
  external cuda_load_param_int64 :
    int Pervasives.ref -> Kernel.Cuda.cuda_extra -> int -> unit
    = "spoc_cuda_load_param_int64_b" "spoc_cuda_load_param_int64_n"
  external cuda_load_param_float :
    int Pervasives.ref -> Kernel.Cuda.cuda_extra -> float -> unit
    = "spoc_cuda_load_param_float_b" "spoc_cuda_load_param_float_n"
  external cuda_load_param_float64 :
    int Pervasives.ref -> Kernel.Cuda.cuda_extra -> float -> unit
    = "spoc_cuda_load_param_float64_b" "spoc_cuda_load_param_float64_n"
  external set_block_shape :
    Kernel.kernel -> Kernel.block -> Devices.generalInfo -> unit
    = "spoc_cuda_set_block_shape"
  external cuda_launch_grid :
    int Pervasives.ref ->
    Kernel.kernel ->
    Kernel.grid ->
    Kernel.block -> Kernel.Cuda.cuda_extra -> Devices.generalInfo -> unit
    = "spoc_cuda_launch_grid_b" "spoc_cuda_launch_grid_n"
  external cuda_create_dummy_kernel : unit -> Kernel.kernel
    = "spoc_cuda_create_dummy_kernel"
  val cudaKernelCache :
    (Digest.t, Devices.generalInfo -> Kernel.kernel) Hashtbl.t array
    Pervasives.ref
  val cuda_load :
    bool ->
    int ->
    string ->
    string ->
    ('a, 'b) Kernel.kernelArgs array -> Devices.generalInfo -> Kernel.kernel
  val cuda_load_arg :
    int Pervasives.ref ->
    Kernel.Cuda.cuda_extra ->
    Devices.device -> '-> '-> ('c, 'd) Kernel.kernelArgs -> unit
end