MCPcopy Create free account
hub / github.com/arrayfire/forge / kernel

Function kernel

examples/opencl/histogram.cpp:159–255  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

157}
158
159void kernel(cl::Buffer& image, cl::Buffer& base, cl::Buffer& perlin,
160 cl::Buffer& histOut, cl::Buffer& colors,
161 cl::CommandQueue& queue, cl::Device& device)
162{
163 static bool compileFlag = true;
164 static cl::Program prog;
165 static cl::Kernel initKernel, computeKernel, normKernel, fillKernel;
166 static cl::Kernel memSetKernel, genHistogram, genHistColors;
167
168 std::srand((unsigned)(std::time(0)));
169
170 if (compileFlag) {
171 try {
172 prog = cl::Program(queue.getInfo<CL_QUEUE_CONTEXT>(), perlinKernels, false);
173
174 std::vector<cl::Device> devs;
175 devs.push_back(device);
176 prog.build(devs);
177
178 initKernel = cl::Kernel(prog, "init");
179 computeKernel = cl::Kernel(prog, "compute");
180 normKernel = cl::Kernel(prog, "normalizeNoise");
181 fillKernel = cl::Kernel(prog, "fillImage");
182 memSetKernel = cl::Kernel(prog, "memSet");
183 genHistogram = cl::Kernel(prog, "histogram");
184 genHistColors = cl::Kernel(prog, "setColors");
185 } catch (cl::Error err) {
186 std::cout << "Compile Errors: " << std::endl;
187 std::cout << err.what() << err.err() << std::endl;
188 std::cout << prog.getBuildInfo<CL_PROGRAM_BUILD_LOG>(device) << std::endl;
189 exit(255);
190 }
191 std::cout<< "Kernels compiled successfully" << std::endl;
192 compileFlag = false;
193 }
194
195 static const NDRange local(16, 16);
196 NDRange global(local[0] * divup(IMGW, (int)(local[0])),
197 local[1] * divup(IMGH, (int)(local[1])));
198
199 float persistence = 0.5f;
200 float amp = 1.0f;
201 float tamp = 0.0f;
202
203 initKernel.setArg(0, base);
204 initKernel.setArg(1, perlin);
205 initKernel.setArg(2, IMGW);
206 initKernel.setArg(3, IMGH);
207 initKernel.setArg(4, std::rand());
208 queue.enqueueNDRangeKernel(initKernel, cl::NullRange, global, local);
209
210 for (int octave=6; octave>=0; --octave) {
211 int period = 1 << octave;
212 computeKernel.setArg(0, perlin);
213 computeKernel.setArg(1, base);
214 computeKernel.setArg(2, IMGW);
215 computeKernel.setArg(3, IMGH);
216 computeKernel.setArg(4, amp);

Callers 1

mainFunction · 0.70

Calls 1

divupFunction · 0.70

Tested by

no test coverage detected