Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
delete the process at the end of the main method
[simgrid.git] / examples / cxx / comm_time / Master.cxx
1 #include "Master.hpp"\r
2 #include "CommTimeTask.hpp"\r
3 #include "FinalizeTask.hpp"\r
4 #include <Host.hpp>\r
5 #include <HostNotFoundException.hpp>\r
6 #include <Msg.hpp>\r
7 \r
8 #include <iostream>\r
9 using namespace std;\r
10 \r
11 \r
12 #ifndef BUFFMAX\r
13 #define BUFFMAX 260\r
14 #endif\r
15 \r
16 MSG_IMPLEMENT_DYNAMIC(Master, Process);\r
17 \r
18 int Master::main(int argc, char** argv)\r
19 {\r
20         int channel = 0;\r
21         char buff[BUFFMAX + 1] = {0};\r
22         int numberOfTasks;              \r
23         double taskComputeSize;         \r
24         double taskCommunicateSize;\r
25 \r
26         if (argc < 3) \r
27         {\r
28                 cerr <<"Master needs 3 arguments" << endl;\r
29                 exit(1);\r
30         }\r
31         \r
32         cout << "Hello I'm " << getName() << " on " << getHost().getName() << "!" << endl;\r
33         \r
34         int slaveCount = 0;\r
35         Host* slaves = NULL;\r
36         \r
37         sscanf(argv[0],"%d", &numberOfTasks);\r
38         \r
39         sscanf(argv[1],"%lg", &taskComputeSize);\r
40         \r
41         sscanf(argv[2],"%lg", &taskCommunicateSize);\r
42         \r
43         \r
44         slaveCount = argc - 3;\r
45         slaves = new Host[slaveCount];\r
46         \r
47         for(int i = 3; i < argc ; i++)  \r
48         {\r
49                 try \r
50                 {\r
51                         slaves[i-3] = Host::getByName(argv[i]);\r
52                 }\r
53                 \r
54                 catch(HostNotFoundException e) \r
55                 {\r
56                         cerr << e.toString() <<". Stopping Now!" << endl;\r
57                         exit(1);\r
58                 }\r
59         }\r
60         \r
61         cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Got slave(s) :"  << slaveCount << endl;\r
62                         \r
63         for (int i = 0; i < slaveCount; i++)\r
64                 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "\t" << slaves[i].getName() << endl;\r
65         \r
66         cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Got " << numberOfTasks << " task to process." << endl;\r
67         \r
68         \r
69         for (int i = 0; i < numberOfTasks; i++) \r
70         {                       \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
76         }\r
77         \r
78         cout <<"[" << getName() << ":" << getHost().getName() << "] " << "All tasks have been dispatched. Let's tell everybody the computation is over." << endl;\r
79         \r
80         for (int i = 0; i < slaveCount; i++) \r
81         { \r
82                 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Finalize host " << slaves[i].getName() <<  " [" <<  i  << "]" << endl;\r
83                 slaves[i].put(0, new FinalizeTask());\r
84         }\r
85         \r
86         cout <<"[" << getName() << ":" << getHost().getName() << "] " << "All finalize messages have been dispatched. Goodbye now!" << endl;\r
87         \r
88 \r
89         delete[] slaves;\r
90         delete this;\r
91         return 0;\r
92 }