Logo AND Algorithmique Numérique Distribuée

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