gpu_compute.h

← Back to explorer
include/ gpu_compute.h
Raw
H 65 lines · UTF-8
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
// Created by AG on 17-08-2026

#ifndef GPU_COMPUTE_H
#define GPU_COMPUTE_H

#ifdef SYSTEM_HAS_OPENCL

#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include <CL/cl.h>
#endif

#include <stddef.h>

typedef enum {
  OPENCL_KERNEL_MATH_ADD,
  OPENCL_KERNEL_MATH_SUBTRACT,
  OPENCL_KERNEL_MATH_SCALE,
  OPENCL_KERNEL_MATH_FILL,
  OPENCL_KERNEL_MATH_CLEAR,
  OPENCL_KERNEL_MATH_COPY,
  OPENCL_KERNEL_MATH_ACCUMULATE,
  OPENCL_KERNEL_ADD_BIAS,
  OPENCL_KERNEL_ADD_BIAS_GRADIENT,
  OPENCL_KERNEL_MATRIX_MULTIPLICATION_NN,
  OPENCL_KERNEL_MATRIX_MULTIPLICATION_NT,
  OPENCL_KERNEL_MATRIX_MULTIPLICATION_TN,
  OPENCL_KERNEL_MATRIX_MULTIPLICATION_TT,
  OPENCL_KERNEL_RELU_FORWARD,
  OPENCL_KERNEL_RELU_BACKWARD,
  OPENCL_KERNEL_SOFTMAX_FORWARD,
  OPENCL_KERNEL_SOFTMAX_BACKWARD,
  OPENCL_KERNEL_CROSS_ENTROPY_FORWARD,
  OPENCL_KERNEL_CROSS_ENTROPY_PREDICTED,
  OPENCL_KERNEL_CROSS_ENTROPY_EXPECTED,
  OPENCL_KERNEL_PARAM_UPDATE,
  OPENCL_KERNEL_COUNT
} OpenCLKernelId;

typedef struct {
  cl_platform_id platform;
  cl_device_id device;
  cl_context context;
  cl_command_queue queue;
  cl_program program;
  cl_kernel kernels[OPENCL_KERNEL_COUNT];
  int initialized;
} OpenCLDevice;

OpenCLDevice *opencl_device_create(const char *kernel_source_path);
void opencl_device_destroy(OpenCLDevice *device);

cl_mem opencl_device_alloc(OpenCLDevice *device, size_t byte_count);
void opencl_device_free(cl_mem buffer);
void opencl_device_upload(OpenCLDevice *device, cl_mem buffer, const void *host_ptr, size_t byte_count);
void opencl_device_download(OpenCLDevice *device, cl_mem buffer, void *host_ptr, size_t byte_count);
void opencl_device_finish(OpenCLDevice *device);

void opencl_device_dispatch_1d(OpenCLDevice *device, OpenCLKernelId kernel_id, size_t global_size);
cl_kernel opencl_device_get_kernel(OpenCLDevice *device, OpenCLKernelId kernel_id);

#endif

#endif