X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b37127a6689ffbb75a19fa61f9cf0c2253960d4d..de7d161240f434a809ae7739fbb15a1db6ab86f2:/src/bindings/ruby/MasterSlave.rb diff --git a/src/bindings/ruby/MasterSlave.rb b/src/bindings/ruby/MasterSlave.rb index 419f513c73..7c1ca60a04 100644 --- a/src/bindings/ruby/MasterSlave.rb +++ b/src/bindings/ruby/MasterSlave.rb @@ -1,79 +1,86 @@ -require 'msg' -require 'RubyProcess' +# Debug it with this command: +# make -C ../.. && valgrind ruby MasterSlave.rb --log=ruby.thres:debug 2>&1 | less -def Master(*args) - - puts "Hey ..from Master"#info("Hey") - - slaves = Array.new() - +require 'simgrid' + +include MSG + +################################################# +# Class Master +################################################# + +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 - - puts "Args = " + size - for i in 0..size-1 - puts "argv :" + args[1] + 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]) - raise "Master needs 3 arguments" if size < 3 - - numberOfTask = args[0] #convert to int - taskComputeSize = args[1] #convert to double - taskCommunicationSize = args[2] #convert to double - slaveCount = args[3] #convert to int - - -# todo = Array.new(numberOfTask) - - #Creating & Sending Task - for i in 0..numberOfTask - - task = RbTask.new("Task_" + i.to_s, taskComputeSize , taskCommunicationSize ); - s_alias = "slave " + (i%slaveCount).to_s - puts "Master Sending "+ RbTask.name(task) + " to " + s_alias - RbTask.send(task,s_alias) - puts "Master Done Sending " +RbTask.name(task) + " to " + s_alias - - 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 - puts "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 - puts "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 - - puts "Master : Everything's Done" - - - + MSG::info("Master : Everything's Done") + end end +################################################# +# Class Slave +################################################# +class Slave < MSG::Process + + def main(args) + mailbox = "slave " + args[0] + for i in 0..args.size-1 + MSG::debug("args["+String(i)+"]="+args[i]) + end -def Slave(*args) - - puts "Hello From Slave" - s_mailbox = "slave" + args[0] - - while true - - task = RbTask.recieve(s_mailbox) - - task_name = RbTask.name(task) - - if ( task_name == "finalize" ) - puts "Slave" + s_mailbox + "got finalize msg" - break - end - - puts "Slave " + s_mailbox + "Processing" + RbTask.name(task) - RbTask.execute(task) - + task = MSG::Task.receive(mailbox) + if (task.name == "finalize") + break + end + task.execute + MSG::debug("Slave '" + mailbox + "' done executing task "+ task.name + ".") end - - puts "Slave " + s_mailbox + "I'm Done , See You !!" - - -end \ No newline at end of file + MSG::info("I'm done, see you") + end +end + +################################################# +# main chunck +################################################# + +if (ARGV.length == 2) + MSG.createEnvironment(ARGV[0]) + MSG.deployApplication(ARGV[1]) +else + MSG.createEnvironment("platform.xml") + MSG.deployApplication("deploy.xml") +end + +MSG.run +puts "Simulation time : " + MSG.getClock .to_s +MSG.exit