Spoc_framework_registry.Intrinsic_registrytype intrinsic_impl = {intr_name : string;intr_codegen : string;Code to generate (simple string for now)
*)intr_convergence : Spoc_framework.Framework_sig.convergence;}Generic intrinsic implementation record. This is the concrete type used by backends; the module type INTRINSIC_REGISTRY uses an abstract type to allow flexibility.
module Make
() :
Spoc_framework.Framework_sig.INTRINSIC_REGISTRY
with type intrinsic_impl = intrinsic_implCreate an intrinsic registry for a specific backend. Each backend should create its own registry instance.
module Global : sig ... endGlobal registry that combines all backend registries. Used for intrinsic lookup when the backend is not yet known.
module Thread_intrinsics : sig ... endThread indexing intrinsics - must be implemented by all GPU backends
module Sync_intrinsics : sig ... endSynchronization intrinsics
module Atomic_intrinsics : sig ... endAtomic operation intrinsics
module Math_intrinsics : sig ... endMath intrinsics - typically map to hardware instructions
val make_simple_intrinsic : name:string -> codegen:string -> intrinsic_implCreate a simple intrinsic that maps to a direct code string
val make_sync_intrinsic : name:string -> codegen:string -> intrinsic_implCreate a synchronization intrinsic
val make_divergent_intrinsic : name:string -> codegen:string -> intrinsic_implCreate a divergent intrinsic (result varies per thread)
val is_safe_in_divergent_flow : intrinsic_impl -> boolCheck if an intrinsic is safe to call in divergent control flow
val requires_uniform_execution : intrinsic_impl -> boolCheck if an intrinsic requires all threads to participate