1 #include "Master.hpp"
\r
2 #include "BasicTask.hpp"
\r
3 #include "FinalizeTask.hpp"
\r
5 #include <HostNotFoundException.hpp>
\r
10 using namespace std;
\r
17 MSG_IMPLEMENT_DYNAMIC(Master, Process);
\r
19 int Master::main(int argc, char** argv)
\r
22 char buff[BUFFMAX + 1] = {0};
\r
24 double taskComputeSize;
\r
25 double taskCommunicateSize;
\r
29 cerr <<"Master needs 3 arguments" << endl;
\r
33 cout << "Hello I'm " << getName() << " on " << getHost().getName() << "!" << endl;
\r
36 Host* slaves = NULL;
\r
38 cout << "argc=" << argc << endl;
\r
40 for (int i = 0; i< argc; i++)
\r
41 cout << "argv:" << argv[i] << endl;
\r
43 sscanf(argv[0],"%d", &numberOfTasks);
\r
45 sscanf(argv[1],"%lg", &taskComputeSize);
\r
47 sscanf(argv[2],"%lg", &taskCommunicateSize);
\r
49 BasicTaskPtr* todo = new BasicTaskPtr[numberOfTasks];
\r
51 for (int i = 0; i < numberOfTasks; i++)
\r
53 sprintf(buff,"Task_%d",i);
\r
54 todo[i] = new BasicTask(buff, taskComputeSize, taskCommunicateSize);
\r
55 memset(buff, 0 , BUFFMAX + 1);
\r
58 slaveCount = argc - 3;
\r
59 slaves = new Host[slaveCount];
\r
61 for(int i = 3; i < argc ; i++)
\r
65 slaves[i-3] = Host::getByName(argv[i]);
\r
68 catch(HostNotFoundException e)
\r
70 cerr << e.toString() <<". Stopping Now!" << endl;
\r
75 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Got slave(s) :" << slaveCount << endl;
\r
77 for (int i = 0; i < slaveCount; i++)
\r
78 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "\t" << slaves[i].getName() << endl;
\r
80 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Got " << numberOfTasks << " task to process." << endl;
\r
82 for (int i = 0; i < numberOfTasks; i++)
\r
84 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Sending \"" << todo[i]->getName() << "\" to \"" << slaves[i % slaveCount].getName() << "\"" << endl;
\r
86 if(!strcmp(Host::currentHost().getName(), slaves[i % slaveCount].getName()))
\r
87 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Hey ! It's me ! ";
\r
89 slaves[i % slaveCount].put(channel, todo[i]);
\r
92 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Send completed" << endl;
\r
94 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "All tasks have been dispatched. Let's tell everybody the computation is over." << endl;
\r
96 for (int i = 0; i < slaveCount; i++)
\r
97 slaves[i].put(channel, new FinalizeTask());
\r
102 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Goodbye now!" << endl;
\r