openmp/ompwrap

Types

OmpChunkCallback = proc (start, end: int64; context: pointer) {.cdecl.}
OmpLoopCallback = proc (idx: int64; context: pointer) {.cdecl.}

Procs

proc ompGetNumThreads(): cint {.importc: "omp_get_num_threads_wrapper", cdecl,
                                ...raises: [], tags: [], forbids: [].}
Get number of available OpenMP threads
proc ompParallelFor(start, end: int64; callback: OmpLoopCallback;
                    context: pointer) {.importc: "omp_parallel_for", cdecl,
                                        ...raises: [], tags: [], forbids: [].}
CPU parallel for loop with static scheduling (per-iteration callback)
proc ompParallelForChunked(start, end: int64; callback: OmpChunkCallback;
                           context: pointer) {.
    importc: "omp_parallel_for_chunked", cdecl, ...raises: [], tags: [],
    forbids: [].}
CPU parallel for loop with chunked dispatch (range per thread) Each thread receives a contiguous [start, end) range, enabling the callback to iterate with compiler auto-vectorization.
proc ompSetNumThreads(numThreads: cint) {.
    importc: "omp_set_num_threads_wrapper", cdecl, ...raises: [], tags: [],
    forbids: [].}
Set number of threads