2 #include "BasicTask.hpp"
3 #include "FinalizeTask.hpp"
5 #include <HostNotFoundException.hpp>
17 MSG_IMPLEMENT_DYNAMIC(Master, Process)
19 int Master::main(int argc, char** argv)
24 double taskComputeSize;
25 double taskCommunicateSize;
30 error("Master needs 3 arguments");
40 info( TEXT_("argc=") + TEXT_(argc));
42 for (int i = 0; i< argc; i++)
43 info(TEXT_("argv:") + TEXT_(argv[i]));
45 sscanf(argv[0],"%d", &numberOfTasks);
47 sscanf(argv[1],"%lg", &taskComputeSize);
49 sscanf(argv[2],"%lg", &taskCommunicateSize);
51 BasicTaskPtr* todo = new BasicTaskPtr[numberOfTasks];
53 for (int i = 0; i < numberOfTasks; i++)
54 todo[i] = new BasicTask((TEXT_("Task_") + TEXT_(i)), taskComputeSize, taskCommunicateSize);
56 slaveCount = argc - 3;
57 slaves = new Host[slaveCount];
59 for(int i = 3; i < argc ; i++)
63 slaves[i-3] = Host::getByName(argv[i]);
66 catch(HostNotFoundException e)
68 cerr << e.toString() <<". Stopping Now!" << endl;
73 info(TEXT_("Got slave(s) :") + TEXT_(slaveCount));
75 for (int i = 0; i < slaveCount; i++)
76 info(TEXT_("\t") + TEXT_(slaves[i].getName()));
78 info(TEXT_("Got ") + TEXT_(numberOfTasks) + TEXT_(" task to process."));
80 for (int i = 0; i < numberOfTasks; i++)
82 info(TEXT_("Sending \"") + TEXT_(todo[i]->getName()) + TEXT_("\" to \"") + TEXT_(slaves[i % slaveCount].getName()) + TEXT_("\""));
84 if(!strcmp(Host::currentHost().getName(), slaves[i % slaveCount].getName()))
85 info("Hey ! It's me ! ");
87 slaves[i % slaveCount].put(channel, todo[i]);
90 info("Send completed");
92 info("All tasks have been dispatched. Let's tell everybody the computation is over.");
94 for (int i = 0; i < slaveCount; i++)
95 slaves[i].put(channel, new FinalizeTask());
100 info("Goodbye now!");