1 # Debug it with this command:
2 # make -C ../.. && valgrind ruby MasterSlave.rb --log=ruby.thres:debug 2>&1 | less
8 #################################################
10 #################################################
12 class Master < MSG::Process
13 # main : that function that will be executed when Running Simulation
15 def main(args) # args is an array containing arguments for function master
18 MSG::info("args["+String(i)+"]="+args[i])
21 raise "Master needs 3 arguments" if size < 3
22 numberOfTask = Integer(args[0])
23 taskComputeSize = Float(args[1])
24 taskCommunicationSize = Float(args[2])
25 slaveCount = Integer(args[3])
27 # Creates and sends the tasks
28 for i in 0..numberOfTask-1
29 task = MSG::Task.new("Task_"+ i.to_s, taskComputeSize , taskCommunicationSize);
30 mailbox = "slave " + (i%slaveCount).to_s
31 MSG::info("Master Sending "+ task.name + " to " + mailbox + " with Comput Size " +
33 # task.compSize.to_s) # FIXME: This version creates a deadlock. Interesting
35 MSG::info("Master Done Sending " + task.name + " to " + mailbox)
38 # Sending Finalize MSG::Tasks
39 MSG::info("Master: All tasks have been dispatched. Let's tell everybody the computation is over.")
40 for i in 0..slaveCount-1
41 mailbox = "slave " + i.to_s
42 MSG::info("Master Sending Finalize to " + mailbox)
43 finalize_task = Task.new("finalize",0,0)
44 finalize_task.send(mailbox)
46 MSG::info("Master : Everything's Done")
47 Thread.list.each {|t| p t}
51 #################################################
53 #################################################
54 class Slave < MSG::Process
57 mailbox = "slave " + args[0]
58 for i in 0..args.size-1
59 MSG::debug("args["+String(i)+"]="+args[i])
63 info("Ready to Receive Task")
64 task = MSG::Task.receive(mailbox)
65 MSG::info("Task Received : " + task.name)
66 if (task.name == "finalize")
67 MSG::info("Slave " + mailbox + " got finalize msg")
70 MSG::info("Slave " + mailbox + " ...Processing" + task.name)
72 MSG::info("task "+ task.name + " Executed !!")
74 MSG::info("Slave " + mailbox + "I'm Done , See You !!")
78 #################################################
80 #################################################
83 MSG.createEnvironment(ARGV[0])
84 MSG.deployApplication(ARGV[1])
86 MSG.createEnvironment("platform.xml")
87 MSG.deployApplication("deploy.xml")
88 #Thread.list.each {|t| p t}
92 Thread.list.each {|t| p t}
93 puts "Simulation time : " + MSG.getClock .to_s