From: coldpeace Date: Tue, 6 Apr 2010 15:57:29 +0000 (+0000) Subject: new lua example (matrix multiplications ) X-Git-Tag: SVN~294 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/5d044da76b1ce66d68ed91b6ec1dee15c95aefb3?ds=sidebyside new lua example (matrix multiplications ) git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@7446 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- diff --git a/src/bindings/lua/mult_matrix.lua b/src/bindings/lua/mult_matrix.lua new file mode 100644 index 0000000000..77bd1db4cb --- /dev/null +++ b/src/bindings/lua/mult_matrix.lua @@ -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() + +