/* apt-get install cmake pkg-config python3 libdrm-dev libxfixes-dev libxext-dev llvm-dev clang libclang-dev libtinfo-dev libedit-dev zlib1g-dev gdb libllvm3.5-dbg valgrind #no ocl-icd-dev ocl-icd-opencl-dev to avoid needing root for make install su test1 cd /home/rnpalmer/Debian/builds/stackbuild/beignet && mkdir build cd build && cmake .. -DCMAKE_INSTALL_PREFIX=/home/test1 -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON && make && make install cd /home/rnpalmer/Debian/builds/stackbuild gcc opencl_test.c -I/home/test1/include -L/home/test1/lib/beignet -lcl -g LD_LIBRARY_PATH=/home/test1/lib/beignet gdb ./a.out LD_LIBRARY_PATH=/home/test1/lib/beignet valgrind --track-origins=yes ./a.out */ #include #include int main(int argc,char** argv) { cl_platform_id platform; cl_device_id device; cl_int status, ret; cl_context ctx; cl_command_queue queue; cl_program program,program2; cl_kernel kernel; cl_mem buffer; cl_event kernel_finished; FILE *f; size_t n = 3; cl_uchar test_data[3] = {3, 7, 5}; char *kernel_source,*build_log; ret = 2; kernel_source=malloc(61000); build_log=calloc(1001,1); f=fopen("finite_field_tests.cl","r"); fread(kernel_source,1,60000,f); fclose(f); clGetPlatformIDs(1,&platform,NULL); clGetDeviceIDs(platform,CL_DEVICE_TYPE_GPU,1,&device,NULL); ctx = clCreateContext(NULL, 1, &device, NULL, NULL, &status); if (status == CL_SUCCESS) { queue = clCreateCommandQueue(ctx, device, 0, &status); if (status == CL_SUCCESS) { program = clCreateProgramWithSource(ctx, 1, &kernel_source, NULL, &status); if (status == CL_SUCCESS) { //status = clBuildProgram(program, 1, &device, "", NULL, NULL); status = clCompileProgram(program, 1, &device, "", 0, NULL, NULL, NULL, NULL); clGetProgramBuildInfo(program,device,CL_PROGRAM_BUILD_LOG,1000,build_log,NULL); printf("built %i %s",status,build_log); program2 = clLinkProgram(ctx, 1, &device, "", 1,&program, NULL, NULL, NULL); clGetProgramBuildInfo(program,device,CL_PROGRAM_BUILD_LOG,1000,build_log,NULL); printf("built %i %s",status,build_log); if (status == CL_SUCCESS) { kernel = clCreateKernel(program2, "TestFiniteFieldValueFunctions", &status); printf("kernel created %i",status); if (status == CL_SUCCESS) { buffer = clCreateBuffer(ctx, CL_MEM_COPY_HOST_PTR, n, test_data, &status); if (status == CL_SUCCESS) { status = clSetKernelArg(kernel, 0, sizeof(cl_mem), &buffer); if (status == CL_SUCCESS) { status = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &n, &n, 0, NULL, &kernel_finished); if (status == CL_SUCCESS) { status = clEnqueueReadBuffer(queue, buffer, CL_TRUE, 0, n, test_data, 1, &kernel_finished, NULL); if (status == CL_SUCCESS) { printf("(3, 7, 5) returned (%i, %i, %i)\n", test_data[0], test_data[1], test_data[2]); } } } } clReleaseMemObject(buffer); } clReleaseKernel(kernel); } } clReleaseProgram(program); } clReleaseCommandQueue(queue); } clReleaseContext(ctx); }