-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(...)
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
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 ----------------------------------------------------------
--]]