1 #if defined(TEST_OPENCL)
4 #define CL_TARGET_OPENCL_VERSION 120
5 #define CL_USE_DEPRECATED_OPENCL_1_2_APIS
20 err = clGetPlatformIDs(maxPlatforms, platforms, &platformCount);
22 printf(
"clGetPlatformIDs failed (%d)\n", err);
28 if (platformCount > 0) {
29 platform = platforms[0];
31 if (platform ==
nullptr) {
32 printf(
"Failed to get platform\n");
42 err = clGetDeviceIDs(platform, device_type, maxDevices, devices, &deviceCount);
44 printf(
"clGetDeviceIDs failed (%d)\n", err);
47 if (deviceCount == 0) {
48 printf(
"Failed to get device\n");
57 cl_ctx = clCreateContext(properties, 1, &dev,
nullptr,
nullptr, &err);
59 printf(
"clCreateContext failed (%d)\n", err);
63 cl_q = clCreateCommandQueue(cl_ctx, dev, 0, &err);
65 printf(
"clCreateCommandQueue failed (%d)\n", err);
72 clReleaseCommandQueue(cl_q);
73 clReleaseContext(cl_ctx);
76 #elif defined(TEST_CUDA)
80 bool create_cuda_context(
CUcontext &cuda_ctx) {
84 printf(
"cuInit failed (%d)\n", err);
90 err = cuDeviceGetCount(&deviceCount);
92 printf(
"cuGetDeviceCount failed (%d)\n", err);
95 if (deviceCount <= 0) {
96 printf(
"No CUDA devices available\n");
105 if (deviceCount > 2) deviceCount = 2;
106 for (
int id = deviceCount - 1;
id >= 0;
id--) {
107 status = cuDeviceGet(&dev,
id);
112 printf(
"Failed to get CUDA device\n");
117 err = cuCtxCreate(&cuda_ctx, 0, dev);
119 printf(
"cuCtxCreate failed (%d)\n", err);
126 void destroy_cuda_context(
CUcontext cuda_ctx) {
127 cuCtxDestroy(cuda_ctx);
130 #elif defined(TEST_METAL) && defined(__OBJC__)
131 #include <Metal/MTLCommandQueue.h>
132 #include <Metal/MTLDevice.h>
134 bool create_metal_context(id<MTLDevice> &device, id<MTLCommandQueue> &queue) {
135 device = MTLCreateSystemDefaultDevice();
136 if (device ==
nullptr) {
137 NSArray<id<MTLDevice>> *devices = MTLCopyAllDevices();
138 if (devices !=
nullptr) {
142 if (device ==
nullptr) {
143 printf(
"Failed to find Metal device.\n");
146 queue = [device newCommandQueue];
147 if (queue ==
nullptr) {
148 printf(
"Failed to create Metal command queue.\n");
154 void destroy_metal_context(id<MTLDevice> device, id<MTLCommandQueue> queue) {
struct _cl_platform_id * cl_platform_id
intptr_t cl_context_properties
cl_bitfield cl_device_type
#define CL_DEVICE_TYPE_ALL
#define CL_CONTEXT_PLATFORM
struct _cl_context * cl_context
struct _cl_device_id * cl_device_id
struct _cl_command_queue * cl_command_queue
struct CUctx_st * CUcontext
CUDA context.