for (int r = 0; r < 10; r++) {
for (int m = 10000; m <= 100000; m = m + 10000) {
for (int n = 1000; n <= 10000; n = n + 1000) {
int[][] patternA = Utilities.getRowPattern(n, n, m / n);
DenseMatrix origA = new DenseMatrix(n, n);
Utilities.rowPopulate(origA, patternA);
int[][] patternB = Utilities.getRowPattern(n, n, m / n);
DenseMatrix origB = new DenseMatrix(n, n);
Utilities.rowPopulate(origB, patternB);
// to be fair, we reuse the same matrix values
long denseMem, denseInitTime, denseMultTime, sparseMem, sparseInitTime, sparseMultTime;
Stopwatch timer = Stopwatch.createUnstarted();
{
timer.reset();
timer.start();
DenseMatrix A = new DenseMatrix(origA);
timer.stop();
// all attempts to measure memory usage failed
denseMem = n * n * 8;
denseInitTime = timer.elapsed(TimeUnit.NANOSECONDS);
timer.reset();
DenseMatrix B = origB.copy();
DenseMatrix C = new DenseMatrix(n, n);
timer.start();
A.mult(B, C);
timer.stop();
denseMultTime = timer.elapsed(TimeUnit.NANOSECONDS);
}
{
timer.reset();
timer.start();
LinkedSparseMatrix A = new LinkedSparseMatrix(origA);
timer.stop();
// using compressedooms
sparseMem = m * 28 + 16 * n;
sparseInitTime = timer.elapsed(TimeUnit.NANOSECONDS);
timer.reset();
DenseMatrix B = origB.copy();
DenseMatrix C = new DenseMatrix(n, n);
timer.start();
A.mult(B, C);
timer.stop();
sparseMultTime = timer.elapsed(TimeUnit.NANOSECONDS);
}