aboutsummaryrefslogtreecommitdiffstats
path: root/test/mppa/mmult/mmult.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/mppa/mmult/mmult.c')
-rw-r--r--test/mppa/mmult/mmult.c54
1 files changed, 54 insertions, 0 deletions
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__ */