From 511acb8102b26ec0460f1d3c7ce21a9941f095ff Mon Sep 17 00:00:00 2001 From: Cyril SIX Date: Wed, 18 Apr 2018 14:03:48 +0200 Subject: MPPA - added a Matrix Multiply test --- test/mppa/mmult/Makefile | 77 ++++++++++++++++++++++++++++++++++++++++++++++++ test/mppa/mmult/mmult.c | 54 +++++++++++++++++++++++++++++++++ test/mppa/mmult/mmult.h | 9 ++++++ 3 files changed, 140 insertions(+) create mode 100644 test/mppa/mmult/Makefile create mode 100644 test/mppa/mmult/mmult.c create mode 100644 test/mppa/mmult/mmult.h (limited to 'test/mppa') 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__ */ -- cgit