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