public <T> Object testArrayArg(String type, Object array, Class<T> targetType) { long size = BridJ.sizeOf(targetType); long length = Array.getLength(array); CLBuffer<Byte> out = context.createByteBuffer(Usage.Output, size * length); StringBuilder b = new StringBuilder( "#pragma OPENCL EXTENSION cl_khr_fp64 : enable\n" + "kernel void f(" + type + length + " arg, global " + type + "* out, long length) {\n"); for (long i = 0; i < length; i++) { b.append("out[" + i + "] = arg.s" + (i < 10 ? i + "" : ((char)((int)'a' + (i - 10))) + "") + ";\n"); } b.append("}\n"); System.out.println(b); CLKernel k = context.createProgram(b.toString()).createKernel("f", array, out, length); CLEvent e = k.enqueueTask(queue); return out.as(targetType).read(queue, e).getArray(); }
@Test public void nullArg() { CLBuffer<Byte> out = context.createByteBuffer(Usage.InputOutput, 2) ; CLKernel isInputNull = context.createProgram( "kernel void isInputNull(global int* in, global bool* out) {\n" + "*out = !in;\n" + "}" ).createKernel("isInputNull"); isInputNull.setArgs(CLKernel.NULL_POINTER_KERNEL_ARGUMENT, out); assertTrue(out.read(queue, isInputNull.enqueueTask(queue)).as(Boolean.class).get()); isInputNull.setArgs(out, out); assertFalse(out.read(queue, isInputNull.enqueueTask(queue)).as(Boolean.class).get()); }
public <T> Pointer<T> testArg(String type, Object value, Class<T> targetType) { long size = BridJ.sizeOf(targetType); CLBuffer<Byte> out = context.createByteBuffer(Usage.Output, size) ; CLKernel k = context.createProgram( // "#if __OPENCL_VERSION__ <= CL_VERSION_1_1\n" + " #pragma OPENCL EXTENSION cl_khr_fp64 : enable\n" + // "#endif\n" + "kernel void f(" + type + " arg, global " + type + "* out, long size) {\n" + "char* in = (char*) &arg;\n" + "for (long i = 0; i < size; i++) {\n" + "out[i] = in[i];\n" + "}\n" + "}" ).createKernel("f", value, out, size); CLEvent e = k.enqueueTask(queue); return out.as(targetType).read(queue, e); }