# MXM Matrix-Matrix Multiplication Timings

MXM is a C++ program which sets up a matrix-matrix multiplication problem A = B * C, and carries it out using

• Nested FOR I, J, K loops;
• Nested FOR I, K, J loops;
• Nested FOR J, I, K loops;
• Nested FOR J, K, I loops;
• Nested FOR K, I, J loops;
• Nested FOR K, J, I loops;
• the MATMUL FORTRAN90 intrinsic function;

The user is allowed to specify N1, N2, and N3, which define the matrix sizes.

### Usage:

mxm n1 n2 n3
where
• n1 is the number of rows in B.
• n2 is the number of columns in B and rows in C.
• n3 is the number of columns in C;

### Languages:

MXM is available in a C version and a C++ version and a FORTRAN90 version and a MATLAB version.

### Related Data and Programs:

LINPACK_BENCH, a C++ program which measures the time needed to factor and solve a "large" (N=1000) dense linear system of equations, and is used as a benchmark.

MXV, a C++ program which compares the performance of (DO I, FOR J) loops, (DO J, FOR I ) loops, and MATMUL for computing the product of an MxN matrix A and an N vector X.

SUM_MILLION, a C++ program which sums the integers from 1 to 1,000,000, as a demonstration of how to rate a computer's speed;

TIMER, C++ programs which demonstrate how to compute CPU time or elapsed time.

### Reference:

1. John Burkardt, Paul Puglielli,
Pittsburgh Supercomputing Center,
MATMUL: An Interactive Matrix Multiplication Benchmark

### List of Routines:

• MAIN is the main program for MXM.
• CPU_TIME reports the elapsed CPU time.
• MATGEN generates a random matrix.
• MXM_IJK computes A = B * C using FOR I, FOR J, FOR K loops.
• MXM_IKJ computes A = B * C using FOR I, FOR K, FOR J loops.
• MXM_JIK computes A = B * C using FOR J, FOR I, FOR K loops.
• MXM_JKI computes A = B * C using FOR J, FOR K, FOR I loops.
• MXM_KIJ computes A = B * C using FOR K, FOR I, FOR J loops.
• MXM_KJI computes A = B * C using FOR K, FOR J, FOR I loops.
• TIMESTAMP prints the current YMDHMS date as a time stamp.

You can go up one level to the C++ source codes.

Last revised on 08 October 2010.