2
//@+node:gcross.20081204190733.4:@thin matmulspeed.C
5
#include "matmulspeed.h"
6
#include "matrix_multiplication.h"
8
matmulspeed::matmulspeed(CkArgMsg *m) {
9
CProxy_matmulspeed self(thishandle);
13
void doTest(int I, int J, int K) {
14
typedef Array<double,2> Matrix;
16
CProxy_MatrixMultiplier<double> multiplier = CProxy_MatrixMultiplier<double>::ckNew(I,J,K);
17
CkGroupID mCastGrpId = CProxy_CkMulticastMgr::ckNew();
18
Array<CProxySection_MatrixMultiplier<double>,2> A_section_matrix(I,J), B_section_matrix(J,K), C_section_matrix(I,K);
19
MatrixMultiplier<double>::build_section_matrices(
27
Array<CkCallback,2> C_callback_matrix(I,K);
28
MatrixMultiplier<double>::build_thread_delay_callback_matrix(mCastGrpId,C_section_matrix,C_callback_matrix);
33
Matrix C_data(23,13), correct_C_data(23,13);
35
cout << "Loading matrix A..." << endl;
37
//@+node:gcross.20081204190733.12:<< A data >>
38
//@-node:gcross.20081204190733.12:<< A data >>
40
cout << "Loading matrix B..." << endl;
42
//@+node:gcross.20081204190733.13:<< B data >>
43
//@-node:gcross.20081204190733.13:<< B data >>
45
cout << "Loading matrix C..." << endl;
47
//@+node:gcross.20081204190733.14:<< C data >>
48
//@-node:gcross.20081204190733.14:<< C data >>
51
MatrixMultiplier<double>::broadcast_A_data(0,A_section_matrix,A_data);
52
MatrixMultiplier<double>::broadcast_B_data(0,B_section_matrix,B_data);
53
MatrixMultiplier<double>::gather_results(C_callback_matrix,C_data);
54
assert(sum(abs(C_data-correct_C_data))<1e-8);
55
cout << "They agree!" << endl;
58
multiplier.ckDestroy();
63
void matmulspeed::runTest() {
65
clock_t timestamp = clock();
67
cout << (clock()-timestamp) << endl;
69
CkExitAfterQuiescence();
73
#include "matmulspeed.def.h"
75
//@-node:gcross.20081204190733.4:@thin matmulspeed.C