///original author: Erwin Coumans #include "b3OpenCLUtils.h" #include "../parallel_primitives/host/b3OpenCLArray.h" #include "../parallel_primitives/host/b3LauncherCL.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 = b3OpenCLUtils::createContextFromType(CL_DEVICE_TYPE_GPU, &ciErrNum,0,0,preferred_device,preferred_platform,&platformId); b3OpenCLUtils::printPlatformInfo(platformId); oclCHECKERROR(ciErrNum, CL_SUCCESS); if (!ctx) { printf("No OpenCL capable GPU found!"); return 0; } device = b3OpenCLUtils::getDevice(ctx,0); queue = clCreateCommandQueue(ctx, device, 0, &ciErrNum); addKernel = b3OpenCLUtils::compileCLKernelFromString(ctx,device,kernelString,"VectorAdd",&ciErrNum); oclCHECKERROR(ciErrNum, CL_SUCCESS); int numElements = 32; b3OpenCLArray a(ctx,queue); b3OpenCLArray b(ctx,queue); b3OpenCLArray c(ctx,queue); for (int i=0;i