blob: c7e0dcc2bffce0827d6b615d31095b2a92ec28b4 [file] [log] [blame]
/* multiple iterations used to make kernel have roughly
same granulairty as other Scimark kernels. */
double SparseCompRow_num_flops(int N, int nz, int num_iterations)
{
/* Note that if nz does not divide N evenly, then the
actual number of nonzeros used is adjusted slightly.
*/
int actual_nz = (nz/N) * N;
return ((double)actual_nz) * 2.0 * ((double) num_iterations);
}
/* computes a matrix-vector multiply with a sparse matrix
held in compress-row format. If the size of the matrix
in MxN with nz nonzeros, then the val[] is the nz nonzeros,
with its ith entry in column col[i]. The integer vector row[]
is of size M+1 and row[i] points to the begining of the
ith row in col[].
*/
void SparseCompRow_matmult( int M, double *y, double *val, int *row,
int *col, double *x, int NUM_ITERATIONS)
{
int reps;
int r;
int i;
for (reps=0; reps<NUM_ITERATIONS; reps++)
{
for (r=0; r<M; r++)
{
double sum = 0.0;
int rowR = row[r];
int rowRp1 = row[r+1];
for (i=rowR; i<rowRp1; i++)
sum += x[ col[i] ] * val[i];
y[r] = sum;
}
}
}