X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b3d9680ac65d8bdd8e267aed69fc32a5abab12d7..f101547f1541d1a3c30d05d97650221331452461:/src/bindings/ruby/MasterSlave.rb diff --git a/src/bindings/ruby/MasterSlave.rb b/src/bindings/ruby/MasterSlave.rb index 9b1cbe64ea..848fba2257 100644 --- a/src/bindings/ruby/MasterSlave.rb +++ b/src/bindings/ruby/MasterSlave.rb @@ -1,87 +1,73 @@ +# Debug it with this command: +# make -C ../.. && valgrind ruby MasterSlave.rb --log=ruby.thres:debug 2>&1 | less + require 'simgrid' + include MSG ################################################# # Class Master ################################################# -class Master < RbProcess - def initialize2() - super() - end - - - # msg_main : that function that will be executed when Running Simulation - def msg_main(args) # args is an array containing arguments for function master - info("Hello From Master") - size = args.size - info ("Number of Args for Master = " + size.to_s) +class Master < MSG::Process + # main : that function that will be executed when running simulation + + def main(args) # args is an array containing arguments for function master + size = args.size for i in 0..size-1 - info("args["+String(i)+"]="+args[i]) + MSG::info("args["+String(i)+"]="+args[i]) end - + raise "Master needs 3 arguments" if size < 3 numberOfTask = Integer(args[0]) taskComputeSize = Float(args[1]) taskCommunicationSize = Float(args[2]) slaveCount = Integer(args[3]) - #Creating & Sending Task - for i in 0..numberOfTask-1 - - - task = RbTask.new("Task_"+ i.to_s, taskComputeSize , taskCommunicationSize ); - s_alias = "slave>>" + (i%slaveCount).to_s - info("Master Sending "+ RbTask.name(task) + " to " + s_alias + " with Comput Size " + RbTask.compSize(task).to_s) - RbTask.send(task,s_alias) - info("Master Done Sending " +RbTask.name(task) + " to " + s_alias) -# sameTask = RbTask.receive(s_alias) -# puts "Master Receiving its Own Task" - end + # Creates and sends the tasks + for i in 0..numberOfTask-1 + task = MSG::Task.new("Task_"+ i.to_s, taskComputeSize , taskCommunicationSize); + mailbox = "slave " + (i%slaveCount).to_s + MSG::debug("Master Sending "+ task.name + " to " + mailbox + " with Comput Size " + + task.compSize.to_s) + task.send(mailbox) + MSG::debug("Master Done Sending " + task.name + " to " + mailbox) + end - # Sending Finalize Tasks - info ("Master: All tasks have been dispatched. Let's tell everybody the computation is over.") + # Sending Finalize MSG::Tasks + #MSG::info("Master: All "+numberOfTask+" tasks have been dispatched. Let's tell everybody the computation is over.") + MSG::info("Master: All tasks have been dispatched. Let's tell everybody the computation is over.") for i in 0..slaveCount-1 - s_alias = "slave " + i.to_s - info ("Master Sending Finalize to " + s_alias) - RbTask.send(RbTask.new("finalize",0,0),s_alias) + mailbox = "slave " + i.to_s + finalize_task = Task.new("finalize",0,0) + finalize_task.send(mailbox) end - info("Master : Everything's Done") + MSG::info("Master : Everything's Done") end end ################################################# # Class Slave ################################################# -class Slave < RbProcess - - def initialize() - super() - end - - # msg_main : that function that will be executed when Running Simulation - def msg_main(args) - info("Hello From Slave") - s_mailbox = "slave>>" + args[0] +class Slave < MSG::Process - while true - - info("Ready to Receive Task") - task = RbTask.receive(s_mailbox) - task_name = RbTask.name(task) - info ("Task Received : " + task.name) - if (task_name == "finalize") - info("Slave" + s_mailbox + "got finalize msg") - break - end - info("Slave " + s_mailbox + " ...Processing" + RbTask.name(task)) - RbTask.execute(task) + def main(args) + mailbox = "slave " + args[0] + for i in 0..args.size-1 + MSG::debug("args["+String(i)+"]="+args[i]) end - info("Slave " + s_mailbox + "I'm Done , See You !!") - end - - end + while true + task = MSG::Task.receive(mailbox) + if (task.name == "finalize") + break + end + task.execute + MSG::debug("Slave '" + mailbox + "' done executing task "+ task.name + ".") + end + MSG::info("I'm done, see you") + end +end ################################################# # main chunck @@ -93,10 +79,9 @@ if (ARGV.length == 2) else MSG.createEnvironment("platform.xml") MSG.deployApplication("deploy.xml") - Thread.list.each {|t| p t} + end -# Thread.list.each {|t| p t} -MSG.run() -MSG.getClock() -# exit() +MSG.run +puts "Simulation time : " + MSG.getClock .to_s +MSG.exit