001
002 /**
003 * Sequential Matrix Multiplication.
004 * Sequential algorithm, generating product matrix in blocks.
005 * matrix B transposed.
006 * @author Heinz Kredel.
007 */
008
009 public class SeqMultBlockTrans implements MMInf {
010
011 int blocksize = 1;
012
013 public SeqMultBlockTrans(int size) {
014 this.blocksize = size;
015 }
016
017
018 /**
019 * Performs the multiplication of two matrices, B transposed.
020 * C = A * trans(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 System.out.println("#blocks = " + (A.length/na) + ", na = " + na
030 + " SeqMultBlockTrans");
031
032 for (int ii=0; ii < A.length; ii+=na) {
033 for (int jj=0; jj < B.length; jj+=nb) {
034
035 for (int i=ii; i < Math.min((ii+na),A.length); i++) {
036 double[] Ai = A[i];
037 for (int j=jj; j < Math.min((jj+nb),B.length); j++) {
038 double[] Bj = B[j];
039 double c = 0.0;
040 for (int k=0; k < Bj.length; k++) {
041 c += Ai[k] * Bj[k];
042 }
043 C[i][j] = c;
044 }
045 }
046
047 }
048 }
049
050 }
051
052 }