package jcuda.jcublas.ops; import org.apache.commons.lang3.RandomUtils; 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.api.ops.impl.accum.distances.CosineSimilarity; import org.nd4j.linalg.api.ops.impl.transforms.RectifedLinear; import org.nd4j.linalg.api.ops.impl.transforms.SoftMax; import org.nd4j.linalg.api.ops.impl.transforms.arithmetic.AddOp; import org.nd4j.linalg.factory.Nd4j; import static org.junit.Assert.assertEquals; /** * @author AlexDBlack * @author raver119@gmail.com */ @Ignore public class EndlessTests { private static final int RUN_LIMIT = 100000; @Before public void setUp() { CudaEnvironment.getInstance().getConfiguration() .setFirstMemory(AllocationStatus.DEVICE) .setExecutionModel(Configuration.ExecutionModel.SEQUENTIAL) .setAllocationModel(Configuration.AllocationModel.CACHE_ALL) .enableDebug(false) .setVerbose(false); System.out.println("Init called"); } @Test public void testTransformsForeverSingle(){ INDArray arr = Nd4j.ones(100,100); for (int i = 0; i < RUN_LIMIT; i++ ) { Nd4j.getExecutioner().exec(new RectifedLinear(arr)); } } @Test public void testTransformsForeverSingle2(){ INDArray arr = Nd4j.ones(100,100); for (int i = 0; i < RUN_LIMIT; i++ ) { Nd4j.getExecutioner().exec(new SoftMax(arr)); } } @Test public void testTransformsForeverPairwise(){ INDArray arr = Nd4j.ones(100,100); INDArray arr2 = Nd4j.ones(100,100); for (int i = 0; i < RUN_LIMIT; i++ ) { Nd4j.getExecutioner().exec(new AddOp(arr,arr2,arr)); } } @Test public void testAccumForeverFull(){ INDArray arr = Nd4j.ones(100,100); for (int i = 0; i < RUN_LIMIT; i++ ) { arr.sumNumber(); } } @Test public void testAccumForeverMax(){ INDArray arr = Nd4j.ones(100,100); for (int i = 0; i < RUN_LIMIT; i++ ) { arr.maxNumber(); } } @Test public void testAccumForeverMaxDifferent(){ for (int i = 0; i < RUN_LIMIT; i++ ) { int rows = RandomUtils.nextInt(1, 500); int columns = RandomUtils.nextInt(1, 500); INDArray arr = Nd4j.ones(rows, columns); float res = arr.maxNumber().floatValue(); assertEquals("Failed on rows: ["+rows+"], columns: ["+columns+"], iteration: ["+i+"]", 1.0f, res, 0.01f); } } @Test public void testAccumForeverAlongDimension(){ INDArray arr = Nd4j.ones(100,100); for (int i = 0; i < RUN_LIMIT; i++ ) { arr.sum(0); } } @Test public void testAccumForeverAlongDimensions(){ INDArray arr = Nd4j.linspace(1, 10000, 10000).reshape(10, 10, 100); for (int i = 0; i < RUN_LIMIT; i++ ) { arr.sum(0,1); } } @Test public void testIndexAccumForeverFull(){ INDArray arr = Nd4j.ones(100,100); for (int i = 0; i < RUN_LIMIT; i++ ) { Nd4j.argMax(arr,Integer.MAX_VALUE); } } @Test public void testStdDevForeverFull(){ INDArray arr = Nd4j.ones(100,100); for (int i = 0; i < RUN_LIMIT; i++ ) { arr.stdNumber(); } } @Test public void testIndexAccumForeverAlongDimension(){ INDArray arr = Nd4j.ones(100,100); for (int i = 0; i < RUN_LIMIT; i++ ) { Nd4j.argMax(arr,0); } } @Test public void testIndexAccumForeverAlongDimensions(){ INDArray arr = Nd4j.linspace(1, 10000, 10000).reshape(10, 10, 100); for (int i = 0; i < RUN_LIMIT; i++ ) { Nd4j.argMax(arr,0, 1); } } @Test public void testBroadcastForever(){ INDArray arr = Nd4j.ones(100,100); INDArray arr2 = Nd4j.ones(1,100); for (int i = 0; i < RUN_LIMIT; i++ ) { arr.addiRowVector(arr2); } // System.out.println("New counter: " + EventsProvider.getInstance().getEventsNumber()); // System.out.println("Cached counter: " + EventsProvider.getInstance().getCachedNumber()); } @Test public void testScalarForever(){ INDArray arr = Nd4j.zeros(100,100); for (int i = 0; i < RUN_LIMIT; i++ ) { arr.addi(1.0); } } @Test public void testReduce3(){ INDArray first = Nd4j.ones(10,10); INDArray second = Nd4j.ones(10,10); for (int i = 0; i < RUN_LIMIT; i++ ) { Nd4j.getExecutioner().exec(new CosineSimilarity(first,second)); } } @Test public void testReduce3AlongDim(){ INDArray first = Nd4j.ones(10,10); INDArray second = Nd4j.ones(10,10); for (int i = 0; i < RUN_LIMIT; i++ ) { Nd4j.getExecutioner().exec(new CosineSimilarity(first,second),0); } } @Test public void testMmulForever(){ INDArray first = Nd4j.zeros(10,10); INDArray second = Nd4j.zeros(10,10); for (int i = 0; i < RUN_LIMIT; i++ ) { first.mmul(second); } } @Test public void testAxpyForever(){ INDArray first = Nd4j.zeros(10,10); INDArray second = Nd4j.zeros(10,10); for (int i = 0; i < RUN_LIMIT; i++ ) { Nd4j.getBlasWrapper().level1().axpy(100,1,first,second); } } @Test public void testConcatForever1() { INDArray[] arr = new INDArray[3]; arr[0] = Nd4j.linspace(0,49,50).reshape('c',5,10); arr[1] = Nd4j.linspace(50,59,10); arr[2] = Nd4j.linspace(60,99,40).reshape('c',4,10); INDArray expected = Nd4j.linspace(0,99,100).reshape('c',10,10); for (int i = 0; i < RUN_LIMIT; i++ ) { INDArray actual = Nd4j.vstack(arr); assertEquals("Failed on [" + i + "] iteration",expected, actual); if (i % 500 == 0) System.out.println("Iteration " + i + " passed"); } } @Test public void testConcatForever2() { INDArray expected = Nd4j.linspace(1,9,9).reshape('c',3,3); for (int i = 0; i < RUN_LIMIT; i++ ) { for(char order : new char[]{'c','f'}){ Nd4j.factory().setOrder(order); INDArray arr1 = Nd4j.linspace(1,6,6).reshape('c',2,3); INDArray arr2 = Nd4j.linspace(7,9,3).reshape('c',1,3); INDArray merged = Nd4j.vstack(arr1,arr2); assertEquals("Failed on [" + i + "] iteration", expected, merged); } if (i % 500 == 0) System.out.println("Iteration " + i + " passed"); } } }