summaryrefslogtreecommitdiff
path: root/src/jnt/scimark2/SparseCompRow.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jnt/scimark2/SparseCompRow.java')
-rw-r--r--src/jnt/scimark2/SparseCompRow.java42
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;
+ }
+ }
+ }
+
+}