Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[Lua] Ported multi_matrix code to Lua 5.3
[simgrid.git] / examples / lua / multi_matrix / receiver.lua
1 -- Copyright (c) 2011, 2014. The SimGrid Team.
2 -- All rights reserved.
3
4 -- This program is free software; you can redistribute it and/or modify it
5 -- under the terms of the license (GNU LGPL) which comes with this package.
6
7 function Receiver(...)
8
9   simgrid.info("Hello From Receiver")
10   local sender = simgrid.host.get_by_name(select(1, ...))
11   local send_alias = select(2, ...)
12   local recv_alias = "Receiver"
13   simgrid.info("Receiving Task from " .. simgrid.host.name(sender))
14   local task = simgrid.task.recv(recv_alias)
15   local mm = mmult(task['size'], task['size'], task['matrix_1'], task['matrix_2'])
16   --mprint(task['size'], task['size'], mm)
17   task['matrix_res'] = mm
18   simgrid.info("Calcul is done ... Bye")
19 end
20
21 local n = tonumber((arg and arg[1]) or 1)
22 function mkmatrix(rows, cols)
23   local count = 1
24   local mx = {}
25   for i = 0, (rows - 1) do
26     local row = {}
27     for j = 0, (cols - 1) do
28       row[j] = count
29       count = count + 1
30     end
31     mx[i] = row
32   end
33   return mx
34 end
35
36 function mmult(rows, cols, m1, m2)
37   local m3 = {}
38   for i = 0, (rows - 1) do
39     m3[i] = {}
40     for j = 0, (cols - 1) do
41       local rowj = 0
42       for k = 0, (cols - 1) do
43         rowj = rowj + m1[i][k] * m2[k][j]
44       end
45       m3[i][j] = rowj
46     end
47   end
48   return m3
49 end
50
51 function mprint(rows, cols, m)
52   for i = 0, (cols - 1) do
53     for j = 0, (rows - 1 )do
54       print(m[i][j])
55     end
56   end
57 end
58