Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
first working prototype of the lua bindings. Veeeeeery crude at this point
[simgrid.git] / src / bindings / lua / tasklua.lua
index ece8bb3..511f789 100644 (file)
@@ -1,12 +1,3 @@
-function getn(t)
-  if type(t.n) == "number" then return t.n end
-  local max=0
-  for i,_ in to do
-    if type(i) == "number" and i>max then max=i end
-  end
-  t.n = max
-  return max
-end
 
 --Master Function
 function master(...) 
@@ -15,54 +6,38 @@ print("Hello from lua, I'm the master")
 for i,v in ipairs(arg) do
     print("Got "..v)
 end
-t_tasks={}   --tasks table
-t_slaves={}  --slaves table
 
 nb_task = arg[1];
 comp_size = arg[2];
 comm_size = arg[3];
-
--- Let's Create the tasks to dispatch
-for i=1,nb_task do
-  t_tasks[i] = Task.new("Task "..i,comp_size,comm_size); --data set to NULL
-end
+slave_count = arg[4]
 
 
--- Process Organisation
+argc=#arg
+print("Argc="..argc.." (should be 4)")
 
-argc=getn(arg)
-print("Argc="..argc.." (should be 8)")
+-- Dispatch the tasks
 
-slave_count = getn(arg) -3;
-
-for i=4,argc do
-slv_name = arg[i];
-t_slaves[i - 3] = Host.new(slv_name);
--- do not do directly that : t_slaves[i - 4] = Host.new(argv[i]); 
+for i=1,nb_task do
+  tk = Msg.Task.new("Task "..i,comp_size,comm_size);
+  alias = "slave "..(i%slave_count);
+  print("Master sending  '" .. Msg.Task.name(tk) .."' To '" .. alias .."'");
+  Msg.Task.send(tk,alias); -- C user data set to NULL
+  print("Master done sending '".. Msg.Task.name(tk) .."' To '" .. alias .."'");
 end
 
-
-
-
--- Print List Of Tasks / Slaves
 --[[
-for  i=1,nb_task do
-todo = Task.name(t_tasks[i]);
-print(i % slave_count+1);
-slv = Host.name(t_slaves[i % slave_count+1]);
-print ( "Sending : " .. todo .. " To : " .. slv);
-end
-]]--
-
-
+Sending Finalize Message To Others
+--]]
 
-for i=1,nb_task do
-tk_name = Task.name(t_tasks[i]);
-ht_name = Host.name(t_slaves[i]);
-print("Sending  " .. tk_name .." To " .. ht_name);
-Task.send(t_task[i],"slave "..(i%slave_count));
-print("Sent");
+print("Master: All tasks have been dispatched. Let's tell everybody the computation is over.");
+for i=0,slave_count-1 do
+  alias = "slave "..i;
+  print("Master: sending finalize to "..alias);
+  Msg.Task.send(Msg.Task.new("finalize",0,0),alias);
 end
+print("Master: Everything's done.");
+
 
 end
 
@@ -72,24 +47,26 @@ function slave(...)
 my_mailbox="slave "..arg[1]
 print("Hello from lua, I'm a poor slave with mbox: "..my_mailbox)
 
+
 while true do
-  tk = Task.recv(my_mailbox);
-  print("Got something");
-  --testing res !!!!
-  tk_name = Task.name(tk)
+--  tk = Msg.Task.new("",0,0); --??
+--  Msg.Task.recv2(tk,my_mailbox);
+  tk = Msg.Task.recv(my_mailbox);
+  
+  tk_name = Msg.Task.name(tk)
 
   if (tk_name == "finalize") then
-    Task.destroy(tk);
-   end
+    print("Slave '" ..my_mailbox.."' got finalize msg");
+    break
+  end
 
-  print("Processing "..Task.name(tk))
-  Task.execute(tk);
+  print("Slave '" ..my_mailbox.."' processing "..Msg.Task.name(tk))
+  Msg.Task.execute(tk);
 
-  print(Task.name(tk) .. "Done")
-  Task.destroy(tk);
+  print("Slave '" ..my_mailbox.."': task "..Msg.Task.name(tk) .. " done")
 end -- while
 
-print("I'm Done . See You !!");
+print("Slave '" ..my_mailbox.."': I'm Done . See You !!");
 
 end -- function ----------------------------------------------------------
 --]]