Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Second try at lua. Still does not work: I get a 'attempt to yield across metamethod...
[simgrid.git] / src / bindings / lua / master_slave.lua
diff --git a/src/bindings/lua/master_slave.lua b/src/bindings/lua/master_slave.lua
new file mode 100644 (file)
index 0000000..25e2c84
--- /dev/null
@@ -0,0 +1,81 @@
+
+--Master Function
+function Master(...) 
+
+simgrid.info("Hello from lua, I'm the master")
+for i,v in ipairs(arg) do
+    simgrid.info("Got "..v)
+end
+
+nb_task = arg[1];
+comp_size = arg[2];
+comm_size = arg[3];
+slave_count = arg[4]
+
+
+simgrid.info("Argc="..(#arg).." (should be 4)")
+
+-- Dispatch the tasks
+
+for i=1,nb_task do
+  tk = simgrid.Task.new("Task "..i,comp_size,comm_size);
+  alias = "slave "..(i%slave_count);
+  simgrid.info("Master sending  '" .. simgrid.Task.name(tk) .."' To '" .. alias .."'");
+  simgrid.Task.send(tk,alias); -- C user data set to NULL
+  simgrid.info("Master done sending '".. simgrid.Task.name(tk) .."' To '" .. alias .."'");
+end
+
+-- Sending Finalize Message To Others
+
+simgrid.info("Master: All tasks have been dispatched. Let's tell everybody the computation is over.");
+for i=0,slave_count-1 do
+  alias = "slave "..i;
+  simgrid.info("Master: sending finalize to "..alias);
+  simgrid.Task.send(simgrid.Task.new("finalize",0,0),alias);
+end
+simgrid.info("Master: Everything's done.");
+
+
+end
+
+-- Slave Function ---------------------------------------------------------
+function Slave(...)
+
+my_mailbox="slave "..arg[1]
+simgrid.info("Hello from lua, I'm a poor slave with mbox: "..my_mailbox)
+
+
+while true do
+--  tk = simgrid.Task.new("",0,0); --??
+--  simgrid.Task.recv2(tk,my_mailbox);
+  tk = simgrid.Task.recv(my_mailbox);
+  
+  tk_name = simgrid.Task.name(tk)
+
+  if (tk_name == "finalize") then
+    simgrid.info("Slave '" ..my_mailbox.."' got finalize msg");
+    break
+  end
+
+  simgrid.info("Slave '" ..my_mailbox.."' processing "..simgrid.Task.name(tk))
+  simgrid.Task.execute(tk);
+
+  simgrid.info("Slave '" ..my_mailbox.."': task "..simgrid.Task.name(tk) .. " done")
+end -- while
+
+simgrid.info("Slave '" ..my_mailbox.."': I'm Done . See You !!");
+
+end -- function ----------------------------------------------------------
+--]]
+
+function doyield() 
+    coroutine.yield()
+end
+
+require "simgrid"
+
+simgrid.platform("../../../examples/msg/small_platform.xml")
+simgrid.application("../ruby/deploy.xml")
+simgrid.run()
+simgrid.info("Simulation's over. See you.")
+simgrid.clean()
\ No newline at end of file