diff --git a/test/runtime/src/java/com/amd/aparapi/test/runtime/BufferTransfer.java b/test/runtime/src/java/com/amd/aparapi/test/runtime/BufferTransfer.java index 356e73191901f3e582dc748518eeeab699a3d2c0..55ae59ad855923e2ba4825c06ec586a2c7ad6427 100644 --- a/test/runtime/src/java/com/amd/aparapi/test/runtime/BufferTransfer.java +++ b/test/runtime/src/java/com/amd/aparapi/test/runtime/BufferTransfer.java @@ -1,9 +1,7 @@ package com.amd.aparapi.test.runtime; -import static org.junit.Assert.*; +import static org.junit.Assert.assertTrue; -import java.io.File; -import java.io.IOException; import java.util.Arrays; import org.junit.After; @@ -26,7 +24,7 @@ public class BufferTransfer{ interface Comparer{ boolean same(int[] lhs, int[] rhs, int index); } - + interface Operator{ void apply(int[] lhs, int[] rhs, int index); } @@ -36,8 +34,7 @@ public class BufferTransfer{ _filler.fill(array, i); } } - - + boolean same(int[] lhs, int[] rhs, Comparer _comparer) { boolean same = lhs != null && rhs != null && lhs.length == rhs.length; for (int i = 0; same && i < lhs.length; i++) { @@ -63,52 +60,29 @@ public class BufferTransfer{ void apply(int[] lhs, int[] rhs, Operator _operator) { for (int i = 0; i < lhs.length; i++) { _operator.apply(lhs, rhs, i); - } - } - - public static class BufferTransferKernel extends Kernel{ - int[] inSmall; - - int[] inLarge; - - int[] inOutSmall; - - int[] inOutLarge; - - int[] outSmall; - - int[] outLarge; - - int pass; - - @Override public void run() { - int gid = getGlobalId(0); - outSmall[gid] = inSmall[gid]; - outLarge[gid * 1024 * 16 + pass] = inSmall[gid]; - } - } + + static OpenCLDevice openCLDevice = null; + @BeforeClass public static void setUpBeforeClass() throws Exception { //System.out.println("setUpBeforeClass"); Device device = Device.best(); - if (device == null || !(device instanceof OpenCLDevice)){ + if (device == null || !(device instanceof OpenCLDevice)) { throw new IllegalStateException("no opencl device!"); } - openCLDevice = (OpenCLDevice)device; + openCLDevice = (OpenCLDevice) device; } @AfterClass public static void tearDownAfterClass() throws Exception { //System.out.println("tearDownAfterClass"); } - - @Before public void setUp() throws Exception { //System.out.println("setup"); - + } @After public void tearDown() throws Exception { @@ -134,10 +108,10 @@ public class BufferTransfer{ final int SIZE = 1024; final InOutKernel kernel = new InOutKernel(); final Range range = openCLDevice.createRange(SIZE); - + kernel.in = new int[SIZE]; kernel.out = new int[SIZE]; - + fill(kernel.in, new Filler(){ public void fill(int[] array, int index) { array[index] = index; @@ -148,7 +122,7 @@ public class BufferTransfer{ assertTrue("in == out", same(kernel.in, kernel.out)); } - + public static class AddKernel extends Kernel{ int[] values; @@ -157,18 +131,18 @@ public class BufferTransfer{ @Override public void run() { int gid = getGlobalId(0); - result[gid] = result[gid]+values[gid]; + result[gid] = result[gid] + values[gid]; } } - @Test public void addOnce() { + @Test public void auto() { final int SIZE = 1024; final AddKernel kernel = new AddKernel(); final Range range = openCLDevice.createRange(SIZE); - + kernel.values = new int[SIZE]; kernel.result = new int[SIZE]; zero(kernel.result); @@ -177,44 +151,44 @@ public class BufferTransfer{ array[index] = index; } }); - + int[] expectedResult = Arrays.copyOf(kernel.result, kernel.result.length); - + apply(expectedResult, kernel.values, new Operator(){ @Override public void apply(int[] lhs, int[] rhs, int index) { - lhs[index] = lhs[index]+rhs[index]; - - }}); + lhs[index] = lhs[index] + rhs[index]; + + } + }); kernel.execute(range); assertTrue("expectedResult == result", same(expectedResult, kernel.result)); - + kernel.execute(range); - + apply(expectedResult, kernel.values, new Operator(){ @Override public void apply(int[] lhs, int[] rhs, int index) { - lhs[index] = lhs[index]+rhs[index]; - - }}); + lhs[index] = lhs[index] + rhs[index]; + + } + }); assertTrue("expectedResult == result", same(expectedResult, kernel.result)); - - + zero(kernel.values); kernel.execute(range); assertTrue("expectedResult == result", same(expectedResult, kernel.result)); - } - - @Test public void addExplicit() { + + @Test public void explicit() { final int SIZE = 1024; final AddKernel kernel = new AddKernel(); kernel.setExplicit(true); final Range range = openCLDevice.createRange(SIZE); - + kernel.values = new int[SIZE]; kernel.result = new int[SIZE]; zero(kernel.result); @@ -223,46 +197,89 @@ public class BufferTransfer{ array[index] = index; } }); - + int[] expectedResult = Arrays.copyOf(kernel.result, kernel.result.length); - + apply(expectedResult, kernel.values, new Operator(){ @Override public void apply(int[] lhs, int[] rhs, int index) { - lhs[index] = lhs[index]+rhs[index]; - - }}); - + lhs[index] = lhs[index] + rhs[index]; + + } + }); + kernel.execute(range).get(kernel.result); assertTrue("after first explicit add expectedResult == result", same(expectedResult, kernel.result)); - + kernel.execute(range).get(kernel.result); - + apply(expectedResult, kernel.values, new Operator(){ @Override public void apply(int[] lhs, int[] rhs, int index) { - lhs[index] = lhs[index]+rhs[index]; - - }}); + lhs[index] = lhs[index] + rhs[index]; + + } + }); assertTrue("after second explicit add expectedResult == result", same(expectedResult, kernel.result)); - - + zero(kernel.values); - + kernel.put(kernel.values).execute(range).get(kernel.result); - + assertTrue("after zeroing values and third explici add expectedResult == result", same(expectedResult, kernel.result)); - - + zero(kernel.result); - + kernel.put(kernel.result).execute(range).get(kernel.result); - - + zero(expectedResult); + + assertTrue("after zeroing values and result and forth explicit add expectedResult == result", + same(expectedResult, kernel.result)); + + } + + private class TestKernel extends Kernel{ + int[] simStep = new int[1]; + + int[] neuronOutputs = new int[3]; - assertTrue("after zeroing values and result and forth explicit add expectedResult == result", same(expectedResult, kernel.result)); + int[] expected = new int []{3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0}; + + public void step() { + int simSteps = 16; + int[][] log = new int[neuronOutputs.length][simSteps]; + put(neuronOutputs); + for (simStep[0] = 0; simStep[0] < simSteps; simStep[0]++) { + put(simStep).execute(neuronOutputs.length).get(neuronOutputs); + for (int n = 0; n < neuronOutputs.length; n++) + log[n][simStep[0]] = neuronOutputs[n]; + } + System.out.println(getExecutionMode() + (isExplicit() ? ", explicit" : ", auto")); + + for (int n = 0; n < neuronOutputs.length; n++) + System.out.println(Arrays.toString(log[n])); + assertTrue("log[2] == expected", same(log[2], expected)); + } + + @Override public void run() { + int neuronID = getGlobalId(); + neuronOutputs[neuronID] = (simStep[0] % (neuronID + 2) == 0) ? (neuronID + 1) : 0; + } + } + + @Test public void issue60Explicit() { + + TestKernel kernel = new TestKernel(); + kernel.setExplicit(true); + kernel.step(); + + } + + @Test public void issue60Auto() { + TestKernel kernel = new TestKernel(); + kernel.step(); }