001 002 /** 003 * Sequential Matrix Multiplication. 004 * Sequential algorithm, generating product matrix in blocks 005 * also blocking A and B. 006 * @author Heinz Kredel. 007 */ 008 009 public class SeqMult4 implements MMInf { 010 011 int blocksize = 1; 012 013 public SeqMult4(int size) { 014 this.blocksize = size; 015 } 016 017 018 /** 019 * Performs the multiplication of two matrices. 020 * C = A * B. 021 * @param C result matrix. 022 * @param A matrix. 023 * @param B matrix. 024 */ 025 public void multiply(double[][] C, double[][] A, double[][] B) { 026 027 int na = blocksize; 028 int nb = blocksize; 029 int nc = blocksize; 030 System.out.println("#blocks = " + (A.length/na) + ", na = " + na 031 + " SeqMultBlock4"); 032 033 for (int ii=0; ii < A.length; ii+=na) { 034 for (int jj=0; jj < B[0].length; jj+=nb) { 035 for (int kk=0; kk < B.length; kk+=nc) { 036 037 for (int i=ii; i < Math.min((ii+na),A.length); i++) { 038 for (int j=jj; j < Math.min((jj+nb),B[0].length); j++) { 039 double c = C[i][j]; 040 for (int k=kk; k < Math.min((kk+nc),B.length); k++) { 041 c += A[i][k] * B[k][j]; 042 } 043 C[i][j] = c; 044 } 045 } 046 047 } 048 } 049 } 050 051 } 052 053 }