Logo AND Algorithmique Numérique Distribuée

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