Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
cd83fe6b7516d848b94b012d1903f5cecdf95a53
[simgrid.git] / examples / cxx / explicitDestination / 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 <Msg.hpp>\r
9 \r
10 MSG_IMPLEMENT_DYNAMIC(Master, Process);\r
11 \r
12 int Master::main(int argc, char** argv)\r
13 {\r
14         int taskCount;          \r
15         double taskComputeSize;         \r
16         double taskCommunicateSize;\r
17         \r
18         info("Hello");\r
19                 \r
20                 \r
21         info(TEXT_("argc=") + TEXT_(argc));\r
22                 \r
23         for (int i = 0; i< argc; i++)       \r
24                 info(TEXT_("argv:") + TEXT_(argv[i]));\r
25         \r
26         sscanf(argv[0],"%d", &taskCount);\r
27         \r
28         sscanf(argv[1],"%lg", &taskComputeSize);\r
29         \r
30         sscanf(argv[2],"%lg", &taskCommunicateSize);\r
31         \r
32         BasicTaskPtr* basicTasks = new BasicTaskPtr[taskCount];\r
33                 \r
34         for (int i = 0; i < taskCount; i++) \r
35                 basicTasks[i] = new BasicTask(TEXT_("Task_") + TEXT_(i), taskComputeSize, taskCommunicateSize);         \r
36         \r
37         int aliasCount = argc - 3;\r
38         \r
39         char** aliases = (char**) calloc(aliasCount, sizeof(char*));\r
40                 \r
41         for(int i = 3; i < argc ; i++) \r
42                 aliases[i - 3] = _strdup(argv[i]);\r
43                 \r
44         info(TEXT_("Got ") + TEXT_(aliasCount) + TEXT_(" alias(es) :"));\r
45                 \r
46         for (int i = 0; i < aliasCount; i++)\r
47                 info(TEXT_("\t") + TEXT_(aliases[i]));\r
48                 \r
49         info(TEXT_("Got ") + TEXT_(taskCount) + TEXT_(" task to process."));\r
50                 \r
51         for (int i = 0; i < taskCount; i++) \r
52         {       \r
53                 info(TEXT_("Sending \"") + TEXT_(basicTasks[i]->getName()) + TEXT_("\" to \"") + TEXT_(aliases[i % aliasCount]) + TEXT_("\""));\r
54 \r
55                 \r
56                 /*if((Host::currentHost().getName()).equals((aliases[i % aliasCount].split(":"))[0]))\r
57                         info("Hey ! It's me ! ");\r
58                 */\r
59                         \r
60                 basicTasks[i]->send(aliases[i % aliasCount]);\r
61         }\r
62                 \r
63         info("Send completed");\r
64         \r
65         info("All tasks have been dispatched. Let's tell everybody the computation is over.");\r
66         \r
67         FinalizeTask* finalizeTask;\r
68         \r
69         for (int i = 0; i < aliasCount; i++) \r
70         {\r
71                 finalizeTask = new FinalizeTask();\r
72                 finalizeTask->send(aliases[i]);\r
73                 \r
74         }\r
75         \r
76         info("Goodbye now!");\r
77 \r
78         delete[] basicTasks;\r
79         delete[] aliases;\r
80 \r
81         delete this;\r
82 \r
83         return 0;\r
84 }