Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
new lua example (matrix multiplications )
[simgrid.git] / src / bindings / lua / mult_matrix.lua
1 function Sender(...) 
2
3         simgrid.info("Hello From Sender")
4         receiver = simgrid.Host.getByName(arg[1])
5         task_comp = arg[2]
6         task_comm = arg[3]
7         rec_alias = arg[4]
8         
9         size = 4
10         m1 = mkmatrix(size, size)
11         m2 = mkmatrix(size, size)       
12
13         if (#arg ~= 4) then
14             error("Argc should be 4");
15         end
16         simgrid.info("Argc="..(#arg).." (should be 4)")
17
18         -- Sending Task
19         task = simgrid.Task.new("matrix_task",task_comp,task_comm);
20         task['matrix_1'] = m1;
21         task['matrix_2'] = m2;
22         task['size'] = size;
23         simgrid.info("Sending "..simgrid.Task.name(task).." to "..simgrid.Host.name(receiver));
24         simgrid.Task.send(task,rec_alias);
25         simgrid.info("Done Sending "..simgrid.Task.name(task));
26
27         -- receiving the results
28
29         r_mailbox= "Sender"
30         task = simgrid.Task.recv(r_mailbox);
31         mm = res_task['matrix_res']
32         simgrid.info("Receiving the Multiplication result of my two matrix :");
33         mprint(size,size,mm);
34
35 end
36 ------------------------------------------------------
37
38 function Receiver(...)
39         
40         simgrid.info("Hello From Receiver")
41         sender = simgrid.Host.getByName(arg[1])
42         send_alias = arg[2]
43         simgrid.info("Sending to alias "..send_alias)
44         recv_alias = "Receiver";
45         simgrid.info("Receiving The Matrix...");
46         task = simgrid.Task.recv(recv_alias);
47         mm = mmult(task['size'],task['size'],task['matrix_1'],task['matrix_2']);
48         --mprint(task['size'],task['size'],mm)
49         task['matrix_res'] = mm;
50         simgrid.info("Calcul is done ... Sending the Result");
51         simgrid.Task.send(task,"Sender");
52         simgrid.info("Everything's Done ... see you!!");
53
54 end
55 -----------------------------------------------------
56
57 local n = tonumber((arg and arg[1]) or 1)
58
59
60
61 function mkmatrix(rows, cols)
62     local count = 1
63     local mx = {}
64     for i=0,(rows - 1) do
65     local row = {}
66     for j=0,(cols - 1) do
67         row[j] = count
68         count = count + 1
69     end
70     mx[i] = row
71     end
72     return(mx)
73 end
74
75 function mmult(rows, cols, m1, m2)
76     local m3 = {}
77     for i=0,(rows-1) do
78         m3[i] = {}
79         for j=0,(cols-1) do
80             local rowj = 0
81             for k=0,(cols-1) do
82                 rowj = rowj + m1[i][k] * m2[k][j]
83             end
84             m3[i][j] = rowj
85         end
86     end
87     return(m3)
88 end
89
90 function mprint(rows,cols,m)
91  for i=0,(cols-1)do
92         for j=0,(rows-1)do
93                 print (m[i][j])
94         end
95  end
96 end
97
98
99 --end
100 require "simgrid"
101 simgrid.platform("../ruby/quicksort_platform.xml")
102 simgrid.application("../ruby/quicksort_deployment.xml")
103 simgrid.run()
104 simgrid.info("Simulation's over.See you.")
105 simgrid.clean()
106
107