| 62 | } |
| 63 | |
| 64 | void generatePoints(cl::Buffer& points, cl::Buffer& dirs, |
| 65 | cl::CommandQueue& queue, cl::Device &device) |
| 66 | { |
| 67 | static bool compileFlag = true; |
| 68 | |
| 69 | static cl::Program prog; |
| 70 | static cl::Kernel pointGenKernel; |
| 71 | |
| 72 | if (compileFlag) { |
| 73 | try { |
| 74 | prog = cl::Program(queue.getInfo<CL_QUEUE_CONTEXT>(), fieldKernel, false); |
| 75 | |
| 76 | std::vector<cl::Device> devs; |
| 77 | devs.push_back(device); |
| 78 | prog.build(devs); |
| 79 | |
| 80 | pointGenKernel = cl::Kernel(prog, "pointGenKernel"); |
| 81 | } catch (cl::Error err) { |
| 82 | std::cout << "Compile Errors: " << std::endl; |
| 83 | std::cout << err.what() << err.err() << std::endl; |
| 84 | std::cout << prog.getBuildInfo<CL_PROGRAM_BUILD_LOG>(device) << std::endl; |
| 85 | exit(255); |
| 86 | } |
| 87 | std::cout<< "Kernels compiled successfully" << std::endl; |
| 88 | compileFlag = false; |
| 89 | } |
| 90 | |
| 91 | static const NDRange local(8, 8); |
| 92 | NDRange global(local[0] * divup((int)(NELEMS), (int)(local[0])), |
| 93 | local[1] * divup((int)(NELEMS), (int)(local[1]))); |
| 94 | |
| 95 | pointGenKernel.setArg(0, points); |
| 96 | pointGenKernel.setArg(1, dirs); |
| 97 | pointGenKernel.setArg(2, (int)NELEMS); |
| 98 | pointGenKernel.setArg(3, MINIMUM); |
| 99 | pointGenKernel.setArg(4, STEP); |
| 100 | queue.enqueueNDRangeKernel(pointGenKernel, cl::NullRange, global, local); |
| 101 | } |
| 102 | |
| 103 | int main(void) |
| 104 | { |