/************************************************************************* * Compilation: javac matrix.java * Execution: java matrix * * % java matrix matrix_size number_of_trials * *************************************************************************/ public class matrix { public static void main(String[] args) { int N = Integer.parseInt(args[0]); int x = Integer.parseInt(args[1]); long start, stop; long elapsed; long overhead; // generate input double[][] A = new double[N][N]; double[][] B = new double[N][N]; double[][] C; for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) A[i][j] = Math.random(); for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) B[i][j] = Math.random(); //compute overhead start = System.nanoTime(); for (int i = 0; i < 10000; i ++) { stop = System.nanoTime(); } stop = System.nanoTime(); overhead = 2 * ((stop-start)/10000); System.out.println("Overhead: "+overhead+" nanoseconds"); // multiplication = dot product version for (int count = 0; count < x; count++) { C = new double[N][N]; start = System.nanoTime(); for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) for (int k = 0; k < N; k++) C[i][k] += A[i][j] * B[j][k]; stop = System.nanoTime(); elapsed = (stop - start) - overhead; System.out.println("Elapsed Time ("+N+"x"+N+" matrix, minus overhead): " + elapsed + " nanoseconds"); } } }