Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
new lua example (matrix multiplications )
authorcoldpeace <coldpeace@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 6 Apr 2010 15:57:29 +0000 (15:57 +0000)
committercoldpeace <coldpeace@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 6 Apr 2010 15:57:29 +0000 (15:57 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@7446 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/bindings/lua/mult_matrix.lua [new file with mode: 0644]

diff --git a/src/bindings/lua/mult_matrix.lua b/src/bindings/lua/mult_matrix.lua
new file mode 100644 (file)
index 0000000..77bd1db
--- /dev/null
@@ -0,0 +1,107 @@
+function Sender(...) 
+
+       simgrid.info("Hello From Sender")
+       receiver = simgrid.Host.getByName(arg[1])
+       task_comp = arg[2]
+       task_comm = arg[3]
+       rec_alias = arg[4]
+       
+       size = 4
+       m1 = mkmatrix(size, size)
+        m2 = mkmatrix(size, size)      
+
+       if (#arg ~= 4) then
+           error("Argc should be 4");
+       end
+       simgrid.info("Argc="..(#arg).." (should be 4)")
+
+       -- Sending Task
+       task = simgrid.Task.new("matrix_task",task_comp,task_comm);
+       task['matrix_1'] = m1;
+       task['matrix_2'] = m2;
+       task['size'] = size;
+       simgrid.info("Sending "..simgrid.Task.name(task).." to "..simgrid.Host.name(receiver));
+       simgrid.Task.send(task,rec_alias);
+       simgrid.info("Done Sending "..simgrid.Task.name(task));
+
+       -- receiving the results
+
+       r_mailbox= "Sender"
+       task = simgrid.Task.recv(r_mailbox);
+       mm = res_task['matrix_res']
+       simgrid.info("Receiving the Multiplication result of my two matrix :");
+       mprint(size,size,mm);
+
+end
+------------------------------------------------------
+
+function Receiver(...)
+       
+       simgrid.info("Hello From Receiver")
+       sender = simgrid.Host.getByName(arg[1])
+       send_alias = arg[2]
+       simgrid.info("Sending to alias "..send_alias)
+       recv_alias = "Receiver";
+       simgrid.info("Receiving The Matrix...");
+       task = simgrid.Task.recv(recv_alias);
+       mm = mmult(task['size'],task['size'],task['matrix_1'],task['matrix_2']);
+       --mprint(task['size'],task['size'],mm)
+       task['matrix_res'] = mm;
+       simgrid.info("Calcul is done ... Sending the Result");
+       simgrid.Task.send(task,"Sender");
+       simgrid.info("Everything's Done ... see you!!");
+
+end
+-----------------------------------------------------
+
+local n = tonumber((arg and arg[1]) or 1)
+
+
+
+function mkmatrix(rows, cols)
+    local count = 1
+    local mx = {}
+    for i=0,(rows - 1) do
+    local row = {}
+    for j=0,(cols - 1) do
+        row[j] = count
+        count = count + 1
+    end
+    mx[i] = row
+    end
+    return(mx)
+end
+
+function mmult(rows, cols, m1, m2)
+    local m3 = {}
+    for i=0,(rows-1) do
+        m3[i] = {}
+        for j=0,(cols-1) do
+            local rowj = 0
+            for k=0,(cols-1) do
+                rowj = rowj + m1[i][k] * m2[k][j]
+            end
+            m3[i][j] = rowj
+        end
+    end
+    return(m3)
+end
+
+function mprint(rows,cols,m)
+ for i=0,(cols-1)do
+       for j=0,(rows-1)do
+               print (m[i][j])
+       end
+ end
+end
+
+
+--end
+require "simgrid"
+simgrid.platform("../ruby/quicksort_platform.xml")
+simgrid.application("../ruby/quicksort_deployment.xml")
+simgrid.run()
+simgrid.info("Simulation's over.See you.")
+simgrid.clean()
+
+