private Tuple createTuple_byte(CLMemoryHandle mem, CLCommandQueueHandle queue, int nbytes, long[] shape) { var byteArray = new byte[1]; if (nbytes > 0) { byteArray = new byte[nbytes / sizeof(byte)]; } unsafe { fixed(void* ptr = &byteArray[0]) { CL10.EnqueueReadBuffer(queue, mem, true, new IntPtr(0), new IntPtr(nbytes), new IntPtr(ptr), 0, null, null ); } } return Tuple.Create(byteArray, shape); } private Tuple createTuple_ushort(CLMemoryHandle mem, CLCommandQueueHandle queue, int nbytes, long[] shape) { var byteArray = new ushort[1]; if (nbytes > 0) { byteArray = new ushort[nbytes / sizeof(ushort)]; } unsafe { fixed(void* ptr = &byteArray[0]) { CL10.EnqueueReadBuffer(queue, mem, true, new IntPtr(0), new IntPtr(nbytes), new IntPtr(ptr), 0, null, null ); } } return Tuple.Create(byteArray, shape); } private Tuple createTuple_uint(CLMemoryHandle mem, CLCommandQueueHandle queue, int nbytes, long[] shape) { var byteArray = new uint[1]; if (nbytes > 0) { byteArray = new uint[nbytes / sizeof(uint)]; } unsafe { fixed(void* ptr = &byteArray[0]) { CL10.EnqueueReadBuffer(queue, mem, true, new IntPtr(0), new IntPtr(nbytes), new IntPtr(ptr), 0, null, null ); } } return Tuple.Create(byteArray, shape); } private Tuple createTuple_ulong(CLMemoryHandle mem, CLCommandQueueHandle queue, int nbytes, long[] shape) { var byteArray = new ulong[1]; if (nbytes > 0) { byteArray = new ulong[nbytes / sizeof(ulong)]; } unsafe { fixed(void* ptr = &byteArray[0]) { CL10.EnqueueReadBuffer(queue, mem, true, new IntPtr(0), new IntPtr(nbytes), new IntPtr(ptr), 0, null, null ); } } return Tuple.Create(byteArray, shape); } private Tuple createTuple_sbyte(CLMemoryHandle mem, CLCommandQueueHandle queue, int nbytes, long[] shape) { var byteArray = new sbyte[1]; if (nbytes > 0) { byteArray = new sbyte[nbytes / sizeof(sbyte)]; } unsafe { fixed(void* ptr = &byteArray[0]) { CL10.EnqueueReadBuffer(queue, mem, true, new IntPtr(0), new IntPtr(nbytes), new IntPtr(ptr), 0, null, null ); } } return Tuple.Create(byteArray, shape); } private Tuple createTuple_short(CLMemoryHandle mem, CLCommandQueueHandle queue, int nbytes, long[] shape) { var byteArray = new short[1]; if (nbytes > 0) { byteArray = new short[nbytes / sizeof(short)]; } unsafe { fixed(void* ptr = &byteArray[0]) { CL10.EnqueueReadBuffer(queue, mem, true, new IntPtr(0), new IntPtr(nbytes), new IntPtr(ptr), 0, null, null ); } } return Tuple.Create(byteArray, shape); } private Tuple createTuple_int(CLMemoryHandle mem, CLCommandQueueHandle queue, int nbytes, long[] shape) { var byteArray = new int[1]; if (nbytes > 0) { byteArray = new int[nbytes / sizeof(int)]; } unsafe { fixed(void* ptr = &byteArray[0]) { CL10.EnqueueReadBuffer(queue, mem, true, new IntPtr(0), new IntPtr(nbytes), new IntPtr(ptr), 0, null, null ); } } return Tuple.Create(byteArray, shape); } private Tuple createTuple_long(CLMemoryHandle mem, CLCommandQueueHandle queue, int nbytes, long[] shape) { var byteArray = new long[1]; if (nbytes > 0) { byteArray = new long[nbytes / sizeof(long)]; } unsafe { fixed(void* ptr = &byteArray[0]) { CL10.EnqueueReadBuffer(queue, mem, true, new IntPtr(0), new IntPtr(nbytes), new IntPtr(ptr), 0, null, null ); } } return Tuple.Create(byteArray, shape); } private Tuple createTuple_float(CLMemoryHandle mem, CLCommandQueueHandle queue, int nbytes, long[] shape) { var byteArray = new float[1]; if (nbytes > 0) { byteArray = new float[nbytes / sizeof(float)]; } unsafe { fixed(void* ptr = &byteArray[0]) { CL10.EnqueueReadBuffer(queue, mem, true, new IntPtr(0), new IntPtr(nbytes), new IntPtr(ptr), 0, null, null ); } } return Tuple.Create(byteArray, shape); } private Tuple createTuple_double(CLMemoryHandle mem, CLCommandQueueHandle queue, int nbytes, long[] shape) { var byteArray = new double[1]; if (nbytes > 0) { byteArray = new double[nbytes / sizeof(double)]; } unsafe { fixed(void* ptr = &byteArray[0]) { CL10.EnqueueReadBuffer(queue, mem, true, new IntPtr(0), new IntPtr(nbytes), new IntPtr(ptr), 0, null, null ); } } return Tuple.Create(byteArray, shape); } private Tuple createTuple_bool(CLMemoryHandle mem, CLCommandQueueHandle queue, int nbytes, long[] shape) { var byteArray = new bool[1]; if (nbytes > 0) { byteArray = new bool[nbytes / sizeof(bool)]; } unsafe { fixed(void* ptr = &byteArray[0]) { CL10.EnqueueReadBuffer(queue, mem, true, new IntPtr(0), new IntPtr(nbytes), new IntPtr(ptr), 0, null, null ); } } return Tuple.Create(byteArray, shape); }