| 83 | } |
| 84 | |
| 85 | void kernel(cl::Buffer& devOut, cl::CommandQueue& queue) |
| 86 | { |
| 87 | static std::once_flag compileFlag; |
| 88 | static cl::Program prog; |
| 89 | static cl::Kernel kern; |
| 90 | |
| 91 | std::call_once(compileFlag, |
| 92 | [queue]() { |
| 93 | prog = cl::Program(queue.getInfo<CL_QUEUE_CONTEXT>(), fractal_ocl_kernel, true); |
| 94 | kern = cl::Kernel(prog, "julia"); |
| 95 | }); |
| 96 | |
| 97 | auto juliaOp = cl::KernelFunctor<Buffer, unsigned, unsigned>(kern); |
| 98 | |
| 99 | static const NDRange local(8, 8); |
| 100 | NDRange global(local[0] * divup(DIMX, (int)(local[0])), |
| 101 | local[1] * divup(DIMY, (int)(local[1]))); |
| 102 | |
| 103 | juliaOp(EnqueueArgs(queue, global, local), devOut, DIMX, DIMY); |
| 104 | } |
| 105 | |
| 106 | int main(void) |
| 107 | { |