// 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 #include #include #include //-------------------------------------------------------------------------- // 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); }