Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
"new ruby host method"
[simgrid.git] / src / bindings / lua / master_slave.lua
1
2 --Master Function
3 function Master(...) 
4
5 simgrid.info("Hello from lua, I'm the master")
6 for i,v in ipairs(arg) do
7     simgrid.info("Got "..v)
8 end
9
10 nb_task = arg[1];
11 comp_size = arg[2];
12 comm_size = arg[3];
13 slave_count = arg[4]
14
15 if (#arg ~= 4) then
16     error("Argc should be 4");
17 end
18 simgrid.info("Argc="..(#arg).." (should be 4)")
19
20 -- Dispatch the tasks
21
22 for i=1,nb_task do
23   tk = simgrid.Task.new("Task "..i,comp_size,comm_size);
24   alias = "slave "..(i%slave_count);
25   simgrid.info("Master sending  '" .. simgrid.Task.name(tk) .."' To '" .. alias .."'");
26   simgrid.Task.send(tk,alias); -- C user data set to NULL
27   simgrid.info("Master done sending '".. simgrid.Task.name(tk) .."' To '" .. alias .."'");
28 end
29
30 -- Sending Finalize Message To Others
31
32 simgrid.info("Master: All tasks have been dispatched. Let's tell everybody the computation is over.");
33 for i=0,slave_count-1 do
34   alias = "slave "..i;
35   simgrid.info("Master: sending finalize to "..alias);
36   simgrid.Task.send(simgrid.Task.new("finalize",0,0),alias);
37 end
38 simgrid.info("Master: Everything's done.");
39
40
41 end
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
50 while true do
51 --  tk = simgrid.Task.new("",0,0); --??
52 --  simgrid.Task.recv2(tk,my_mailbox);
53   local tk = simgrid.Task.recv(my_mailbox);
54   
55   local tk_name = simgrid.Task.name(tk)
56
57   if (tk_name == "finalize") then
58     simgrid.info("Slave '" ..my_mailbox.."' got finalize msg");
59     break
60   end
61
62   simgrid.info("Slave '" ..my_mailbox.."' processing "..simgrid.Task.name(tk))
63   simgrid.Task.execute(tk);
64
65   simgrid.info("Slave '" ..my_mailbox.."': task "..simgrid.Task.name(tk) .. " done")
66 end -- while
67
68 simgrid.info("Slave '" ..my_mailbox.."': I'm Done . See You !!");
69
70 end -- function ----------------------------------------------------------
71 --]]
72
73 function doyield() 
74     coroutine.yield()
75 end
76
77 require "simgrid"
78
79 simgrid.platform("../../../examples/msg/small_platform.xml")
80 simgrid.application("../ruby/deploy.xml")
81 simgrid.run()
82 simgrid.info("Simulation's over. See you.")
83 simgrid.clean()