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