Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Do not request status if not requested by caller.
[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         mm = task['matrix_res']
27         simgrid.info("Receiving the Multiplication result of my two matrix :");
28         mprint(size,size,mm);
29
30 end
31 ------------------------------------------------------
32 function Receiver(...)
33         
34         simgrid.info("Hello From Receiver")
35         sender = simgrid.Host.getByName(arg[1])
36         send_alias = arg[2]
37         simgrid.info("Sending to alias "..send_alias)
38         recv_alias = "Receiver";
39         simgrid.info("Receiving The Matrix...");
40         task = simgrid.Task.recv(recv_alias);
41         mm = mmult(task['size'],task['size'],task['matrix_1'],task['matrix_2']);
42         --mprint(task['size'],task['size'],mm)
43         task['matrix_res'] = mm;
44         simgrid.info("Calcul is done ... Bye");
45
46
47 end
48 -----------------------------------------------------
49
50 local n = tonumber((arg and arg[1]) or 1)
51
52
53
54 function mkmatrix(rows, cols)
55     local count = 1
56     local mx = {}
57     for i=0,(rows - 1) do
58     local row = {}
59     for j=0,(cols - 1) do
60         row[j] = count
61         count = count + 1
62     end
63     mx[i] = row
64     end
65     return(mx)
66 end
67
68 function mmult(rows, cols, m1, m2)
69     local m3 = {}
70     for i=0,(rows-1) do
71         m3[i] = {}
72         for j=0,(cols-1) do
73             local rowj = 0
74             for k=0,(cols-1) do
75                 rowj = rowj + m1[i][k] * m2[k][j]
76             end
77             m3[i][j] = rowj
78         end
79     end
80     return(m3)
81 end
82
83 function mprint(rows,cols,m)
84  for i=0,(cols-1)do
85         for j=0,(rows-1)do
86                 print (m[i][j])
87         end
88  end
89 end
90
91
92 --end
93 require "simgrid"
94 simgrid.platform("../ruby/quicksort_platform.xml")
95 simgrid.application("../ruby/quicksort_deployment.xml")
96 simgrid.run()
97 simgrid.info("Simulation's over.See you.")
98 simgrid.clean()
99
100