1 #include "Master.hpp"
\r
2 #include "CommTimeTask.hpp"
\r
3 #include "FinalizeTask.hpp"
\r
5 #include <HostNotFoundException.hpp>
\r
16 MSG_IMPLEMENT_DYNAMIC(Master, Process);
\r
18 int Master::main(int argc, char** argv)
\r
21 char buff[BUFFMAX + 1] = {0};
\r
23 double taskComputeSize;
\r
24 double taskCommunicateSize;
\r
28 cerr <<"Master needs 3 arguments" << endl;
\r
32 cout << "Hello I'm " << getName() << " on " << getHost().getName() << "!" << endl;
\r
35 Host* slaves = NULL;
\r
37 sscanf(argv[0],"%d", &numberOfTasks);
\r
39 sscanf(argv[1],"%lg", &taskComputeSize);
\r
41 sscanf(argv[2],"%lg", &taskCommunicateSize);
\r
44 slaveCount = argc - 3;
\r
45 slaves = new Host[slaveCount];
\r
47 for(int i = 3; i < argc ; i++)
\r
51 slaves[i-3] = Host::getByName(argv[i]);
\r
54 catch(HostNotFoundException e)
\r
56 cerr << e.toString() <<". Stopping Now!" << endl;
\r
61 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Got slave(s) :" << slaveCount << endl;
\r
63 for (int i = 0; i < slaveCount; i++)
\r
64 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "\t" << slaves[i].getName() << endl;
\r
66 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Got " << numberOfTasks << " task to process." << endl;
\r
69 for (int i = 0; i < numberOfTasks; i++)
\r
71 sprintf(buff,"Task_%d",i);
\r
72 CommTimeTask* task = new CommTimeTask(buff, taskComputeSize, taskCommunicateSize);
\r
73 task->setTime(getClock());
\r
74 slaves[i % slaveCount].put(0, task);
\r
75 memset(buff, 0 , BUFFMAX + 1);
\r
78 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "All tasks have been dispatched. Let's tell everybody the computation is over." << endl;
\r
80 for (int i = 0; i < slaveCount; i++)
\r
82 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Finalize host " << slaves[i].getName() << " [" << i << "]" << endl;
\r
83 slaves[i].put(0, new FinalizeTask());
\r
86 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "All finalize messages have been dispatched. Goodbye now!" << endl;
\r