summaryrefslogtreecommitdiffstats
path: root/test/com/mbien/opencl/CLCommandQueueTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'test/com/mbien/opencl/CLCommandQueueTest.java')
-rw-r--r--test/com/mbien/opencl/CLCommandQueueTest.java266
1 files changed, 0 insertions, 266 deletions
diff --git a/test/com/mbien/opencl/CLCommandQueueTest.java b/test/com/mbien/opencl/CLCommandQueueTest.java
deleted file mode 100644
index cbfc2f3c..00000000
--- a/test/com/mbien/opencl/CLCommandQueueTest.java
+++ /dev/null
@@ -1,266 +0,0 @@
-package com.mbien.opencl;
-
-import com.mbien.opencl.util.MultiQueueBarrier;
-import com.mbien.opencl.CLCommandQueue.Mode;
-import com.mbien.opencl.CLMemory.Mem;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.EnumSet;
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-import static java.lang.System.*;
-import static com.mbien.opencl.TestUtils.*;
-import static com.mbien.opencl.CLEvent.*;
-import static com.jogamp.common.nio.Buffers.*;
-
-/**
- *
- * @author Michael Bien
- */
-public class CLCommandQueueTest {
-
- private final int groupSize = 256;
-
- @Test
- public void enumsTest() {
-
- //CLCommandQueueEnums
- EnumSet<Mode> queueMode = Mode.valuesOf(CL.CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL.CL_QUEUE_PROFILING_ENABLE);
- assertTrue(queueMode.contains(Mode.OUT_OF_ORDER_MODE));
- assertTrue(queueMode.contains(Mode.PROFILING_MODE));
-
- assertNotNull(Mode.valuesOf(0));
- assertEquals(0, Mode.valuesOf(0).size());
- for (Mode mode : Mode.values()) {
- assertEquals(mode, Mode.valueOf(mode.QUEUE_MODE));
- }
-
- // CLEvent enums
- for (ProfilingCommand cmd : ProfilingCommand.values()) {
- assertEquals(cmd, ProfilingCommand.valueOf(cmd.COMMAND));
- }
-
- for (CommandType type : CommandType.values()) {
- assertEquals(type, CommandType.valueOf(type.TYPE));
- }
-
- for (ExecutionStatus status : ExecutionStatus.values()) {
- assertEquals(status, ExecutionStatus.valueOf(status.STATUS));
- }
-
- }
-
- @Test
- public void eventsTest() throws IOException {
-
- out.println(" - - - event synchronization test - - - ");
-
- final int elements = roundUp(groupSize, ONE_MB / SIZEOF_INT * 5); // 5MB per buffer
-
- CLContext context = CLContext.create();
-
- CLBuffer<ByteBuffer> clBufferA = context.createByteBuffer(elements * SIZEOF_INT, Mem.READ_ONLY);
- CLBuffer<ByteBuffer> clBufferB = context.createByteBuffer(elements * SIZEOF_INT, Mem.READ_ONLY);
- CLBuffer<ByteBuffer> clBufferC = context.createByteBuffer(elements * SIZEOF_INT, Mem.READ_ONLY);
- CLBuffer<ByteBuffer> clBufferD = context.createByteBuffer(elements * SIZEOF_INT, Mem.READ_ONLY);
-
- fillBuffer(clBufferA.buffer, 12345);
- fillBuffer(clBufferB.buffer, 67890);
-
- CLProgram program = context.createProgram(getClass().getResourceAsStream("testkernels.cl")).build();
- CLKernel vectorAddKernel = program.createCLKernel("VectorAddGM").setArg(3, elements);
- CLCommandQueue queue = context.getDevices()[0].createCommandQueue();
-
- final CLEventList events = new CLEventList(2);
-
- assertEquals(0, events.size());
-
- queue.putWriteBuffer(clBufferA, false, events) // write A
- .putWriteBuffer(clBufferB, false, events);// write B
-
- assertEquals(2, events.size());
- queue.putWaitForEvents(events, true);
-
- events.release();
- assertEquals(0, events.size());
-
- vectorAddKernel.setArgs(clBufferA, clBufferB, clBufferC); // C = A+B
- queue.put1DRangeKernel(vectorAddKernel, 0, elements, groupSize, events);
-
- vectorAddKernel.setArgs(clBufferA, clBufferB, clBufferD); // D = A+B
- queue.put1DRangeKernel(vectorAddKernel, 0, elements, groupSize, events);
-
- assertEquals(2, events.size());
- queue.putWaitForEvent(events, 0, false)
- .putWaitForEvent(events, 1, true);
-
- queue.putReadBuffer(clBufferC, false)
- .putReadBuffer(clBufferD, true);
-
- events.release();
-
- checkIfEqual(clBufferC.buffer, clBufferD.buffer, elements);
-
-
- context.release();
-
-
- out.println("results are valid");
-
- }
- @Test
- public void profilingEventsTest() throws IOException {
-
- out.println(" - - - event synchronization test - - - ");
-
- final int elements = roundUp(groupSize, ONE_MB / SIZEOF_INT * 5); // 5MB per buffer
-
- CLContext context = CLContext.create();
-
- CLBuffer<ByteBuffer> clBufferA = context.createByteBuffer(elements * SIZEOF_INT, Mem.READ_ONLY);
- CLBuffer<ByteBuffer> clBufferB = context.createByteBuffer(elements * SIZEOF_INT, Mem.READ_ONLY);
- CLBuffer<ByteBuffer> clBufferC = context.createByteBuffer(elements * SIZEOF_INT, Mem.READ_ONLY);
-
- fillBuffer(clBufferA.buffer, 12345);
- fillBuffer(clBufferB.buffer, 67890);
-
- CLProgram program = context.createProgram(getClass().getResourceAsStream("testkernels.cl")).build();
- CLKernel vectorAddKernel = program.createCLKernel("VectorAddGM").setArg(3, elements);
- CLCommandQueue queue = context.getDevices()[0].createCommandQueue(Mode.PROFILING_MODE);
-
- queue.putWriteBuffer(clBufferA, true) // write A
- .putWriteBuffer(clBufferB, true);// write B
-
- final CLEventList events = new CLEventList(1);
-
- assertEquals(0, events.size());
-
- vectorAddKernel.setArgs(clBufferA, clBufferB, clBufferC); // C = A+B
- queue.put1DRangeKernel(vectorAddKernel, 0, elements, groupSize, events);
-
- assertEquals(1, events.size());
- CLEvent probe = events.getEvent(0);
- out.println(probe);
-
- queue.putWaitForEvents(events, true);
- assertEquals(CLEvent.ExecutionStatus.COMPLETE, probe.getStatus());
-
- out.println(probe);
- long time = probe.getProfilingInfo(CLEvent.ProfilingCommand.END)
- - probe.getProfilingInfo(CLEvent.ProfilingCommand.START);
- out.println("time: "+time);
- assertTrue(time > 0);
-
- events.release();
- context.release();
-
- }
-
- @Test
- public void concurrencyTest() throws IOException, InterruptedException {
-
- out.println(" - - - QueueBarrier test - - - ");
-
- final int elements = ONE_MB / SIZEOF_INT * 10; // 20MB per buffer
-
- CLContext context = CLContext.create();
-
- CLDevice[] devices = context.getDevices();
-
- if (devices.length < 2) {
- out.println("aborting test... need at least 2 devices");
- context.release();
- return;
- }
-
- final CLBuffer<ByteBuffer> clBufferC = context.createByteBuffer(elements * SIZEOF_INT, Mem.READ_ONLY);
- final CLBuffer<ByteBuffer> clBufferD = context.createByteBuffer(elements * SIZEOF_INT, Mem.READ_ONLY);
-
- final CLBuffer<ByteBuffer> clBufferA1 = context.createByteBuffer(elements * SIZEOF_INT, Mem.READ_ONLY);
- final CLBuffer<ByteBuffer> clBufferB1 = context.createByteBuffer(elements * SIZEOF_INT, Mem.READ_ONLY);
- final CLBuffer<ByteBuffer> clBufferA2 = context.createByteBuffer(elements * SIZEOF_INT, Mem.READ_ONLY);
- final CLBuffer<ByteBuffer> clBufferB2 = context.createByteBuffer(elements * SIZEOF_INT, Mem.READ_ONLY);
-
- CLProgram program = context.createProgram(getClass().getResourceAsStream("testkernels.cl")).build();
-
- final CLKernel vectorAddKernel1 = program.createCLKernel("VectorAddGM").setArg(3, elements);
- final CLKernel vectorAddKernel2 = program.createCLKernel("VectorAddGM").setArg(3, elements);
-
- int secondDevice = devices.length > 1 ? 1 : 0;
-
- final CLCommandQueue queue1 = devices[0 ].createCommandQueue();
- final CLCommandQueue queue2 = devices[secondDevice].createCommandQueue();
-
- fillBuffer(clBufferC.buffer, 12345);
-
- if (secondDevice > 0) {
- System.out.println("using two devices");
- }
-
- final MultiQueueBarrier barrier = new MultiQueueBarrier(2);
-
- Thread thread1 = new Thread("C") {
-
- @Override
- public void run() {
-
- fillBuffer(clBufferA1.buffer, 12345);
- fillBuffer(clBufferB1.buffer, 67890);
-
-// System.out.println("C buffer");
- queue1.putWriteBuffer(clBufferA1, false) // write A
- .putWriteBuffer(clBufferB1, false); // write B
-
-// System.out.println("C args");
- vectorAddKernel1.setArgs(clBufferA1, clBufferB1, clBufferC); // C = A+B
-
-// System.out.println("C kernels");
- CLEventList events1 = new CLEventList(2);
- queue1.put1DRangeKernel(vectorAddKernel1, 0, elements, groupSize, events1)
- .putReadBuffer(clBufferC, false, events1);
-
- barrier.waitFor(queue1, events1);
-
- }
- };
-
- Thread thread2 = new Thread("D") {
-
- @Override
- public void run() {
-
- fillBuffer(clBufferA2.buffer, 12345);
- fillBuffer(clBufferB2.buffer, 67890);
-
-// System.out.println("D buffer");
- queue2.putWriteBuffer(clBufferA2, false) // write A
- .putWriteBuffer(clBufferB2, false); // write B
-
-// System.out.println("D args");
- vectorAddKernel2.setArgs(clBufferA2, clBufferB2, clBufferD); // D = A+B
-
-// System.out.println("D kernels");
- CLEventList events2 = new CLEventList(2);
- queue2.put1DRangeKernel(vectorAddKernel2, 0, elements, groupSize, events2)
- .putReadBuffer(clBufferD, false, events2);
-
- barrier.waitFor(queue2, events2);
-
- }
- };
-
- out.println("starting threads");
- thread1.start();
- thread2.start();
- barrier.await();
- out.println("done");
-
- checkIfEqual(clBufferC.buffer, clBufferD.buffer, elements);
-
- context.release();
-
- out.println("results are valid");
-
- }
-}