///original author: Erwin Coumans #include "btOpenCLUtils.h" #include "../parallel_primitives/host/btOpenCLArray.h" #include "../parallel_primitives/host/btLauncherCL.h" #include #define MSTRINGIFY(A) #A const char* kernelString= MSTRINGIFY( __kernel void VectorAdd(__global const float* a, __global const float* b, __global float* c, int numElements) { int iGID = get_global_id(0); if (iGID>=numElements) return; float aGID = a[iGID]; float bGID = b[iGID]; float result = aGID + bGID; c[iGID] = result; } ); int main(int argc, char* argv[]) { int ciErrNum = 0; int preferred_device = -1; int preferred_platform = -1; cl_platform_id platformId; cl_context ctx; cl_command_queue queue; cl_device_id device; cl_kernel addKernel; ctx = btOpenCLUtils::createContextFromType(CL_DEVICE_TYPE_GPU, &ciErrNum,0,0,preferred_device,preferred_platform,&platformId); btOpenCLUtils::printPlatformInfo(platformId); oclCHECKERROR(ciErrNum, CL_SUCCESS); if (!ctx) { printf("No OpenCL capable GPU found!"); return 0; } device = btOpenCLUtils::getDevice(ctx,0); queue = clCreateCommandQueue(ctx, device, 0, &ciErrNum); addKernel = btOpenCLUtils::compileCLKernelFromString(ctx,device,kernelString,"VectorAdd",&ciErrNum); oclCHECKERROR(ciErrNum, CL_SUCCESS); int numElements = 32; btOpenCLArray a(ctx,queue); btOpenCLArray b(ctx,queue); btOpenCLArray c(ctx,queue); for (int i=0;i