Statistics
| Branch: | Revision:

root / synthbench / euroben-ports / base / C-MPI / mod2am / mxm.c

History | View | Annotate | Download (908 Bytes)

1 0:839f52ef7657 louridas
void mxm( int lda, int m, int l, int n, double **a, double **b,
2 0:839f52ef7657 louridas
          double **c )
3 0:839f52ef7657 louridas
// ---------------------------------------------------------------------
4 0:839f52ef7657 louridas
// --- Routine 'mxm' does a matrix-matrix multiplication 'AB = C'
5 0:839f52ef7657 louridas
//     using an dotproduct implementation.
6 0:839f52ef7657 louridas
// ---------------------------------------------------------------------
7 0:839f52ef7657 louridas
{
8 0:839f52ef7657 louridas
   int    i, j, k, lf;
9 0:839f52ef7657 louridas
// ---------------------------------------------------------------------
10 0:839f52ef7657 louridas
   lf = l - l%4;
11 0:839f52ef7657 louridas
   for( i = 0 ; i < m; i++ ) {
12 0:839f52ef7657 louridas
      for( j = 0; j < lf; j+= 4 ) {
13 0:839f52ef7657 louridas
         for( k = 0; k < n; k++ ) {
14 0:839f52ef7657 louridas
            c[i][k] = c[i][k] + a[i][j]  *b[j][k]   + a[i][j+1]*b[j+1][k]
15 0:839f52ef7657 louridas
                              + a[i][j+2]*b[j+2][k] + a[i][j+3]*b[j+3][k];
16 0:839f52ef7657 louridas
         }
17 0:839f52ef7657 louridas
      }
18 0:839f52ef7657 louridas
   }
19 0:839f52ef7657 louridas
   for( i = 0 ; i < m; i++ ){
20 0:839f52ef7657 louridas
      for( j = lf; j < l; j++ ) {
21 0:839f52ef7657 louridas
         for( k = 0; k < n; k++ ) {
22 0:839f52ef7657 louridas
            c[i][k] = c[i][k] + a[i][j]*b[j][k];
23 0:839f52ef7657 louridas
         }
24 0:839f52ef7657 louridas
      }
25 0:839f52ef7657 louridas
   }
26 0:839f52ef7657 louridas
}