aboutsummaryrefslogtreecommitdiffstats
path: root/test/mppa/mmult
diff options
context:
space:
mode:
authorCyril SIX <cyril.six@kalray.eu>2018-04-18 14:03:48 +0200
committerCyril SIX <cyril.six@kalray.eu>2018-04-18 14:03:48 +0200
commit511acb8102b26ec0460f1d3c7ce21a9941f095ff (patch)
treeff94b2d7e15db42e71b980d14319ad175806f09d /test/mppa/mmult
parenteb3fd167668695c33f776cbb381c7664c3ec1858 (diff)
downloadcompcert-kvx-511acb8102b26ec0460f1d3c7ce21a9941f095ff.tar.gz
compcert-kvx-511acb8102b26ec0460f1d3c7ce21a9941f095ff.zip
MPPA - added a Matrix Multiply test
Diffstat (limited to 'test/mppa/mmult')
-rw-r--r--test/mppa/mmult/Makefile77
-rw-r--r--test/mppa/mmult/mmult.c54
-rw-r--r--test/mppa/mmult/mmult.h9
3 files changed, 140 insertions, 0 deletions
diff --git a/test/mppa/mmult/Makefile b/test/mppa/mmult/Makefile
new file mode 100644
index 00000000..9cb5b9e7
--- /dev/null
+++ b/test/mppa/mmult/Makefile
@@ -0,0 +1,77 @@
+PRNG=../lib/prng.c
+
+ALL= mmult-test-x86 mmult-test-k1c\
+
+all: $(ALL)
+
+%-test-x86: %.c $(PRNG)
+ gcc -D__UNIT_TEST_$$(echo $(basename $<) | tr a-z A-Z)__ -O2 -std=c99 $^ -o $@
+
+%-test-k1c: %.c $(PRNG)
+ k1-gcc -D__UNIT_TEST_$$(echo $(basename $<) | tr a-z A-Z)__ -O2 -std=c99 $^ -o $@
+
+#test-x86: selection.c merge.c insertion.c test.c $(PRNG)
+# gcc -g -O2 -std=c99 $^ -o $@
+#
+#test-k1c: selection.c merge.c insertion.c test.c $(PRNG)
+# k1-gcc -g -O2 -std=c99 $^ -o $@
+#
+#%.s: %.c
+# ccomp -O2 -S $< -o $@
+#
+#test-ccomp: selection.s merge.s insertion.s test.s $(subst .c,.s,$(PRNG))
+# k1-gcc $^ -o $@
+
+.PHONY:
+unittest: unittest-x86 unittest-k1c
+
+#.PHONY:
+#check: check-x86 check-k1c
+
+#.PHONY:
+#compc-check: test-ccomp
+# @if ! k1-cluster -- ./$<; then\
+# >&2 echo "ERROR k1c: sort $< failed";\
+# else\
+# echo "k1c: Test sort $< succeeded";\
+# fi
+#
+#.PHONY:
+#check-x86: test-x86
+# @if ! ./$<; then\
+# >&2 echo "ERROR x86: $< failed";\
+# else\
+# echo "x86: Test $< succeeded";\
+# fi
+#
+#.PHONY:
+#check-k1c: test-k1c
+# @if ! k1-cluster -- ./$<; then\
+# >&2 echo "ERROR k1c: $< failed";\
+# else\
+# echo "k1c: Test $< succeeded";\
+# fi
+
+.PHONY:
+unittest-x86: mmult-test-x86
+ @for test in $^; do\
+ if ! ./$$test; then\
+ >&2 echo "ERROR x86: $$test failed";\
+ else\
+ echo "x86: Test $$test Succeeded";\
+ fi;\
+ done
+
+.PHONY:
+unittest-k1c: mmult-test-k1c
+ @for test in $^; do\
+ if ! k1-cluster -- ./$$test; then\
+ >&2 echo "ERROR k1c: $$test failed";\
+ else\
+ echo "k1c: Test $$test Succeeded";\
+ fi;\
+ done
+
+.PHONY:
+clean:
+ rm -f $(ALL)
diff --git a/test/mppa/mmult/mmult.c b/test/mppa/mmult/mmult.c
new file mode 100644
index 00000000..04ac4605
--- /dev/null
+++ b/test/mppa/mmult/mmult.c
@@ -0,0 +1,54 @@
+#include "../lib/types.h"
+#include "../lib/prng.h"
+
+#ifdef __UNIT_TEST_MMULT__
+#define SIZE 50
+#else
+#include "test.h"
+#endif
+
+void mmult_row(uint64_t C[][SIZE], uint64_t A[][SIZE], uint64_t B[][SIZE]){
+ for (int i = 0 ; i < SIZE ; i++)
+ for (int j = 0 ; j < SIZE ; j++)
+ C[i][j] = 0;
+
+ for (int i = 0 ; i < SIZE ; i++)
+ for (int j = 0 ; j < SIZE ; j++)
+ for (int k = 0 ; k < SIZE ; k++)
+ C[i][j] += A[i][k] * B[k][j];
+}
+
+void mmult_col(uint64_t C[][SIZE], uint64_t A[][SIZE], uint64_t B[][SIZE]){
+ for (int i = 0 ; i < SIZE ; i++)
+ for (int j = 0 ; j < SIZE ; j++)
+ C[i][j] = 0;
+
+ for (int k = 0 ; k < SIZE ; k++)
+ for (int i = 0 ; i < SIZE ; i++)
+ for (int j = 0 ; j < SIZE ; j++)
+ C[i][j] += A[i][k] * B[k][j];
+}
+
+#ifdef __UNIT_TEST_MMULT__
+static uint64_t C1[SIZE][SIZE], C2[SIZE][SIZE], A[SIZE][SIZE], B[SIZE][SIZE];
+
+int main(void){
+ srand(42);
+
+ for (int i = 0 ; i < SIZE ; i++)
+ for (int j = 0 ; j < SIZE ; j++){
+ A[i][j] = randlong();
+ B[i][j] = randlong();
+ }
+
+ mmult_row(C1, A, B);
+ mmult_col(C2, A, B);
+
+ for (int i = 0 ; i < SIZE ; i++)
+ for (int j = 0 ; j < SIZE ; j++)
+ if (C1[i][j] != C2[i][j])
+ return -1;
+
+ return 0;
+}
+#endif /* __UNIT_TEST_MMULT__ */
diff --git a/test/mppa/mmult/mmult.h b/test/mppa/mmult/mmult.h
new file mode 100644
index 00000000..50c04afd
--- /dev/null
+++ b/test/mppa/mmult/mmult.h
@@ -0,0 +1,9 @@
+#ifndef __MMULT_H__
+#define __MMULT_H__
+
+#include "../lib/types.h"
+
+void mmult_row(uint64_t *A, const uint64_t *B, const uint64_t *C);
+void mmult_column(uint64_t *A, const uint64_t *B, const uint64_t *C);
+
+#endif /* __MMULT_H__ */