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    }