// $Id: assoc-master.cc 504 2009-12-08 17:20:08Z cactus $ -*- c++ -*- #include #include "pvm3.h" #include #include #include "matrix.h" #include "assoc.h" int main (int argc, char** argv) { std::vector rgm; for (int im = 1; im <= 50; ++im) { Matrix m (5, 5); for (int i = 0; i < 5; ++i) m (i, i) = im; rgm.push_back (m); } // Create and register children int n = rgm.size (); std::vector rgtid (n); if (pvm_spawn ("assoc-worker", 0, 0, 0, n, &rgtid[0]) != n) { std::cerr << "spawn failed" << std::endl; return pvm_exit (); } for (int i = 0; i != n; ++i) { pvm_initsend (PvmDataDefault); pvm_pkint (&i, 1, 1); pvm_send (rgtid[i], MSG_ID); } pvm_initsend (PvmDataDefault); pvm_pack_rgi (rgtid); pvm_mcast (&rgtid[0], n, MSG_RGTID); // Send data for (int i = 0; i != n; ++i) { pvm_initsend (PvmDataDefault); rgm[i].pvm_pack (); pvm_send (rgtid[i], MSG_INPUT); } // Request results std::vector rgmResult; for (int i = 0; i != n; ++i) { pvm_recv (rgtid[i], MSG_RESULT); rgmResult.push_back (Matrix::pvm_unpack ()); } std::cout << "Finished." << std::endl; #if 1 // Print results for (int i = 0; i != n; ++i) { rgmResult[i].print (std::cout); std::cout << std::endl; } #endif return pvm_exit(); }