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 | } |