Sarek_interp.Sarek_ir_interp_intrinsicsThese helper functions handle specific categories of GPU intrinsics. Split from a monolithic eval_intrinsic for better maintainability and testability. Each helper returns Option to enable clean dispatch logic.
Evaluate GPU thread/block/grid index and dimension intrinsics.
Handles the complete GPU execution model intrinsics:
Example: eval_gpu_index_intrinsic state "global_idx_x" (* Returns: VInt32 (block_idx_x * block_dim_x + thread_idx_x) *)
val eval_gpu_index_intrinsic :
Sarek_ir_interp_value.thread_state ->
string ->
Sarek_ir_interp_value.value optionGPU thread/block/grid indices and dimensions
val eval_barrier_intrinsic : string -> Sarek_ir_interp_value.value optionBarrier synchronization intrinsics
val atomic_index : string -> 'a array -> Sarek_ir_interp_value.value -> intGlobal-memory atomics and memory fences.
Atomics on global vectors return the OLD value and update in place. The interpreter models global memory as a shared mutable VArray; fences are no-ops because a single logical memory is already sequentially consistent here. Sufficient for the Sarek_worklist queue pattern (atomic HEAD/TAIL counters + ring slots).
val eval_atomic_intrinsic :
string ->
Sarek_ir_interp_value.value list ->
Sarek_ir_interp_value.value optionval eval_float32_math_intrinsic :
string ->
Sarek_ir_interp_value.value list ->
Sarek_ir_interp_value.value optionFloat32 math intrinsics
val eval_float64_math_intrinsic :
string ->
Sarek_ir_interp_value.value list ->
Sarek_ir_interp_value.value optionFloat64 math intrinsics
val eval_int32_math_intrinsic :
string ->
Sarek_ir_interp_value.value list ->
Sarek_ir_interp_value.value optionInt32 math intrinsics
val eval_type_conversion_intrinsic :
string ->
Sarek_ir_interp_value.value list ->
Sarek_ir_interp_value.value optionType conversion intrinsics