Sarek_ppx_lib.Sarek_ppx_registrytype type_info = {ti_name : string;Type name, e.g., "float32"
*)ti_device : Spoc_core.Device.t -> string;Device type string, e.g., "float"
*)ti_size : int;Size in bytes
*)ti_sarek_type : Sarek_types.typ;Sarek type representation
*)}Type information for registered types (like float32, int64, etc.)
type intrinsic_info = {ii_name : string;Function name, e.g., "sin"
*)ii_qualified_name : string;Qualified name, e.g., "Float32.sin"
*)ii_type : Sarek_types.typ;Type signature
*)ii_device : Spoc_core.Device.t -> string;Device code generator - more generic than storing cuda/opencl separately
*)ii_module : string list;Module path, e.g., "Sarek_stdlib"; "Float32"
}Intrinsic function information
type const_info = {ci_name : string;Constant name
*)ci_qualified_name : string;Qualified name
*)ci_type : Sarek_types.typ;Type
*)ci_device : Spoc_core.Device.t -> string;Device code generator
*)ci_module : string list;Module path
*)}Intrinsic constant information (like thread_idx_x)
type module_item_info = {mi_name : string;Function/constant name
*)mi_qualified_name : string;Qualified name, e.g., "Registered_defs.add_vec"
*)mi_module : string;Module name, e.g., "Registered_defs"
*)mi_item : Sarek_ast.module_item;The parsed AST item (MFun or MConst)
*)}Module item information for @sarek.module functions and constants. Unlike intrinsics, these are user-defined functions that get inlined into the generated GPU code.
type record_type_info = {rti_name : string;Type name
*)rti_qualified_name : string;Qualified name
*)rti_module : string;Module name
*)rti_decl : Sarek_ast.type_decl;The type declaration
*)}Record type information for @sarek.type records
val types : (string, type_info) Stdlib.Hashtbl.tThe registries - populated at PPX load time
val intrinsics : (string, intrinsic_info) Stdlib.Hashtbl.tval consts : (string, const_info) Stdlib.Hashtbl.tval module_items : (string, module_item_info) Stdlib.Hashtbl.tval record_types : (string, record_type_info) Stdlib.Hashtbl.tval register_type : type_info -> unitRegister a type
val register_intrinsic : intrinsic_info -> unitRegister an intrinsic function
val register_const : const_info -> unitRegister an intrinsic constant
val register_module_item : module_item_info -> unitRegister a module item (@sarek.module function or constant)
val register_record_type : record_type_info -> unitRegister a record type (@sarek.type)
val find_type : string -> type_info optionFind a type by name
val find_intrinsic : string -> intrinsic_info optionFind an intrinsic by name (short or qualified)
val find_const : string -> const_info optionFind a constant by name (short or qualified)
val find_module_item : string -> module_item_info optionFind a module item by name (short or qualified)
val find_record_type : string -> record_type_info optionFind a record type by name (short or qualified)
val all_types : unit -> type_info listGet all registered types
val all_intrinsics : unit -> intrinsic_info listGet all registered intrinsics
val all_consts : unit -> const_info listGet all registered constants
val all_module_items : unit -> module_item_info listGet all registered module items
val all_record_types : unit -> record_type_info listGet all registered record types
val make_type_info :
name:string ->
device:(Spoc_core.Device.t -> string) ->
size:int ->
sarek_type:Sarek_types.typ ->
type_infoHelper: create type_info for a numeric type
val make_intrinsic_info :
name:string ->
module_path:string list ->
typ:Sarek_types.typ ->
device:(Spoc_core.Device.t -> string) ->
intrinsic_infoHelper: create intrinsic_info
val make_const_info :
name:string ->
module_path:string list ->
typ:Sarek_types.typ ->
device:(Spoc_core.Device.t -> string) ->
const_infoHelper: create const_info
val make_module_item_info :
name:string ->
module_name:string ->
item:Sarek_ast.module_item ->
module_item_infoHelper: create module_item_info
val make_record_type_info :
name:string ->
module_name:string ->
decl:Sarek_ast.type_decl ->
record_type_infoHelper: create record_type_info