Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
a026691e0f58c33b85b479b7b2b560717929a785
[simgrid.git] / examples / 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         -- Read The Result 
26         mm = task['matrix_res']
27         simgrid.info("Got the Multiplication result ...Bye");
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         recv_alias = "Receiver";
38         simgrid.info("Receiving Task from "..simgrid.Host.name(sender));
39         task = simgrid.Task.recv(recv_alias);
40         mm = mmult(task['size'],task['size'],task['matrix_1'],task['matrix_2']);
41         --mprint(task['size'],task['size'],mm)
42         task['matrix_res'] = mm;
43         simgrid.info("Calcul is done ... Bye");
44
45
46 end
47 -----------------------------------------------------
48
49 local n = tonumber((arg and arg[1]) or 1)
50
51
52
53 function mkmatrix(rows, cols)
54     local count = 1
55     local mx = {}
56     for i=0,(rows - 1) do
57     local row = {}
58     for j=0,(cols - 1) do
59         row[j] = count
60         count = count + 1
61     end
62     mx[i] = row
63     end
64     return(mx)
65 end
66
67 function mmult(rows, cols, m1, m2)
68     local m3 = {}
69     for i=0,(rows-1) do
70         m3[i] = {}
71         for j=0,(cols-1) do
72             local rowj = 0
73             for k=0,(cols-1) do
74                 rowj = rowj + m1[i][k] * m2[k][j]
75             end
76             m3[i][j] = rowj
77         end
78     end
79     return(m3)
80 end
81
82 function mprint(rows,cols,m)
83  for i=0,(cols-1)do
84         for j=0,(rows-1)do
85                 print (m[i][j])
86         end
87  end
88 end
89
90
91 --end
92 require "simgrid"
93 simgrid.platform("../ruby/quicksort_platform.xml")
94 simgrid.application("../ruby/quicksort_deployment.xml")
95 simgrid.run()
96 simgrid.info("Simulation's over.See you.")
97 simgrid.clean()
98
99