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 }