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 }