/* * 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); } }