use of gdsc.smlm.filters.SumFilter in project GDSC-SMLM by aherbert.
the class SumFilterTest method floatStripedBlockSum3x3InternalIsFasterThanBlockSum3x3Internal.
@Test
public void floatStripedBlockSum3x3InternalIsFasterThanBlockSum3x3Internal() {
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.stripedBlockSum3x3Internal(floatClone(dataSet.get(0)), primes[0], primes[0]);
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.stripedBlockSum3x3Internal(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.blockSum3x3Internal(data, width, height);
time = System.nanoTime() - time;
long fastTime = fastTimes.get(index++);
slowTotal += time;
fastTotal += fastTime;
boxSlowTotal += time;
boxFastTotal += fastTime;
if (debug)
System.out.printf("float blockSum3x3Internal [%dx%d] %d => stripedBlockSum3x3Internal %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 blockSum3x3Internal %d => stripedBlockSum3x3Internal %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);
}
use of gdsc.smlm.filters.SumFilter in project GDSC-SMLM by aherbert.
the class SumFilterTest method intRollingBlockSumInternalNxNIsFasterThanRollingBlockSumNxN.
@Test
public void intRollingBlockSumInternalNxNIsFasterThanRollingBlockSumNxN() {
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.rollingBlockSumNxNInternal(intClone(dataSet.get(0)), primes[0], primes[0], boxSizes[0]);
filter.rollingBlockSumNxN(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.rollingBlockSumNxN(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 rollingBlockSumNxN [%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 rollingBlockSumNxN %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 rollingBlockSumNxN %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);
}
use of gdsc.smlm.filters.SumFilter in project GDSC-SMLM by aherbert.
the class SumFilterTest method intStripedBlockSumNxNInternalIsFasterThanBlockSumNxNInternal.
@Test
public void intStripedBlockSumNxNInternalIsFasterThanBlockSumNxNInternal() {
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.blockSumNxNInternal(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.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.blockSumNxNInternal(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 blockSumNxNInternal [%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 blockSumNxNInternal %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 blockSumNxNInternal %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);
}
use of gdsc.smlm.filters.SumFilter in project GDSC-SMLM by aherbert.
the class SumFilterTest method floatRollingBlockSumNxNInternalIsFasterThanRollingBlockSumNxNInternalTransposed.
@SuppressWarnings("deprecation")
@Test
public void floatRollingBlockSumNxNInternalIsFasterThanRollingBlockSumNxNInternalTransposed() {
org.junit.Assume.assumeTrue(TestSettings.RUN_SPEED_TESTS);
rand = new gdsc.core.utils.Random(-300519);
SumFilter filter = new SumFilter();
ArrayList<float[]> dataSet = floatCreateSpeedData(InternalITER3);
ArrayList<Long> fastTimes = new ArrayList<Long>();
// Initialise
filter.rollingBlockSumNxNInternal(floatClone(dataSet.get(0)), primes[0], primes[0], boxSizes[0]);
filter.rollingBlockSumNxNInternalTransposed(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.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<float[]> dataSet2 = new ArrayList<float[]>(dataSet.size());
for (float[] data : dataSet) dataSet2.add(floatClone(data));
long time = System.nanoTime();
for (float[] data : dataSet2) filter.rollingBlockSumNxNInternalTransposed(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 rollingBlockSumNxNInternalTransposed [%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("float rollingBlockSumNxNInternalTransposed %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("float rollingBlockSumNxNInternalTransposed %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);
}
use of gdsc.smlm.filters.SumFilter in project GDSC-SMLM by aherbert.
the class SumFilterTest method floatRollingBlockSumNxNInternalIsFasterThanStripedBlockSumNxNInternal.
@Test
public void floatRollingBlockSumNxNInternalIsFasterThanStripedBlockSumNxNInternal() {
org.junit.Assume.assumeTrue(TestSettings.RUN_SPEED_TESTS);
rand = new gdsc.core.utils.Random(-300519);
SumFilter filter = new SumFilter();
ArrayList<float[]> dataSet = floatCreateSpeedData(InternalITER);
ArrayList<Long> fastTimes = new ArrayList<Long>();
// Initialise
filter.rollingBlockSumNxNInternal(floatClone(dataSet.get(0)), primes[0], primes[0], boxSizes[0]);
filter.stripedBlockSumNxNInternal(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.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<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;
long fastTime = fastTimes.get(index++);
slowTotal += time;
fastTotal += fastTime;
boxSlowTotal += time;
boxFastTotal += fastTime;
if (debug)
System.out.printf("float 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("float 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("float 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);
}
Aggregations