public void runKernel(String kernelName, GPUProgramObject[] args, int globalWorkSizeInt) { if(!kernels.containsKey(kernelName)) { preloadKernel(kernelName); } CLKernel kernel = kernels.get(kernelName); int index = 0; for(GPUProgramObject o : args) { o.apply(kernel, index++ ); } final int dimensions = 1; PointerBuffer globalWorkSize = BufferUtils.createPointerBuffer(dimensions); globalWorkSize.put(0, globalWorkSizeInt); CL10.clEnqueueNDRangeKernel(clQueue, kernel, dimensions, null, globalWorkSize, null, null, null); CL10.clFinish(clQueue); }
public void apply(CLKernel kernel, int id) { if(type.equals("int")) { kernel.setArg(id, (Integer)value); } else if(type.equals("float")) { kernel.setArg(id, (Float)value); } else if(type.equals("short")) { kernel.setArg(id, (Short)value); } else if(type.equals("long")) { kernel.setArg(id, (Long)value); } else if(type.equals("double")) { kernel.setArg(id, (Double)value); } else if(type.equals("byte")) { kernel.setArg(id, (Byte)value); } else if(type.equals("clmem")) { kernel.setArg(id, (CLMem)value); } }
public void preloadKernel(String kernelName) { CLKernel k = CL10.clCreateKernel(clProgram, kernelName, null); kernels.put(kernelName, k); if(!k.isValid()) { throw new RuntimeEngineException("Kernel " + kernelName + " not valid in clProgram " + res.getResourceLocation().getFullPath()); } }
public void preloadKernel(String kernelName, GPUProgramObject[] args, int size) { preloadKernel(kernelName); CLKernel kernel = kernels.get(kernelName); int index = 0; for(GPUProgramObject o : args) { o.apply(kernel, index++ ); } PointerBuffer globalWorkSize = BufferUtils.createPointerBuffer(1); globalWorkSize.put(0, size); }
public void dispose() { for(CLKernel kernel : kernels.values()) CL10.clReleaseKernel(kernel); CL10.clReleaseProgram(clProgram); }