1 #include "Master.hpp"
\r
2 #include "BasicTask.hpp"
\r
3 #include "FinalizeTask.hpp"
\r
6 #include <HostNotFoundException.hpp>
\r
16 MSG_IMPLEMENT_DYNAMIC(Master, Process);
\r
18 int Master::main(int argc, char** argv)
\r
20 char buff[BUFFMAX + 1] = {0};
\r
22 double taskComputeSize;
\r
23 double taskCommunicateSize;
\r
25 cout << "Hello I'm " << getName() << " on " << getHost().getName() << "!" << endl;
\r
27 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "argc=" << argc << endl;
\r
29 for (int i = 0; i< argc; i++)
\r
30 cout << "argv:" << argv[i] << endl;
\r
32 sscanf(argv[0],"%d", &taskCount);
\r
33 sscanf(argv[1],"%lg", &taskComputeSize);
\r
34 sscanf(argv[2],"%lg", &taskCommunicateSize);
\r
36 BasicTaskPtr* basicTasks = new BasicTaskPtr[taskCount];
\r
38 for (int i = 0; i < taskCount; i++)
\r
40 sprintf(buff,"Task_%d",i);
\r
41 basicTasks[i] = new BasicTask(buff, taskComputeSize, taskCommunicateSize);
\r
42 memset(buff, 0 , BUFFMAX + 1);
\r
45 int aliasCount = argc - 3;
\r
47 char** aliases = (char**) calloc(aliasCount, sizeof(char*));
\r
49 for(int i = 3; i < argc ; i++)
\r
50 aliases[i - 3] = _strdup(argv[i]);
\r
52 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Got "<< aliasCount << " alias(es) :" << endl;
\r
54 for (int i = 0; i < aliasCount; i++)
\r
55 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "\t" << aliases[i] << endl;
\r
57 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Got "<< taskCount << " task to process." << endl;
\r
59 for (int i = 0; i < taskCount; i++)
\r
61 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Sending \"" << basicTasks[i]->getName() << "\" to \"" << aliases[i % aliasCount] << "\"" << endl;
\r
63 /*if((Host::currentHost().getName()).equals((aliases[i % aliasCount].split(":"))[0]))
\r
64 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Hey ! It's me ! ";
\r
67 basicTasks[i]->send(aliases[i % aliasCount]);
\r
70 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Send completed" << endl;
\r
72 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "All tasks have been dispatched. Let's tell everybody the computation is over." << endl;
\r
74 FinalizeTask* finalizeTask;
\r
76 for (int i = 0; i < aliasCount; i++)
\r
78 finalizeTask = new FinalizeTask();
\r
79 finalizeTask->send(aliases[i]);
\r
83 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Goodbye now!" << endl;
\r
85 delete[] basicTasks;
\r