16#ifndef OAKFIELD_BACKEND_H
17#define OAKFIELD_BACKEND_H
186sim_backend_metal_debug_copy_device_name(
SimBackend* backend,
char* out_name,
size_t capacity);
195SimResult sim_backend_metal_debug_get_pipeline_cache_count(
SimBackend* backend,
size_t* out_count);
215static inline bool backend_supports_features(
const SimBackend* backend, uint64_t mask) {
216 if (backend == NULL) {
219 return (backend->
features & mask) == mask;
230 return backend_supports_features(backend, (uint64_t) feature);
240 if (backend == NULL) {
243 backend->
features |= (uint64_t) feature;
253 if (backend == NULL) {
256 backend->
features &= ~((uint64_t) feature);
265static inline void backend_set_features(
SimBackend* backend, uint64_t mask) {
266 if (backend == NULL) {
279 if (binding == NULL || binding->
shape == NULL || binding->
rank == 0U) {
282 return binding->
shape[binding->
rank - 1U];
294 if (binding == NULL || binding->
shape == NULL || binding->
rank == 0U) {
297 if (binding->
rank == 1U) {
300 return binding->
shape[binding->
rank - 2U];
320 if (binding == NULL || out_x == NULL || out_y == NULL) {
324 const size_t* shape = binding->
shape;
325 const size_t* strides = binding->
strides;
326 size_t rank = binding->
rank;
327 if ((shape == NULL || strides == NULL || rank == 0U) && binding->
field != NULL) {
333 if (shape == NULL || strides == NULL || rank == 0U) {
338 for (
size_t i = 0U; i < rank; ++i) {
339 if (shape[i] == 0U) {
344 if (index >= count) {
354 size_t axis_x = rank - 1U;
355 size_t axis_y = rank - 2U;
356 size_t extent_x = shape[axis_x];
357 size_t extent_y = shape[axis_y];
358 size_t stride_x = strides[axis_x];
359 size_t stride_y = strides[axis_y];
360 if (extent_x == 0U || extent_y == 0U || stride_x == 0U || stride_y == 0U) {
364 *out_x = (index / stride_x) % extent_x;
365 *out_y = (index / stride_y) % extent_y;
SimBackendType
Identifies the concrete backend implementation in use.
Definition backend.h:33
@ SIM_BACKEND_TYPE_CPU
Definition backend.h:34
@ SIM_BACKEND_TYPE_METAL
Definition backend.h:36
@ SIM_BACKEND_TYPE_CUDA
Definition backend.h:35
void backend_init(SimBackend *backend)
Initialize a backend instance.
SimKernelComplexSemantics
Declares how complex-valued IR lanes should be interpreted by backends.
Definition backend.h:85
@ SIM_KERNEL_COMPLEX_SEMANTICS_TRUE_COMPLEX
Definition backend.h:86
@ SIM_KERNEL_COMPLEX_SEMANTICS_COMPONENTWISE
Definition backend.h:87
bool sim_backend_cpu_vdsp_enabled(const SimBackend *backend)
Query whether the CPU backend currently uses vDSP fast paths.
void backend_destroy(SimBackend *backend)
Tear down a backend instance and release owned resources.
SimBackendFeature
Compute backend feature flags indicating supported capabilities.
Definition backend.h:46
@ SIM_BACKEND_FEATURE_BOUNDARY_AWARE_DIFFS
Definition backend.h:49
@ SIM_BACKEND_FEATURE_ANALYTIC_WARP
Definition backend.h:48
@ SIM_BACKEND_FEATURE_NONE
Definition backend.h:47
void sim_backend_cpu_set_vdsp_enabled(SimBackend *backend, bool enabled)
Enable or disable vDSP fast paths on the CPU backend at runtime.
void backend_launch(SimBackend *backend, KernelIR *kernel)
Launch a kernel on the selected backend implementation.
Multidimensional contiguous field abstraction with configurable layout.
SimResult
Return codes shared by libsimcore modules.
Definition field.h:29
@ SIM_RESULT_OK
Definition field.h:30
@ SIM_RESULT_INVALID_ARGUMENT
Definition field.h:31
Intermediate representation facilities for libsimcore operator fusion.
size_t SimIRNodeId
Definition kernel_ir.h:28
KernelIR package describing the executable graph for a backend.
Definition backend.h:97
size_t output_count
Definition backend.h:102
const SimKernelIRBinding * bindings
Definition backend.h:99
uint64_t required_features
Definition backend.h:105
size_t param_count
Definition backend.h:104
const SimKernelIROutput * outputs
Definition backend.h:101
size_t binding_count
Definition backend.h:100
const SimIRBuilder * builder
Definition backend.h:98
double * params
Definition backend.h:103
SimKernelComplexSemantics complex_semantics
Definition backend.h:106
Runtime backend handle shared across implementations.
Definition backend.h:115
SimBackendType type
Definition backend.h:116
SimResult last_error
Definition backend.h:117
uint64_t features
Definition backend.h:118
void * impl
Definition backend.h:119
size_t * strides
Definition field.h:150
size_t * shape
Definition field.h:149
size_t rank
Definition field.h:148
Owning multidimensional field.
Definition field.h:157
SimFieldLayout layout
Definition field.h:158
Monotonic arena for IR node allocation.
Definition kernel_ir.h:347
Field binding made available to a compiled kernel.
Definition backend.h:59
const size_t * shape
Definition backend.h:62
size_t rank
Definition backend.h:64
size_t field_index
Definition backend.h:60
const size_t * strides
Definition backend.h:63
SimField * field
Definition backend.h:61
Output specification emitted by a kernel.
Definition backend.h:73
size_t field_index
Definition backend.h:74
SimIRNodeId expression
Definition backend.h:75