22https://www.khronos.org/registry/cl/sdk/2.1/docs/man/xhtml/workItemFunctions.html
33*/
44
5- #include <assert.h>
6- #include <stdlib.h>
7- #include <stdio.h>
8-
9- #include <CL/cl.h>
5+ #include "common.h"
106
117#define NUM_FUNCTIONS (8)
128/* Play around with those parameters. */
@@ -36,26 +32,30 @@ int main(void) {
3632 cl_command_queue command_queue ;
3733 cl_context context ;
3834 cl_device_id device ;
39- cl_uint output [ NUM_FUNCTIONS ] ;
35+ cl_int ret ;
4036 cl_kernel kernel ;
4137 cl_mem buffer ;
4238 cl_platform_id platform ;
4339 cl_program program ;
40+ cl_uint output [NUM_FUNCTIONS ];
4441
42+ /* Run kernel. */
4543 clGetPlatformIDs (1 , & platform , NULL );
4644 clGetDeviceIDs (platform , CL_DEVICE_TYPE_ALL , 1 , & device , NULL );
4745 context = clCreateContext (NULL , 1 , & device , NULL , NULL , NULL );
48- command_queue = clCreateCommandQueue (context , device , 0 , NULL );
4946 buffer = clCreateBuffer (context , CL_MEM_WRITE_ONLY , NUM_FUNCTIONS * sizeof (cl_uint ), NULL , NULL );
5047 program = clCreateProgramWithSource (context , 1 , & source , NULL , NULL );
51- clBuildProgram (program , 1 , & device , "" , NULL , NULL );
48+ ret = clBuildProgram (program , 1 , & device , "" , NULL , NULL );
49+ common_check_build (ret , device , program );
5250 kernel = clCreateKernel (program , "main" , NULL );
5351 clSetKernelArg (kernel , 0 , sizeof (cl_mem ), & buffer );
52+ command_queue = clCreateCommandQueue (context , device , 0 , NULL );
5453 clEnqueueNDRangeKernel (command_queue , kernel , 1 , & offset , & global , & local , 0 , NULL , NULL );
5554 clFlush (command_queue );
5655 clFinish (command_queue );
5756 clEnqueueReadBuffer (command_queue , buffer , CL_TRUE , 0 , NUM_FUNCTIONS * sizeof (cl_uint ), & output , 0 , NULL , NULL );
5857
58+ /* Check the values. */
5959 printf ("work_dim = %d\n" , output [0 ]);
6060 printf ("global_size = %d\n" , output [1 ]);
6161 printf ("global_id = %d\n" , output [2 ]);
@@ -64,5 +64,12 @@ int main(void) {
6464 printf ("num_groups = %d\n" , output [5 ]);
6565 printf ("group_id = %d\n" , output [6 ]);
6666 printf ("global_offset = %d\n" , output [7 ]);
67+
68+ /* Cleanup. */
69+ clReleaseKernel (kernel );
70+ clReleaseProgram (program );
71+ clReleaseCommandQueue (command_queue );
72+ clReleaseContext (context );
73+ clReleaseMemObject (buffer );
6774 return EXIT_SUCCESS ;
6875}
0 commit comments