Merge pull request #34 from richardxia/use-port-randomization
[riscv-tests.git] / benchmarks / mm / mm_main.c
index 4fb1b1bfbcda73d1c6a9c9c8841e436f2a2f0960..133b5a2d73a17434e8aefef7d8e4ebf4ba8d402e 100644 (file)
@@ -6,21 +6,17 @@
 #include <stdio.h>
 #include "util.h"
 
+#pragma GCC optimize ("unroll-loops")
+
 void thread_entry(int cid, int nc)
 {
   const int R = 8;
   int m, n, p;
   uint64_t s = 0xdeadbeefU;
   
-  if (have_vec) {
-    m = HCBM;
-    n = HCBN;
-    p = HCBK;
-  } else {
-    m = CBM;
-    n = CBN;
-    p = CBK;
-  }
+  m = CBM;
+  n = CBN;
+  p = CBK;
 
   t a[m*p];
   t b[p*n];
@@ -35,26 +31,17 @@ void thread_entry(int cid, int nc)
   memset(c, 0, m*n*sizeof(c[0]));
 
   size_t instret, cycles;
-  if (have_vec) {
-    for (int i = 0; i < R; i++)
-    {
-      instret = -rdinstret();
-      cycles = -rdcycle();
-      mm_rb_hwacha(m, n, p, a, p, b, n, c, n);
-      instret += rdinstret();
-      cycles += rdcycle();
-    }
-  } else {
-    for (int i = 0; i < R; i++)
-    {
-      instret = -rdinstret();
-      cycles = -rdcycle();
-      mm(m, n, p, a, p, b, n, c, n);
-      instret += rdinstret();
-      cycles += rdcycle();
-    }
+  for (int i = 0; i < R; i++)
+  {
+    instret = -read_csr(minstret);
+    cycles = -read_csr(mcycle);
+    mm(m, n, p, a, p, b, n, c, n);
+    instret += read_csr(minstret);
+    cycles += read_csr(mcycle);
   }
 
+  asm volatile("fence");
+
   printf("C%d: reg block %dx%dx%d, cache block %dx%dx%d\n",
          cid, RBM, RBN, RBK, CBM, CBN, CBK);
   printf("C%d: %d instructions\n", cid, (int)(instret));