diff options
Diffstat (limited to 'src/jnt/scimark2/SparseCompRow.java')
-rw-r--r-- | src/jnt/scimark2/SparseCompRow.java | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/jnt/scimark2/SparseCompRow.java b/src/jnt/scimark2/SparseCompRow.java new file mode 100644 index 0000000..bef520b --- /dev/null +++ b/src/jnt/scimark2/SparseCompRow.java @@ -0,0 +1,42 @@ +package jnt.scimark2; + +public class SparseCompRow +{ + /* multiple iterations used to make kernel have roughly + same granulairty as other Scimark kernels. */ + + public static double 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[]. + */ + + public static void matmult( double y[], double val[], int row[], + int col[], double x[], int NUM_ITERATIONS) { + int M = row.length - 1; + + for (int reps=0; reps<NUM_ITERATIONS; reps++) { + + for (int r=0; r<M; r++) { + double sum = 0.0; + int rowR = row[r]; + int rowRp1 = row[r+1]; + for (int i=rowR; i<rowRp1; i++) + sum += x[ col[i] ] * val[i]; + y[r] = sum; + } + } + } + +} |