root / synthbench / euroben-ports / base / C / mod2am / mxm.c @ 0:839f52ef7657
History | View | Annotate | Download (1.2 kB)
1 |
void mxm( int lda, int m, int l, int n, double a[][lda], double b[][n], |
---|---|
2 |
double c[][n] )
|
3 |
// ---------------------------------------------------------------------
|
4 |
// --- Routine 'mvddot' does a matrix-vector multiplication 'Ab = c'
|
5 |
// using an dotproduct implementation.
|
6 |
// ---------------------------------------------------------------------
|
7 |
{ |
8 |
int i, j, k, lf, mf;
|
9 |
// ---------------------------------------------------------------------
|
10 |
mf = m - m%4;
|
11 |
for( i = 0; i < mf; i+= 4 ) { |
12 |
for( j = 0; j < n; j++ ) { |
13 |
c[i][j] = 0.0; c[i+1][j] = 0.0; c[i+2][j] = 0.0; c[i+3][j] = 0.0; |
14 |
} |
15 |
} |
16 |
for( i = mf; i < m; i++ ) {
|
17 |
for( j = 0; j < n; j++ ) { |
18 |
c[i][j] = 0.0; |
19 |
} |
20 |
} |
21 |
lf = l - l%4;
|
22 |
for( i = 0 ; i < m; i++ ) { |
23 |
for( j = 0; j < lf; j+= 4 ) { |
24 |
for( k = 0; k < n; k++ ) { |
25 |
c[i][k] = c[i][k] + a[i][j] *b[j][k] + a[i][j+1]*b[j+1][k] |
26 |
+ a[i][j+2]*b[j+2][k] + a[i][j+3]*b[j+3][k]; |
27 |
} |
28 |
} |
29 |
} |
30 |
for( i = 0 ; i < m; i++ ){ |
31 |
for( j = lf; j < n; j++ ) {
|
32 |
for( k = 0; k < n; k++ ) { |
33 |
c[i][k] = c[i][k] + a[i][j]*b[j][k]; |
34 |
} |
35 |
} |
36 |
} |
37 |
} |