Search in sources :

Example 6 with SumFilter

use of gdsc.smlm.filters.SumFilter in project GDSC-SMLM by aherbert.

the class SumFilterTest method intStripedBlockSumNxNIsFasterThanBlockSumNxN.

@Test
public void intStripedBlockSumNxNIsFasterThanBlockSumNxN() {
    org.junit.Assume.assumeTrue(TestSettings.RUN_SPEED_TESTS);
    rand = new gdsc.core.utils.Random(-300519);
    SumFilter filter = new SumFilter();
    ArrayList<int[]> dataSet = intCreateSpeedData(ITER);
    ArrayList<Long> fastTimes = new ArrayList<Long>();
    // Initialise
    filter.blockSumNxN(intClone(dataSet.get(0)), primes[0], primes[0], boxSizes[0]);
    filter.stripedBlockSumNxN(intClone(dataSet.get(0)), primes[0], primes[0], boxSizes[0]);
    for (int boxSize : boxSizes) for (int width : primes) for (int height : primes) {
        ArrayList<int[]> dataSet2 = new ArrayList<int[]>(dataSet.size());
        for (int[] data : dataSet) dataSet2.add(intClone(data));
        long time = System.nanoTime();
        for (int[] data : dataSet2) filter.stripedBlockSumNxN(data, width, height, boxSize);
        time = System.nanoTime() - time;
        fastTimes.add(time);
    }
    long slowTotal = 0, fastTotal = 0;
    int index = 0;
    for (int boxSize : boxSizes) {
        long boxSlowTotal = 0, boxFastTotal = 0;
        for (int width : primes) for (int height : primes) {
            ArrayList<int[]> dataSet2 = new ArrayList<int[]>(dataSet.size());
            for (int[] data : dataSet) dataSet2.add(intClone(data));
            long time = System.nanoTime();
            for (int[] data : dataSet2) filter.blockSumNxN(data, width, height, boxSize);
            time = System.nanoTime() - time;
            long fastTime = fastTimes.get(index++);
            slowTotal += time;
            fastTotal += fastTime;
            boxSlowTotal += time;
            boxFastTotal += fastTime;
            if (debug)
                System.out.printf("int blockSumNxN [%dx%d] @ %d : %d => stripedBlockSumNxN %d = %.2fx\n", width, height, boxSize, time, fastTime, speedUpFactor(time, fastTime));
        //if (TestSettings.ASSERT_SPEED_TESTS) Assert.assertTrue(String.format("Not faster: [%dx%d] @ %d : %d > %d", width, height, boxSize,
        //		blockTime, time), blockTime < time);
        }
        //if (debug)
        System.out.printf("int blockSumNxN %d : %d => stripedBlockSumNxN %d = %.2fx\n", boxSize, boxSlowTotal, boxFastTotal, speedUpFactor(boxSlowTotal, boxFastTotal));
        if (TestSettings.ASSERT_SPEED_TESTS)
            Assert.assertTrue(String.format("Not faster: Block %d : %d > %d", boxSize, boxFastTotal, boxSlowTotal), boxFastTotal < boxSlowTotal);
    }
    System.out.printf("int blockSumNxN %d => stripedBlockSumNxN %d = %.2fx\n", slowTotal, fastTotal, speedUpFactor(slowTotal, fastTotal));
    if (TestSettings.ASSERT_SPEED_TESTS)
        Assert.assertTrue(String.format("Not faster: %d > %d", fastTotal, slowTotal), fastTotal < slowTotal);
}
Also used : ArrayList(java.util.ArrayList) SumFilter(gdsc.smlm.filters.SumFilter) Test(org.junit.Test)

Example 7 with SumFilter

use of gdsc.smlm.filters.SumFilter in project GDSC-SMLM by aherbert.

the class SumFilterTest method floatStripedBlockSumInternalNxNIsFasterThanStripedBlockSumNxN.

@Test
public void floatStripedBlockSumInternalNxNIsFasterThanStripedBlockSumNxN() {
    org.junit.Assume.assumeTrue(TestSettings.RUN_SPEED_TESTS);
    rand = new gdsc.core.utils.Random(-300519);
    SumFilter filter = new SumFilter();
    ArrayList<float[]> dataSet = floatCreateSpeedData(ITER);
    ArrayList<Long> fastTimes = new ArrayList<Long>();
    // Initialise
    filter.stripedBlockSumNxNInternal(floatClone(dataSet.get(0)), primes[0], primes[0], boxSizes[0]);
    filter.stripedBlockSumNxN(floatClone(dataSet.get(0)), primes[0], primes[0], boxSizes[0]);
    for (int boxSize : boxSizes) for (int width : primes) for (int height : primes) {
        ArrayList<float[]> dataSet2 = new ArrayList<float[]>(dataSet.size());
        for (float[] data : dataSet) dataSet2.add(floatClone(data));
        long time = System.nanoTime();
        for (float[] data : dataSet2) filter.stripedBlockSumNxNInternal(data, width, height, boxSize);
        time = System.nanoTime() - time;
        fastTimes.add(time);
    }
    long slowTotal = 0, fastTotal = 0;
    int index = 0;
    for (int boxSize : boxSizes) {
        long boxSlowTotal = 0, boxFastTotal = 0;
        for (int width : primes) for (int height : primes) {
            ArrayList<float[]> dataSet2 = new ArrayList<float[]>(dataSet.size());
            for (float[] data : dataSet) dataSet2.add(floatClone(data));
            long time = System.nanoTime();
            for (float[] data : dataSet2) filter.stripedBlockSumNxN(data, width, height, boxSize);
            time = System.nanoTime() - time;
            long fastTime = fastTimes.get(index++);
            slowTotal += time;
            fastTotal += fastTime;
            boxSlowTotal += time;
            boxFastTotal += fastTime;
            if (debug)
                System.out.printf("float stripedBlockSumNxN [%dx%d] @ %d : %d => stripedBlockSumNxNInternal %d = %.2fx\n", width, height, boxSize, time, fastTime, speedUpFactor(time, fastTime));
        //if (TestSettings.ASSERT_SPEED_TESTS) Assert.assertTrue(String.format("Not faster: [%dx%d] @ %d : %d > %d", width, height, boxSize,
        //		blockTime, time), blockTime < time);
        }
        //if (debug)
        System.out.printf("float stripedBlockSumNxN %d : %d => stripedBlockSumNxNInternal %d = %.2fx\n", boxSize, boxSlowTotal, boxFastTotal, speedUpFactor(boxSlowTotal, boxFastTotal));
        if (TestSettings.ASSERT_SPEED_TESTS)
            Assert.assertTrue(String.format("Not faster: Block %d : %d > %d", boxSize, boxFastTotal, boxSlowTotal), boxFastTotal < boxSlowTotal);
    }
    System.out.printf("float stripedBlockSumNxN %d => stripedBlockSumNxNInternal %d = %.2fx\n", slowTotal, fastTotal, speedUpFactor(slowTotal, fastTotal));
    if (TestSettings.ASSERT_SPEED_TESTS)
        Assert.assertTrue(String.format("Not faster: %d > %d", fastTotal, slowTotal), fastTotal < slowTotal);
}
Also used : ArrayList(java.util.ArrayList) SumFilter(gdsc.smlm.filters.SumFilter) Test(org.junit.Test)

Example 8 with SumFilter

use of gdsc.smlm.filters.SumFilter in project GDSC-SMLM by aherbert.

the class SumFilterTest method intStripedBlockSumInternalNxNIsFasterThanStripedBlockSumNxN.

@Test
public void intStripedBlockSumInternalNxNIsFasterThanStripedBlockSumNxN() {
    org.junit.Assume.assumeTrue(TestSettings.RUN_SPEED_TESTS);
    rand = new gdsc.core.utils.Random(-300519);
    SumFilter filter = new SumFilter();
    ArrayList<int[]> dataSet = intCreateSpeedData(ITER);
    ArrayList<Long> fastTimes = new ArrayList<Long>();
    // Initialise
    filter.stripedBlockSumNxNInternal(intClone(dataSet.get(0)), primes[0], primes[0], boxSizes[0]);
    filter.stripedBlockSumNxN(intClone(dataSet.get(0)), primes[0], primes[0], boxSizes[0]);
    for (int boxSize : boxSizes) for (int width : primes) for (int height : primes) {
        ArrayList<int[]> dataSet2 = new ArrayList<int[]>(dataSet.size());
        for (int[] data : dataSet) dataSet2.add(intClone(data));
        long time = System.nanoTime();
        for (int[] data : dataSet2) filter.stripedBlockSumNxNInternal(data, width, height, boxSize);
        time = System.nanoTime() - time;
        fastTimes.add(time);
    }
    long slowTotal = 0, fastTotal = 0;
    int index = 0;
    for (int boxSize : boxSizes) {
        long boxSlowTotal = 0, boxFastTotal = 0;
        for (int width : primes) for (int height : primes) {
            ArrayList<int[]> dataSet2 = new ArrayList<int[]>(dataSet.size());
            for (int[] data : dataSet) dataSet2.add(intClone(data));
            long time = System.nanoTime();
            for (int[] data : dataSet2) filter.stripedBlockSumNxN(data, width, height, boxSize);
            time = System.nanoTime() - time;
            long fastTime = fastTimes.get(index++);
            slowTotal += time;
            fastTotal += fastTime;
            boxSlowTotal += time;
            boxFastTotal += fastTime;
            if (debug)
                System.out.printf("int stripedBlockSumNxN [%dx%d] @ %d : %d => stripedBlockSumNxNInternal %d = %.2fx\n", width, height, boxSize, time, fastTime, speedUpFactor(time, fastTime));
        //if (TestSettings.ASSERT_SPEED_TESTS) Assert.assertTrue(String.format("Not faster: [%dx%d] @ %d : %d > %d", width, height, boxSize,
        //		blockTime, time), blockTime < time);
        }
        //if (debug)
        System.out.printf("int stripedBlockSumNxN %d : %d => stripedBlockSumNxNInternal %d = %.2fx\n", boxSize, boxSlowTotal, boxFastTotal, speedUpFactor(boxSlowTotal, boxFastTotal));
        if (TestSettings.ASSERT_SPEED_TESTS)
            Assert.assertTrue(String.format("Not faster: Block %d : %d > %d", boxSize, boxFastTotal, boxSlowTotal), boxFastTotal < boxSlowTotal);
    }
    System.out.printf("int stripedBlockSumNxN %d => stripedBlockSumNxNInternal %d = %.2fx\n", slowTotal, fastTotal, speedUpFactor(slowTotal, fastTotal));
    if (TestSettings.ASSERT_SPEED_TESTS)
        Assert.assertTrue(String.format("Not faster: %d > %d", fastTotal, slowTotal), fastTotal < slowTotal);
}
Also used : ArrayList(java.util.ArrayList) SumFilter(gdsc.smlm.filters.SumFilter) Test(org.junit.Test)

Example 9 with SumFilter

use of gdsc.smlm.filters.SumFilter in project GDSC-SMLM by aherbert.

the class SumFilterTest method floatBlockSum3x3InternalIsFasterThanBlockSumNxNInternal.

@Test
public void floatBlockSum3x3InternalIsFasterThanBlockSumNxNInternal() {
    org.junit.Assume.assumeTrue(TestSettings.RUN_SPEED_TESTS);
    rand = new gdsc.core.utils.Random(-30051977);
    SumFilter filter = new SumFilter();
    ArrayList<float[]> dataSet = floatCreateSpeedData(InternalITER3);
    ArrayList<Long> fastTimes = new ArrayList<Long>();
    // Initialise
    filter.blockSumNxNInternal(floatClone(dataSet.get(0)), primes[0], primes[0], 1);
    filter.blockSum3x3Internal(floatClone(dataSet.get(0)), primes[0], primes[0]);
    for (int width : primes) for (int height : primes) {
        ArrayList<float[]> dataSet2 = new ArrayList<float[]>(dataSet.size());
        for (float[] data : dataSet) dataSet2.add(floatClone(data));
        long time = System.nanoTime();
        for (float[] data : dataSet2) filter.blockSum3x3Internal(data, width, height);
        time = System.nanoTime() - time;
        fastTimes.add(time);
    }
    long slowTotal = 0, fastTotal = 0;
    int index = 0;
    @SuppressWarnings("unused") long boxSlowTotal = 0, boxFastTotal = 0;
    for (int width : primes) for (int height : primes) {
        ArrayList<float[]> dataSet2 = new ArrayList<float[]>(dataSet.size());
        for (float[] data : dataSet) dataSet2.add(floatClone(data));
        long time = System.nanoTime();
        for (float[] data : dataSet2) filter.blockSumNxNInternal(data, width, height, 1);
        time = System.nanoTime() - time;
        long fastTime = fastTimes.get(index++);
        slowTotal += time;
        fastTotal += fastTime;
        boxSlowTotal += time;
        boxFastTotal += fastTime;
        if (debug)
            System.out.printf("float blockSumNxNInternal [%dx%d] %d => blockSum3x3Internal %d = %.2fx\n", width, height, time, fastTime, speedUpFactor(time, fastTime));
    //if (TestSettings.ASSERT_SPEED_TESTS) Assert.assertTrue(String.format("Not faster: [%dx%d] %d > %d", width, height,
    //		blockTime, time), blockTime < time);
    }
    System.out.printf("float blockSumNxNInternal %d => blockSum3x3Internal %d = %.2fx\n", slowTotal, fastTotal, speedUpFactor(slowTotal, fastTotal));
    if (TestSettings.ASSERT_SPEED_TESTS)
        Assert.assertTrue(String.format("Not faster: %d > %d", fastTotal, slowTotal), fastTotal < slowTotal);
}
Also used : ArrayList(java.util.ArrayList) SumFilter(gdsc.smlm.filters.SumFilter) Test(org.junit.Test)

Example 10 with SumFilter

use of gdsc.smlm.filters.SumFilter in project GDSC-SMLM by aherbert.

the class SumFilterTest method intRollingBlockSumNxNInternalIsFasterThanStripedBlockSumNxNInternal.

@Test
public void intRollingBlockSumNxNInternalIsFasterThanStripedBlockSumNxNInternal() {
    org.junit.Assume.assumeTrue(TestSettings.RUN_SPEED_TESTS);
    rand = new gdsc.core.utils.Random(-300519);
    SumFilter filter = new SumFilter();
    ArrayList<int[]> dataSet = intCreateSpeedData(InternalITER);
    ArrayList<Long> fastTimes = new ArrayList<Long>();
    // Initialise
    filter.rollingBlockSumNxNInternal(intClone(dataSet.get(0)), primes[0], primes[0], boxSizes[0]);
    filter.stripedBlockSumNxNInternal(intClone(dataSet.get(0)), primes[0], primes[0], boxSizes[0]);
    for (int boxSize : boxSizes) for (int width : primes) for (int height : primes) {
        ArrayList<int[]> dataSet2 = new ArrayList<int[]>(dataSet.size());
        for (int[] data : dataSet) dataSet2.add(intClone(data));
        long time = System.nanoTime();
        for (int[] data : dataSet2) filter.rollingBlockSumNxNInternal(data, width, height, boxSize);
        time = System.nanoTime() - time;
        fastTimes.add(time);
    }
    long slowTotal = 0, fastTotal = 0;
    int index = 0;
    for (int boxSize : boxSizes) {
        long boxSlowTotal = 0, boxFastTotal = 0;
        for (int width : primes) for (int height : primes) {
            ArrayList<int[]> dataSet2 = new ArrayList<int[]>(dataSet.size());
            for (int[] data : dataSet) dataSet2.add(intClone(data));
            long time = System.nanoTime();
            for (int[] data : dataSet2) filter.stripedBlockSumNxNInternal(data, width, height, boxSize);
            time = System.nanoTime() - time;
            long fastTime = fastTimes.get(index++);
            slowTotal += time;
            fastTotal += fastTime;
            boxSlowTotal += time;
            boxFastTotal += fastTime;
            if (debug)
                System.out.printf("int stripedBlockSumNxNInternal [%dx%d] @ %d : %d => rollingBlockSumNxNInternal %d = %.2fx\n", width, height, boxSize, time, fastTime, speedUpFactor(time, fastTime));
        //if (TestSettings.ASSERT_SPEED_TESTS) Assert.assertTrue(String.format("Not faster: [%dx%d] @ %d : %d > %d", width, height, boxSize,
        //		blockTime, time), blockTime < time);
        }
        //if (debug)
        System.out.printf("int stripedBlockSumNxNInternal %d : %d => rollingBlockSumNxNInternal %d = %.2fx\n", boxSize, boxSlowTotal, boxFastTotal, speedUpFactor(boxSlowTotal, boxFastTotal));
        if (TestSettings.ASSERT_SPEED_TESTS)
            Assert.assertTrue(String.format("Not faster: Block %d : %d > %d", boxSize, boxFastTotal, boxSlowTotal), boxFastTotal < boxSlowTotal);
    }
    System.out.printf("int stripedBlockSumNxNInternal %d => rollingBlockSumNxNInternal %d = %.2fx\n", slowTotal, fastTotal, speedUpFactor(slowTotal, fastTotal));
    if (TestSettings.ASSERT_SPEED_TESTS)
        Assert.assertTrue(String.format("Not faster: %d > %d", fastTotal, slowTotal), fastTotal < slowTotal);
}
Also used : ArrayList(java.util.ArrayList) SumFilter(gdsc.smlm.filters.SumFilter) Test(org.junit.Test)

Aggregations

SumFilter (gdsc.smlm.filters.SumFilter)44 ArrayList (java.util.ArrayList)44 Test (org.junit.Test)44 AverageFilter (gdsc.smlm.filters.AverageFilter)1