1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| import com.nativelibs4java.opencl.CLBuffer;
import com.nativelibs4java.opencl.CLContext;
import com.nativelibs4java.opencl.CLEvent;
import com.nativelibs4java.opencl.CLKernel;
import com.nativelibs4java.opencl.CLMem;
import com.nativelibs4java.opencl.CLProgram;
import com.nativelibs4java.opencl.CLQueue;
import com.nativelibs4java.opencl.JavaCL;
import com.nativelibs4java.util.IOUtils;
import java.io.IOException;
import java.nio.ByteOrder;
import java.nio.IntBuffer;
import org.bridj.Pointer;
/**
*
* @author mehrez
*/
public class Cl {
public static void main(String[] args) throws IOException {
CLContext context = JavaCL.createBestContext();
CLQueue queue = context.createDefaultQueue();
ByteOrder byteOrder = context.getByteOrder();
int n = 1024;
// create memory for a 4x4 matrix
Pointer<Float> AmatrixPtr=Pointer.allocateFloats(4*4).order(context.getByteOrder());
Pointer<Float> BmatrixPtr=Pointer.allocateFloats(4*4).order(context.getByteOrder());
Pointer<Float> OutmatrixPtr=Pointer.allocateFloats(4*4).order(context.getByteOrder());
// write the matrix elements
AmatrixPtr.setFloats(new float[]{
1, 0, 0, 1,
2, 1, 2, 0,
1, 0, 1, 1,
0, 0, 1, 2});
BmatrixPtr.setFloats(new float[]{
1, 0, 0, 1,
2, 1, 2, 0,
1, 0, 1, 1,
0, 0, 1, 2});
// create a GPU buffer for the matrix
CLBuffer<Float> OutmatrixGpu=context.createBuffer(CLMem.Usage.Output, OutmatrixPtr, true);
CLBuffer<Float> AmatrixGpu=context.createBuffer(CLMem.Usage.Input, AmatrixPtr, true);
CLBuffer<Float> BmatrixGpu=context.createBuffer(CLMem.Usage.Input, BmatrixPtr, true);
String src = IOUtils.readText(JavaCLTutorial1.class.getResource("ClKernels.cl"));
CLProgram program = context.createProgram(src);
// Get and call the kernel :
CLKernel addFloatsKernel = program.createKernel("matrix_mult");
addFloatsKernel.setArgs(AmatrixGpu, BmatrixGpu, OutmatrixGpu);
}
} |
Partager