1 // See LICENSE for license details.
3 //**************************************************************************
4 // Double-precision general matrix multiplication benchmark
5 //--------------------------------------------------------------------------
9 //--------------------------------------------------------------------------
10 // Input/Reference Data
14 void spmv(int r
, const double* val
, const int* idx
, const double* x
,
15 const int* ptr
, double* y
)
17 for (int i
= 0; i
< r
; i
++)
20 double yi0
= 0, yi1
= 0, yi2
= 0, yi3
= 0;
21 for (k
= ptr
[i
]; k
< ptr
[i
+1]-3; k
+=4)
23 yi0
+= val
[k
+0]*x
[idx
[k
+0]];
24 yi1
+= val
[k
+1]*x
[idx
[k
+1]];
25 yi2
+= val
[k
+2]*x
[idx
[k
+2]];
26 yi3
+= val
[k
+3]*x
[idx
[k
+3]];
28 for ( ; k
< ptr
[i
+1]; k
++)
30 yi0
+= val
[k
]*x
[idx
[k
]];
32 y
[i
] = (yi0
+yi1
)+(yi2
+yi3
);
36 //--------------------------------------------------------------------------
39 int main( int argc
, char* argv
[] )
44 spmv(R
, val
, idx
, x
, ptr
, y
);
48 spmv(R
, val
, idx
, x
, ptr
, y
);
51 return verifyDouble(R
, y
, verify_data
);