/** * Return the number of arguments to kernel. */ @InfoName("CL_KERNEL_NUM_ARGS") public int getNumArgs() { int numArgs = infos.getInt(getEntity(), CL_KERNEL_NUM_ARGS); //System.out.println("numArgs = " + numArgs); return numArgs; }
/** * Return the kernel function name. */ @InfoName("CL_KERNEL_FUNCTION_NAME") public String getFunctionName() { if (name == null) name = infos.getString(getEntity(), CL_KERNEL_FUNCTION_NAME); return name; } }
/** * Return the kernel function name. */ @InfoName("CL_KERNEL_FUNCTION_NAME") public String getFunctionName() { if (name == null) name = infos.getString(getEntity(), CL_KERNEL_FUNCTION_NAME); return name; } }
@Override protected void clear() { error(CL.clReleaseKernel(getEntity())); }
/** * Return the number of arguments to kernel. */ @InfoName("CL_KERNEL_NUM_ARGS") public int getNumArgs() { int numArgs = infos.getInt(getEntity(), CL_KERNEL_NUM_ARGS); //System.out.println("numArgs = " + numArgs); return numArgs; }
@Override protected void clear() { error(CL.clReleaseKernel(getEntity())); }
private void setKernelArg(int i, long size, Pointer<?> ptr) { if (size <= 0) throw new IllegalArgumentException("Kernel args must have a known byte size, given " + size + " instead."); try { error(CL.clSetKernelArg(getEntity(), i, size, getPeer(ptr))); } catch (CLTypedException ex) { ex.setKernelArg(this, i, size, ptr); throw ex; } }
@Override protected int getInfo(long entity, int infoTypeEnum, long size, Pointer out, Pointer<SizeT> sizeOut) { return CL.clGetKernelWorkGroupInfo(getEntity(), entity, infoTypeEnum, size, getPeer(out), getPeer(sizeOut)); } };
@Override protected int getInfo(long entity, int infoTypeEnum, long size, Pointer out, Pointer<SizeT> sizeOut) { return CL.clGetKernelWorkGroupInfo(getEntity(), entity, infoTypeEnum, size, getPeer(out), getPeer(sizeOut)); } };
private void setKernelArg(int i, long size, Pointer<?> ptr) { if (size <= 0) throw new IllegalArgumentException("Kernel args must have a known byte size, given " + size + " instead."); try { error(CL.clSetKernelArg(getEntity(), i, size, getPeer(ptr))); } catch (CLTypedException ex) { ex.setKernelArg(this, i); throw ex; } }
/** * Calls <a href="http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clEnqueueTask.html">clEnqueueTask</a>.<br> * Enqueues a command to execute a kernel on a device. <br> * The kernel is executed using a single work-item. * @param queue * @param eventsToWaitFor Events that need to complete before this particular command can be executed. Special value {@link CLEvent#FIRE_AND_FORGET} can be used to avoid returning a CLEvent. * @return Event object that identifies this command and can be used to query or queue a wait for the command to complete, or null if eventsToWaitFor contains {@link CLEvent#FIRE_AND_FORGET}. */ public CLEvent enqueueTask(CLQueue queue, CLEvent... eventsToWaitFor) { ReusablePointers ptrs = ReusablePointers.get(); int[] eventsInCount = ptrs.int1Array; Pointer<cl_event> eventsIn = CLAbstractEntity.copyNonNullEntities(eventsToWaitFor, eventsInCount, ptrs.events_in); Pointer<cl_event> eventOut = eventsToWaitFor == null || CLEvent.containsFireAndForget(eventsToWaitFor) ? null : ptrs.event_out; error(CL.clEnqueueTask(queue.getEntity(), getEntity(), eventsInCount[0], getPeer(eventsIn) , getPeer(eventOut) )); return CLEvent.createEventFromPointer(queue, eventOut) ; }
/** * @deprecated Use {@link CLKernel#enqueueNDRange(CLQueue, long[], long[], long[], CLEvent[])} instead. */ @Deprecated public CLEvent enqueueNDRange(CLQueue queue, int[] globalOffsets, int[] globalWorkSizes, int[] localWorkSizes, CLEvent... eventsToWaitFor) { int nDims = globalWorkSizes.length; if (localWorkSizes != null && localWorkSizes.length != nDims) { throw new IllegalArgumentException("Global and local sizes must have same dimensions, given " + globalWorkSizes.length + " vs. " + localWorkSizes.length); } ReusablePointers ptrs = ReusablePointers.get(); int[] eventsInCount = ptrs.int1Array; Pointer<cl_event> eventsIn = CLAbstractEntity.copyNonNullEntities(eventsToWaitFor, eventsInCount, ptrs.events_in); Pointer<cl_event> eventOut = eventsToWaitFor == null || CLEvent.containsFireAndForget(eventsToWaitFor) ? null : ptrs.event_out; error(CL.clEnqueueNDRangeKernel( queue.getEntity(), getEntity(), nDims, getPeer(ptrs.sizeT3_1.pointerToSizeTs(globalOffsets)), getPeer(ptrs.sizeT3_2.pointerToSizeTs(globalWorkSizes)), getPeer(ptrs.sizeT3_3.pointerToSizeTs(localWorkSizes)), eventsInCount[0], getPeer(eventsIn) , getPeer(eventOut) )); return CLEvent.createEventFromPointer(queue, eventOut) ; }
/** * Calls <a href="http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clEnqueueTask.html">clEnqueueTask</a>.<br> * Enqueues a command to execute a kernel on a device. <br> * The kernel is executed using a single work-item. * @param queue * @param eventsToWaitFor Events that need to complete before this particular command can be executed. Special value {@link CLEvent#FIRE_AND_FORGET} can be used to avoid returning a CLEvent. * @return Event object that identifies this command and can be used to query or queue a wait for the command to complete, or null if eventsToWaitFor contains {@link CLEvent#FIRE_AND_FORGET}. */ public CLEvent enqueueTask(CLQueue queue, CLEvent... eventsToWaitFor) { ReusablePointers ptrs = ReusablePointers.get(); int[] eventsInCount = ptrs.int1Array; Pointer<cl_event> eventsIn = CLAbstractEntity.copyNonNullEntities(eventsToWaitFor, eventsInCount, ptrs.events_in); Pointer<cl_event> eventOut = eventsToWaitFor == null || CLEvent.containsFireAndForget(eventsToWaitFor) ? null : ptrs.event_out; error(CL.clEnqueueTask(queue.getEntity(), getEntity(), eventsInCount[0], getPeer(eventsIn) , getPeer(eventOut) )); return CLEvent.createEventFromPointer(queue, eventOut) ; }
/** * @deprecated Use {@link CLKernel#enqueueNDRange(CLQueue, long[], long[], long[], CLEvent[])} instead. */ @Deprecated public CLEvent enqueueNDRange(CLQueue queue, int[] globalOffsets, int[] globalWorkSizes, int[] localWorkSizes, CLEvent... eventsToWaitFor) { int nDims = globalWorkSizes.length; if (localWorkSizes != null && localWorkSizes.length != nDims) { throw new IllegalArgumentException("Global and local sizes must have same dimensions, given " + globalWorkSizes.length + " vs. " + localWorkSizes.length); } ReusablePointers ptrs = ReusablePointers.get(); int[] eventsInCount = ptrs.int1Array; Pointer<cl_event> eventsIn = CLAbstractEntity.copyNonNullEntities(eventsToWaitFor, eventsInCount, ptrs.events_in); Pointer<cl_event> eventOut = eventsToWaitFor == null || CLEvent.containsFireAndForget(eventsToWaitFor) ? null : ptrs.event_out; error(CL.clEnqueueNDRangeKernel( queue.getEntity(), getEntity(), nDims, getPeer(ptrs.sizeT3_1.pointerToSizeTs(globalOffsets)), getPeer(ptrs.sizeT3_2.pointerToSizeTs(globalWorkSizes)), getPeer(ptrs.sizeT3_3.pointerToSizeTs(localWorkSizes)), eventsInCount[0], getPeer(eventsIn) , getPeer(eventOut) )); return CLEvent.createEventFromPointer(queue, eventOut) ; }
error(CL.clEnqueueNDRangeKernel( queue.getEntity(), getEntity(), nDims, getPeer(ptrs.sizeT3_1.pointerToSizeTs(globalOffsets)),
error(CL.clEnqueueNDRangeKernel( queue.getEntity(), getEntity(), nDims, getPeer(ptrs.sizeT3_1.pointerToSizeTs(globalOffsets)),
private final long aPeer = a.getEntity(); private final long bPeer = b.getEntity(); private final long kEntity = kernel.getEntity(); private final Pointer<?> tmp = allocateBytes(8);//.withoutValidityInformation(); private final ByteBuffer tmpBuf = tmp.getByteBuffer();