Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Examples of CPP versions of Msg
[simgrid.git] / examples / cxx / autoDestination / Master.cxx
1 #include "Master.hpp"\r
2 #include "BasicTask.hpp"\r
3 #include "FinalizeTask.hpp"\r
4 \r
5 #include <Host.hpp>\r
6 #include <HostNotFoundException.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         char buff[BUFFMAX + 1] = {0};\r
21         int taskCount;          \r
22         double taskComputeSize;         \r
23         double taskCommunicateSize;\r
24         \r
25         cout << "Hello I'm " << getName() << " on " << getHost().getName() << "!" << endl;\r
26                 \r
27                 \r
28         cout <<"[" << getName() << ":" << getHost().getName() << "] " << "argc=" << argc << endl;\r
29                 \r
30         for (int i = 0; i< argc; i++)       \r
31                 cout << "argv:" << argv[i] << endl;\r
32         \r
33         sscanf(argv[0],"%d", &taskCount);\r
34         \r
35         sscanf(argv[1],"%lg", &taskComputeSize);\r
36         \r
37         sscanf(argv[2],"%lg", &taskCommunicateSize);\r
38         \r
39         BasicTaskPtr* basicTasks = new BasicTaskPtr[taskCount];\r
40                 \r
41         for (int i = 0; i < taskCount; i++) \r
42         {\r
43                 sprintf(buff,"Task_%d",i);\r
44                 basicTasks[i] = new BasicTask(buff, taskComputeSize, taskCommunicateSize);\r
45                 memset(buff, 0 , BUFFMAX + 1); \r
46         }               \r
47         \r
48         int aliasCount = argc - 3;\r
49         \r
50                 \r
51         char** aliases = (char**) calloc(aliasCount, sizeof(char*));\r
52                 \r
53         for(int i = 3; i < argc ; i++) \r
54                 aliases[i - 3] = _strdup(argv[i]);\r
55                 \r
56         cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Got "<<  aliasCount << " alias(es) :" << endl;\r
57                 \r
58         for (int i = 0; i < aliasCount; i++)\r
59                 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "\t" << aliases[i] << endl;\r
60                 \r
61         cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Got "<< taskCount << " task to process." << endl;\r
62                 \r
63         for (int i = 0; i < taskCount; i++) \r
64         {       \r
65                 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Sending \"" << basicTasks[i]->getName() << "\" to \"" << aliases[i % aliasCount] << "\"" << endl;\r
66                 \r
67                 /*if((Host::currentHost().getName()).equals((aliases[i % aliasCount].split(":"))[0]))\r
68                         cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Hey ! It's me ! ";\r
69                 */\r
70                         \r
71                 basicTasks[i]->send(aliases[i % aliasCount]);\r
72         }\r
73                 \r
74         cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Send completed" << endl;\r
75         \r
76         cout <<"[" << getName() << ":" << getHost().getName() << "] " << "All tasks have been dispatched. Let's tell everybody the computation is over." << endl;\r
77         \r
78         FinalizeTask* finalizeTask;\r
79         \r
80         for (int i = 0; i < aliasCount; i++) \r
81         {\r
82                 finalizeTask = new FinalizeTask();\r
83                 finalizeTask->send(aliases[i]);\r
84                 \r
85         }\r
86         \r
87         cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Goodbye now!" << endl;\r
88 \r
89         delete[] basicTasks;\r
90         delete[] aliases;\r
91 \r
92         return 0;\r
93 }