aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIsaac Wu <isaacwu@a5.Millennium.Berkeley.EDU>2014-04-19 19:38:51 -0700
committerIsaac Wu <isaacwu@a5.Millennium.Berkeley.EDU>2014-04-19 19:38:51 -0700
commit2425e5b6f7a7aa7cfa1312a29c7bac81f6be318b (patch)
tree9cd9bbb3463dae481cdd32e8dd14f7dbf22fc172
parent83ed3f519de9929b6551b98677047228a8ab4d0c (diff)
downloadriscv-tests-2425e5b6f7a7aa7cfa1312a29c7bac81f6be318b.zip
riscv-tests-2425e5b6f7a7aa7cfa1312a29c7bac81f6be318b.tar.gz
riscv-tests-2425e5b6f7a7aa7cfa1312a29c7bac81f6be318b.tar.bz2
Added sdisorder to riscv-tests
-rw-r--r--benchmarks/Makefile2
-rw-r--r--benchmarks/sdisorder/bmark.mk30
-rw-r--r--benchmarks/sdisorder/sdisorder.c76
3 files changed, 108 insertions, 0 deletions
diff --git a/benchmarks/Makefile b/benchmarks/Makefile
index 241a933..f0531e8 100644
--- a/benchmarks/Makefile
+++ b/benchmarks/Makefile
@@ -26,6 +26,7 @@ bmarks = \
dhrystone \
spmv \
mt-vvadd \
+ sdisorder \
#vec-fft \
#mt-matmul \
#vec-vvadd \
@@ -43,6 +44,7 @@ bmarks_host = \
vec-vvadd \
vec-cmplxmult \
vec-matmul \
+ sdisorder \
#--------------------------------------------------------------------
# Build rules
diff --git a/benchmarks/sdisorder/bmark.mk b/benchmarks/sdisorder/bmark.mk
new file mode 100644
index 0000000..5f31f82
--- /dev/null
+++ b/benchmarks/sdisorder/bmark.mk
@@ -0,0 +1,30 @@
+#=======================================================================
+# UCB CS250 Makefile fragment for benchmarks
+#-----------------------------------------------------------------------
+#
+# Each benchmark directory should have its own fragment which
+# essentially lists what the source files are and how to link them
+# into an riscv and/or host executable. All variables should include
+# the benchmark name as a prefix so that they are unique.
+#
+
+sdisorder_c_src = \
+ sdisorder.c \
+ syscalls.c \
+
+sdisorder_riscv_src = \
+ crt.S \
+
+sdisorder_c_objs = $(patsubst %.c, %.o, $(sdisorder_c_src))
+sdisorder_riscv_objs = $(patsubst %.S, %.o, $(sdisorder_riscv_src))
+
+sdisorder_host_bin = sdisorder.host
+$(sdisorder_host_bin): $(sdisorder_c_src)
+ $(HOST_COMP) $^ -o $(sdisorder_host_bin)
+
+sdisorder_riscv_bin = sdisorder.riscv
+$(sdisorder_riscv_bin): $(sdisorder_c_objs) $(sdisorder_riscv_objs)
+ $(RISCV_LINK) $(sdisorder_c_objs) $(sdisorder_riscv_objs) -o $(sdisorder_riscv_bin) $(RISCV_LINK_OPTS)
+
+junk += $(sdisorder_c_objs) $(sdisorder_riscv_objs) \
+ $(sdisorder_host_bin) $(sdisorder_riscv_bin)
diff --git a/benchmarks/sdisorder/sdisorder.c b/benchmarks/sdisorder/sdisorder.c
new file mode 100644
index 0000000..8803312
--- /dev/null
+++ b/benchmarks/sdisorder/sdisorder.c
@@ -0,0 +1,76 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/time.h>
+
+
+#ifndef MLP
+ #define MLP 32
+#endif
+#ifndef STEP
+ #define STEP 64
+#endif
+
+
+void InitStream(int *a, int n) {
+ for (int i=0; i<n; i++)
+ a[i] = (i+STEP) % n;
+}
+
+// TODO: Verify this does the random shuffling well
+void ShuffleStream(int *a, int n) {
+ if (n>1) {
+ int i;
+ for (i = 0; i < n-1; i++) {
+ int j = i + rand() / (RAND_MAX / (n-i)+1);
+ int t = a[j];
+ a[j] = a[i];
+ a[i] = t;
+ }
+ }
+}
+
+
+void Chase(int *a, int n, int iterations) {
+ int loc[MLP];
+ for (int m=0; m<MLP; m++)
+ loc[m] = m * (n/MLP) + m;
+
+ for (int k=0; k<iterations; k++) {
+ for (int i=0; i<n/MLP; i++) {
+ for (int m=0; m<MLP; m++) {
+ loc[m] = a[loc[m]];
+ }
+ }
+ }
+ for (int m=0; m<MLP; m++) {
+ if (loc[m] < 0) {
+ //printf("woah\n");
+ }
+ }
+}
+
+
+void RandGenBench(int n) {
+ long total=0;
+ for (int i=0; i<n; i++) {
+ total += (rand() % 1) + 1;
+ }
+}
+
+
+
+int main(int argc, char* argv[]) {
+
+ int num_iters = 2;
+ int length = 1<<6;
+ int randomize = 1;
+
+ int stream[length];
+ InitStream(stream, length);
+
+ if (randomize) {
+ ShuffleStream(stream, length);
+ }
+ Chase(stream, length, num_iters);
+
+}