sycl/syclbase

SYCL Base Module - Native Kernel Edition

Higher-level SYCL utilities for tensor operations. This version uses pre-compiled native SYCL kernels, ensuring compatibility with all SYCL devices (CPU, GPU, accelerators).

Global State:

  • syclQueues: seqSyclQueue - One queue per device
  • syclDeviceType: SyclDeviceType - Device type (CPU/GPU/etc)

Usage: initSycl() # Initialize SYCL with default device initSycl(sdtGPU) # Initialize SYCL with GPU var buf = allocatefloat64 write(queue, data, buf) # ... run kernels via the each macro ... read(queue, result, buf) finalizeSycl()

Procs

proc buffer[T](queue: SyclQueue; count: int): SyclBuffer
Allocate a typed buffer on the device.
proc bufferLike[T](queue: SyclQueue; data: openArray[T]): SyclBuffer
Allocate a buffer sized to match the given array.
proc finalizeSycl() {....raises: [], tags: [], forbids: [].}
Finalize SYCL and release all resources.
proc finish(queue: SyclQueue): TClResult {....raises: [], tags: [], forbids: [].}
Wait for all operations on queue to complete. Returns Success for OpenCL compatibility.
proc initSycl(dtype: SyclDeviceType = sdtDefault) {....raises: [ESycl], tags: [],
    forbids: [].}
Initialize SYCL with the specified device type. Creates one queue per available device.
proc read(queue: SyclQueue; dest: pointer; buf: SyclBuffer; size: int) {.
    ...raises: [], tags: [], forbids: [].}
Read raw data from device buffer.
proc read[T](queue: SyclQueue; data: var openArray[T]; buf: SyclBuffer)
Read device buffer into array.
proc release(buf: SyclBuffer) {....raises: [], tags: [], forbids: [].}
Release a buffer using the first global queue. OpenCL compatibility - in OpenCL, buffers are associated with context not queue.
proc release(buf: SyclBuffer; queue: SyclQueue) {....raises: [], tags: [],
    forbids: [].}
Release a buffer with explicit queue.
proc write(queue: SyclQueue; src: pointer; buf: SyclBuffer; size: int) {.
    ...raises: [], tags: [], forbids: [].}
Write raw data to device buffer.
proc write[T](queue: SyclQueue; data: openArray[T]; buf: SyclBuffer)
Write array data to device buffer.

Templates

template check(a: TClResult)
OpenCL compatibility - SYCL throws exceptions on error
template clContext(): SyclQueue
template clDevices(): seq[SyclQueue]
template clQueues(): seq[SyclQueue]