349e47e0fb07bbf8af9aad8f105de7d34a37baba
[riscv-tests.git] / benchmarks / mt-matmul / mt-matmul.c
1 // See LICENSE for license details.
2
3 //**************************************************************************
4 // Multi-threaded Matrix Multiply benchmark
5 //--------------------------------------------------------------------------
6 // TA : Christopher Celio
7 // Student:
8 //
9 //
10 // This benchmark multiplies two 2-D arrays together and writes the results to
11 // a third vector. The input data (and reference data) should be generated
12 // using the matmul_gendata.pl perl script and dumped to a file named
13 // dataset.h.
14
15
16 // print out arrays, etc.
17 //#define DEBUG
18
19 //--------------------------------------------------------------------------
20 // Includes
21
22 #include <string.h>
23 #include <stdlib.h>
24 #include <stdio.h>
25 #include <stddef.h>
26
27
28 //--------------------------------------------------------------------------
29 // Input/Reference Data
30
31 #include "dataset.h"
32
33
34 //--------------------------------------------------------------------------
35 // Basic Utilities and Multi-thread Support
36
37 #include "util.h"
38
39
40 //--------------------------------------------------------------------------
41 // matmul function
42
43 extern void matmul(const size_t coreid, const size_t ncores, const size_t lda, const data_t A[], const data_t B[], data_t C[] );
44
45
46 //--------------------------------------------------------------------------
47 // Main
48 //
49 // all threads start executing thread_entry(). Use their "coreid" to
50 // differentiate between threads (each thread is running on a separate core).
51
52 void thread_entry(int cid, int nc)
53 {
54 static data_t results_data[ARRAY_SIZE];
55
56 stats(matmul(cid, nc, DIM_SIZE, input1_data, input2_data, results_data); barrier(nc), DIM_SIZE/DIM_SIZE/DIM_SIZE);
57
58 int res = verifyDouble(ARRAY_SIZE, results_data, verify_data);
59
60 #ifdef DEBUG
61 printArray("results:", ARRAY_SIZE, results_data);
62 printArray("verify :", ARRAY_SIZE, verify_data);
63 #endif
64
65 exit(res);
66 }