Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
f095e0c3e1317b0f61a08448e68cf88edd073f00
[simgrid.git] / examples / lua / master_slave_bypass.lua
1 --Master Function
2 function Master(...) 
3
4 simgrid.info("Hello from lua, I'm the master")
5 for i,v in ipairs(arg) do
6     simgrid.info("Got "..v)
7 end
8
9 nb_task = arg[1];
10 comp_size = arg[2];
11 comm_size = arg[3];
12 slave_count = arg[4];
13
14 if (#arg ~= 4) then
15     error("Argc should be 4");
16 end
17 simgrid.info("Argc="..(#arg).." (should be 4)")
18
19 -- Dispatch the tasks
20
21 for i=1,nb_task do
22   tk = simgrid.Task.new("Task "..i,comp_size,comm_size);
23   alias = "slave "..(i%slave_count);
24   simgrid.info("Master sending  '" .. simgrid.Task.name(tk) .."' To '" .. alias .."'");
25   simgrid.Task.send(tk,alias); -- C user data set to NULL
26   simgrid.info("Master done sending '".. simgrid.Task.name(tk) .."' To '" .. alias .."'");
27 end
28
29 -- Sending Finalize Message To Others
30
31 simgrid.info("Master: All tasks have been dispatched. Let's tell everybody the computation is over.");
32 for i=0,slave_count-1 do
33   alias = "slave "..i;
34   simgrid.info("Master: sending finalize to "..alias);
35   finalize = simgrid.Task.new("finalize",comp_size,comm_size);
36   simgrid.Task.send(finalize,alias)
37 end
38   simgrid.info("Master: Everything's done.");
39 end
40
41 --end_of_master
42
43 -- Slave Function ---------------------------------------------------------
44 function Slave(...)
45
46 local my_mailbox="slave "..arg[1]
47 simgrid.info("Hello from lua, I'm a poor slave with mbox: "..my_mailbox)
48
49 while true do
50
51   local tk = simgrid.Task.recv(my_mailbox);
52   if (simgrid.Task.name(tk) == "finalize") then
53     simgrid.info("Slave '" ..my_mailbox.."' got finalize msg");
54     break
55   end
56   --local tk_name = simgrid.Task.name(tk) 
57   simgrid.info("Slave '" ..my_mailbox.."' processing "..simgrid.Task.name(tk))
58   simgrid.Task.execute(tk)
59   simgrid.info("Slave '" ..my_mailbox.."': task "..simgrid.Task.name(tk) .. " done")
60 end -- while
61
62 simgrid.info("Slave '" ..my_mailbox.."': I'm Done . See You !!");
63
64 end 
65 -- end_of_slave
66
67 -- Simulation Core ----------------------------------------------------------
68 --]]
69
70 require "simgrid"
71  
72   --create new routing model
73   --simgrid.AS.new(AS_id,AS_mode)
74   simgrid.AS.new{id="AS0",mode="Full"}; 
75   --simgrid.Host.new(host_id,power)
76   simgrid.AS.addHost{AS="AS0",id="Tremblay",power=98095000};
77   simgrid.AS.addHost{AS="AS0",id="Jupiter",power=76296000};
78   simgrid.AS.addHost{AS="AS0",id="Fafard",power=76296000};
79   simgrid.AS.addHost{AS="AS0",id="Ginette",power=48492000};
80   simgrid.AS.addHost{AS="AS0",id="Bourassa",power=48492000};
81
82     -- create Links
83   for i=10,0,-1 do
84     simgrid.AS.addLink{AS="AS0",id=i,bandwidth=252750+ i*768,latency=0.000270544+i*0.087};  
85   end
86   -- simgrid.Route.new(src_id,des_id,links_nb,links_list)
87    simgrid.AS.addRoute{AS="AS0",src="Tremblay",dest="Jupiter",links="1"};
88    simgrid.AS.addRoute{AS="AS0",src="Tremblay",dest="Fafard",links="0,1,2,3,4,8"};
89    simgrid.AS.addRoute{AS="AS0",src="Tremblay",dest="Ginette",links="3,4,5"};
90    simgrid.AS.addRoute{AS="AS0",src="Tremblay",dest="Bourassa",links="0,1,3,2,4,6,7"};
91
92    simgrid.AS.addRoute{AS="AS0",src="Jupiter",dest="Tremblay",links="1"};
93    simgrid.AS.addRoute{AS="AS0",src="Jupiter",dest="Fafard",links="0,1,2,3,4,8,9"};
94    simgrid.AS.addRoute{AS="AS0",src="Jupiter",dest="Ginette",links="3,4,5,9"};
95    simgrid.AS.addRoute{AS="AS0",src="Jupiter",dest="Bourassa",links="0,1,2,3,4,6,7,9"};
96  
97    simgrid.AS.addRoute{AS="AS0",src="Fafard",dest="Tremblay",links="0,1,2,3,4,8"};
98    simgrid.AS.addRoute{AS="AS0",src="Fafard",dest="Jupiter",links="0,1,2,3,4,8,9"};
99    simgrid.AS.addRoute{AS="AS0",src="Fafard",dest="Ginette",links="0,1,2,5,8"};
100    simgrid.AS.addRoute{AS="AS0",src="Fafard",dest="Bourassa",links="6,7,8"};
101   
102    simgrid.AS.addRoute{AS="AS0",src="Ginette",dest="Tremblay",links="3,4,5"};
103    simgrid.AS.addRoute{AS="AS0",src="Ginette",dest="Jupiter",links="3,4,5,9"};
104    simgrid.AS.addRoute{AS="AS0",src="Ginette",dest="Fafard",links="0,1,2,5,8"};
105    simgrid.AS.addRoute{AS="AS0",src="Ginette",dest="Bourassa",links="0,1,2,5,6,7"};
106
107    simgrid.AS.addRoute{AS="AS0",src="Bourassa",dest="Tremblay",links="0,1,3,2,4,6,7"};
108    simgrid.AS.addRoute{AS="AS0",src="Bourassa",dest="Jupiter",links="0,1,2,3,4,6,7,9"};
109    simgrid.AS.addRoute{AS="AS0",src="Bourassa",dest="Fafard",links="6,7,8"};
110    simgrid.AS.addRoute{AS="AS0",src="Bourassa",dest="Ginette",links="0,1,2,5,6,7"};
111   
112    --Save Platform
113    --simgrid.info("start registering platform");
114    simgrid.msg_register_platform();
115    --simgrid.info("platform registered");
116   
117   --Set Application
118    simgrid.Host.setFunction{host="Tremblay",fct="Master",args="20,550000000,1000000,4"};
119    simgrid.Host.setFunction{host="Bourassa",fct="Slave",args="0"};
120    simgrid.Host.setFunction{host="Jupiter",fct="Slave",args="1"};
121    simgrid.Host.setFunction{host="Fafard",fct="Slave",args="2"};
122    simgrid.Host.setFunction{host="Ginette",fct="Slave",args="3"};
123    
124   --Save Application 
125    simgrid.msg_register_application();
126
127   --Run The Application
128    simgrid.run()
129    simgrid.info("Simulation's over.See you.")
130    simgrid.clean()
131