package jcuda.jcublas.ops; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.nd4j.jita.allocator.enums.AllocationStatus; import org.nd4j.jita.conf.Configuration; import org.nd4j.jita.conf.CudaEnvironment; import org.nd4j.linalg.api.ndarray.INDArray; import org.nd4j.linalg.factory.Nd4j; import org.nd4j.linalg.util.ArrayUtil; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; /** * @author raver119@gmail.com */ @Ignore public class CudaPairwiseTrainformsTests { @Before public void setUp() { CudaEnvironment.getInstance().getConfiguration() .setExecutionModel(Configuration.ExecutionModel.SEQUENTIAL) .setFirstMemory(AllocationStatus.DEVICE) .setMaximumBlockSize(256) .setMaximumGridSize(64) .enableDebug(true) .setVerbose(true); System.out.println("Init called"); } @Test public void testPinnedAddiRowVector() throws Exception { // simple way to stop test if we're not on CUDA backend here assertEquals("JcublasLevel1", Nd4j.getBlasWrapper().level1().getClass().getSimpleName()); INDArray array1 = Nd4j.create(new float[]{1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f}); INDArray array2 = Nd4j.create(new float[]{2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f}); array1.addiRowVector(array2); System.out.println("Array1: " + array1); System.out.println("Array2: " + array2); assertEquals(3.5f, array1.getRow(0).getFloat(0), 0.01); } @Test public void testPinnedDiviRowVector() throws Exception { // simple way to stop test if we're not on CUDA backend here assertEquals("JcublasLevel1", Nd4j.getBlasWrapper().level1().getClass().getSimpleName()); INDArray array1 = Nd4j.create(new float[]{1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f}); INDArray array2 = Nd4j.create(new float[]{2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f}); INDArray result = array1.diviRowVector(array2); System.out.println("Array1: " + array1); System.out.println("Array2: " + array2); System.out.println("Result: " + result); assertEquals(0.75f, array1.getRow(0).getFloat(0), 0.01); } @Test public void testPinnedRDiviRowVector() throws Exception { // simple way to stop test if we're not on CUDA backend here assertEquals("JcublasLevel1", Nd4j.getBlasWrapper().level1().getClass().getSimpleName()); INDArray array1 = Nd4j.create(new float[]{1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f}); INDArray array2 = Nd4j.create(new float[]{2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f}); array1.rdiviRowVector(array2); System.out.println("Array1: " + array1); System.out.println("Array2: " + array2); assertEquals(1.33f, array1.getRow(0).getFloat(0), 0.01); } @Test public void testPinnedSubiRowVector() throws Exception { // simple way to stop test if we're not on CUDA backend here assertEquals("JcublasLevel1", Nd4j.getBlasWrapper().level1().getClass().getSimpleName()); INDArray array1 = Nd4j.create(new float[]{1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f}); INDArray array2 = Nd4j.create(new float[]{2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f}); array1.subiRowVector(array2); System.out.println("Array1: " + array1); System.out.println("Array2: " + array2); assertEquals(-0.5f, array1.getRow(0).getFloat(0), 0.01); } @Test public void testPinnedRSubiRowVector() throws Exception { // simple way to stop test if we're not on CUDA backend here assertEquals("JcublasLevel1", Nd4j.getBlasWrapper().level1().getClass().getSimpleName()); INDArray array1 = Nd4j.create(new float[]{1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f}); INDArray array2 = Nd4j.create(new float[]{2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f}); array1.rsubiRowVector(array2); System.out.println("Array1: " + array1); System.out.println("Array2: " + array2); assertEquals(0.5f, array1.getRow(0).getFloat(0), 0.01); } @Test public void testPinnedMuliRowVector() throws Exception { // simple way to stop test if we're not on CUDA backend here assertEquals("JcublasLevel1", Nd4j.getBlasWrapper().level1().getClass().getSimpleName()); INDArray array1 = Nd4j.create(new float[]{1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f}); INDArray array2 = Nd4j.create(new float[]{2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.0f}); array1.muliRowVector(array2); System.out.println("Array1: " + array1); System.out.println("Array2: " + array2); assertEquals(3.0f, array1.getRow(0).getFloat(0), 0.01); } @Test public void testPinnedMuliColumnVector1() throws Exception { assertEquals("JcublasLevel1", Nd4j.getBlasWrapper().level1().getClass().getSimpleName()); INDArray array1 = Nd4j.linspace(1, 1280, 128000).reshape(128, 1000); INDArray array2 = Nd4j.linspace(1, 1280, 128000).reshape(128, 1000).dup('f'); array1.muli(array2); // System.out.println("Array1: " + array1); // System.out.println("Array2: " + array2); } @Test public void testPinnedMuliColumnVector2() throws Exception { assertEquals("JcublasLevel1", Nd4j.getBlasWrapper().level1().getClass().getSimpleName()); INDArray array1 = Nd4j.linspace(1, 1280, 128000).reshape(128, 1000); INDArray array2 = Nd4j.linspace(1, 1280, 128000).reshape(128, 1000); INDArray arrayTest = array1.dup('f'); assertEquals(array1, arrayTest); array1.muli(array2); // System.out.println("Array1: " + array1); assertNotEquals(array1, arrayTest); //System.out.println("Array2: " + array2); } @Test public void testFOrdering1() throws Exception { INDArray array1 = Nd4j.linspace(1, 1280, 128000).reshape(128, 1000); INDArray array2 = Nd4j.linspace(1, 1280, 128000).reshape(128, 1000); INDArray array3 = Nd4j.linspace(1, 1280, 128000).reshape(128, 1000); INDArray array4 = Nd4j.linspace(1, 1280, 128000).reshape(128, 1000).dup('f'); System.out.println("a4 stride: " + array4.elementWiseStride()); long time1 = System.currentTimeMillis(); array1.muli(array2); long time2 = System.currentTimeMillis(); System.out.println("Execution time 1: " + (time2 - time1)); time1 = System.currentTimeMillis(); array3.muli(array4); time2 = System.currentTimeMillis(); System.out.println("Execution time 2: " + (time2 - time1)); assertEquals(array3, array1); } @Test public void testFOrdering2() throws Exception { INDArray array1 = Nd4j.linspace(1, 1280, 128000); INDArray array2 = Nd4j.linspace(1, 1280, 128000); INDArray array3 = Nd4j.linspace(1, 1280, 128000); INDArray array4 = Nd4j.linspace(1, 1280, 128000).dup('f'); array1.muli(array2); array3.muli(array4); assertEquals(array3, array1); } @Test public void testAssign(){ int[] shape1 = {3,2,2,2,2,2}; int[] shape2 = {12,8}; int length = ArrayUtil.prod(shape1); assertEquals(ArrayUtil.prod(shape1),ArrayUtil.prod(shape2)); INDArray arr = Nd4j.linspace(1,length,length).reshape('c',shape1); INDArray arr2c = Nd4j.create(shape2,'c'); INDArray arr2f = Nd4j.create(shape2,'f'); arr2c.assign(arr); System.out.println("--------------"); arr2f.assign(arr); INDArray exp = Nd4j.linspace(1,length,length).reshape('c',shape2); assertEquals(exp,arr2c); assertEquals(exp,arr2f); } }