#include #include #include #define CASE_ERR(ec) case ec: return #ec; const char * err_string(cl_int error) { switch(error) { CASE_ERR(CL_DEVICE_NOT_AVAILABLE); CASE_ERR(CL_DEVICE_NOT_FOUND); CASE_ERR(CL_INVALID_DEVICE); CASE_ERR(CL_INVALID_DEVICE_TYPE); CASE_ERR(CL_INVALID_OPERATION); CASE_ERR(CL_INVALID_PLATFORM); CASE_ERR(CL_INVALID_PROPERTY); CASE_ERR(CL_INVALID_VALUE); CASE_ERR(CL_OUT_OF_HOST_MEMORY); CASE_ERR(CL_OUT_OF_RESOURCES); CASE_ERR(CL_SUCCESS); } } int main(int argc, char ** argv) { cl_int error; cl_uint total_platforms; cl_platform_id platform_id; cl_uint total_gpu_devices; cl_device_id device_id; cl_context context; cl_command_queue command_queue; cl_mem out_buffer; float out_value = 0.0; error = clGetPlatformIDs( 1, /* Max number of platform IDs to return */ &platform_id, /* Pointer to platform_id */ &total_platforms); /* Total number of platforms * found on the system */ if (error != CL_SUCCESS) { fprintf(stderr, "clGetPlatformIDs() failed: %s\n", err_string(error)); return EXIT_FAILURE; } fprintf(stderr, "There are %u platforms.\n", total_platforms); error = clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_GPU, 1, &device_id, &total_gpu_devices); if (error != CL_SUCCESS) { fprintf(stderr, "clGetDeviceIDs() failed: %s\n", err_string(error)); return EXIT_FAILURE; } fprintf(stderr, "There are %u GPU devices.\n", total_gpu_devices); context = clCreateContext(NULL, /* Properties */ 1, /* Number of devices */ &device_id, /* Device pointer */ NULL, /* Callback for reporting errors */ NULL, /* User data to pass to error callback */ &error); /* Error code */ if (error != CL_SUCCESS) { fprintf(stderr, "clCreateContext() failed: %s\n", err_string(error)); return EXIT_FAILURE; } fprintf(stderr, "clCreateContext() succeeded.\n"); command_queue = clCreateCommandQueue(context, device_id, 0, /* Command queue properties */ &error); /* Error code */ if (error != CL_SUCCESS) { fprintf(stderr, "clCreateCommandQueue() failed: %s\n", err_string(error)); return EXIT_FAILURE; } fprintf(stderr, "clCreateCommandQueue() succeeded.\n"); out_buffer = clCreateBuffer(context, CL_MEM_WRITE_ONLY, /* Flags */ sizeof(float), /* Size of buffer */ NULL, /* Pointer to the data */ &error); /* error code */ if (error != CL_SUCCESS) { fprintf(stderr, "clCreateBuffer() failed: %s\n", err_string(error)); return EXIT_FAILURE; } fprintf(stderr, "clCreateBuffer() succeeded.\n"); return EXIT_SUCCESS; }