summaryrefslogtreecommitdiff
path: root/tests/src/JIT/Performance/CodeQuality/SciMark/SparseCompRow.cs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/JIT/Performance/CodeQuality/SciMark/SparseCompRow.cs')
-rw-r--r--tests/src/JIT/Performance/CodeQuality/SciMark/SparseCompRow.cs59
1 files changed, 59 insertions, 0 deletions
diff --git a/tests/src/JIT/Performance/CodeQuality/SciMark/SparseCompRow.cs b/tests/src/JIT/Performance/CodeQuality/SciMark/SparseCompRow.cs
new file mode 100644
index 0000000000..34660c5978
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/SciMark/SparseCompRow.cs
@@ -0,0 +1,59 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+/// <license>
+/// This is a port of the SciMark2a Java Benchmark to C# by
+/// Chris Re (cmr28@cornell.edu) and Werner Vogels (vogels@cs.cornell.edu)
+///
+/// For details on the original authors see http://math.nist.gov/scimark2
+///
+/// This software is likely to burn your processor, bitflip your memory chips
+/// anihilate your screen and corrupt all your disks, so you it at your
+/// own risk.
+/// </license>
+
+
+using System;
+
+namespace 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);
+ }
+
+ /// <summary>
+ /// 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;
+ }
+ }
+ }
+ }
+} \ No newline at end of file