Module Sarek_cuda.Sarek_ir_cuda

val current_device : Spoc_core.Device.t option Stdlib.ref

Current device for SNative code generation (set during generate_for_device)

val current_variants : (string * (string * Sarek_ir_types.elttype list) list) list Stdlib.ref

Current kernel's variant definitions (set during generate)

Type Mapping

val mangle_name : string -> string

Mangle OCaml type name to valid C identifier (e.g., "Module.point" -> "Module_point")

val cuda_type_of_elttype : Sarek_ir_types.elttype -> string

Map Sarek IR element type to CUDA C type string

val cuda_param_type : Sarek_ir_types.elttype -> string

Map Sarek IR element type to CUDA C type for kernel parameters

Thread Intrinsics

val cuda_thread_intrinsic : string -> string

Expression Generation

val gen_expr : Stdlib.Buffer.t -> Sarek_ir_types.expr -> unit
val gen_binop : Sarek_ir_types.binop -> string
val gen_unop : Sarek_ir_types.unop -> string
val gen_intrinsic : Stdlib.Buffer.t -> string list -> string -> Sarek_ir_types.expr list -> unit

L-value Generation

val gen_lvalue : Stdlib.Buffer.t -> Sarek_ir_types.lvalue -> unit

Statement Generation

val gen_stmt : Stdlib.Buffer.t -> string -> Sarek_ir_types.stmt -> unit
val gen_record_assign : Stdlib.Buffer.t -> string -> Sarek_ir_types.lvalue -> (string * Sarek_ir_types.expr) list -> unit

Helper: Generate record field assignment

val gen_match_case : Stdlib.Buffer.t -> string -> string -> Sarek_ir_types.pattern -> Sarek_ir_types.stmt -> unit

Helper: Generate switch case for pattern match

val gen_array_decl : Stdlib.Buffer.t -> Sarek_ir_types.var -> Sarek_ir_types.elttype -> Sarek_ir_types.expr -> Sarek_ir_types.memspace -> unit

Helper: Generate array declaration for SLet with EArrayCreate

Declaration Generation

val is_vec_type : Sarek_ir_types.elttype -> bool

Check if a type is a vector (requires length parameter)

val gen_param : Stdlib.Buffer.t -> Sarek_ir_types.decl -> unit
val gen_local : Stdlib.Buffer.t -> string -> Sarek_ir_types.decl -> unit

Helper Function Generation

val gen_helper_func : Stdlib.Buffer.t -> Sarek_ir_types.helper_func -> unit

Generate a device helper function

Kernel Generation

val cuda_header : string

Generate the CUDA kernel header

val generate : Sarek_ir_types.kernel -> string

Generate complete CUDA source for a kernel

val generate_for_device : device:Spoc_core.Device.t -> Sarek_ir_types.kernel -> string

Generate complete CUDA source with device context for SNative

val gen_variant_def : Stdlib.Buffer.t -> (string * (string * Sarek_ir_types.elttype list) list) -> unit

Generate CUDA variant type definition

val generate_with_types : types:(string * (string * Sarek_ir_types.elttype) list) list -> Sarek_ir_types.kernel -> string

Generate CUDA source with custom type definitions