/* * This file is part of the Jikes RVM project (http://jikesrvm.org). * * This file is licensed to You under the Eclipse Public License (EPL); * You may not use this file except in compliance with the License. You * may obtain a copy of the License at * * http://www.opensource.org/licenses/eclipse-1.0.php * * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. */ class matmul { // problem size static int m = 64; static int n = 64; static int p = 64; static int NSTEP = 100; static double[][] A = new double[m][n]; static double[][] B = new double[n][p]; static double[][] C = new double[m][p]; // timer static double timer() { return System.currentTimeMillis()/1000.0; } // initialize static void initialize() { int i; int j; for (i=0;i<m;i++) { for (j=0;j<n;j++) { A[i][j] = 1.0; } } for (i=0;i<n;i++) { for (j=0;j<p;j++) { B[i][j] = 1.0; } } for (i=0;i<m;i++) { for (j=0;j<p;j++) { C[i][j] = 0.0; } } } // matrix multiply static void multipl() { int i; int j; int k; for (i=0;i<m;i++) { for (j=0;j<p;j++) { for (k=0;k<n;k++) { C[i][j] += A[i][k]*B[k][j]; } } } } public static void main(String[] args) { System.out.println("matrix multiply:"); System.out.print(" problem size = " + m + " x " + n + " x " + p); System.out.println(" with " + NSTEP + " repetitions"); // initialize matrices A, B, C. initialize(); // perform the multiplies. double etime = timer(); for (int step=0; step<NSTEP; step++) { multipl(); } etime = timer() - etime; // compute performance double flops = 2*m*n*p*NSTEP; double floprt = 0.0; if (etime > 0.0) floprt = 1.0e-06*flops/etime; System.out.println(" elapsed time = " + etime); System.out.println(" MFLOPS = " + floprt); // compute the error double err = 0; for (int i=0; i<m; i++) { for (int j=0; j<p; j++) { double delta = C[i][j] - (n*NSTEP); err += delta*delta; } } System.out.println(" error = " + err); } }