4 * Copyright 2006,2007 Martin Quinson, Malek Cherier
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the license (GNU LGPL) which comes with this package.
13 public class Master extends simgrid.msg.Process {
14 public void main(String[] args) throws JniException, NativeException {
20 Msg.info("argc="+args.length);
21 for (int i = 0; i<args.length; i++)
22 Msg.info("argv:"+args[i]);
24 if (args.length < 3) {
25 Msg.info("Master needs 3 arguments");
29 int numberOfTasks = Integer.valueOf(args[0]).intValue();
30 double taskComputeSize = Double.valueOf(args[1]).doubleValue();
31 double taskCommunicateSize = Double.valueOf(args[2]).doubleValue();
32 BasicTask[] todo = new BasicTask[numberOfTasks];
34 String taskName = null;
36 for (int i = 0; i < numberOfTasks; i++) {
37 todo[i] = new BasicTask("Task_" + i, taskComputeSize, taskCommunicateSize);
40 slaveCount = args.length - 3;
41 slaves = new Host[slaveCount];
43 for(int i = 3; i < args.length ; i++) {
45 slaves[i-3] = Host.getByName(args[i]);
47 catch(HostNotFoundException e) {
48 Msg.info("Unknown host " + args[i] + ". Stopping Now!");
54 Msg.info("Got "+ slaveCount + " slave(s) :");
56 for (int i = 0; i < slaveCount; i++)
57 Msg.info("\t"+slaves[i].getName());
59 Msg.info("Got "+ numberOfTasks + " task to process.");
61 Channel channel = new Channel(0);
63 for (int i = 0; i < numberOfTasks; i++) {
64 Msg.info("Sending \"" + todo[i].getName()+ "\" to \"" + slaves[i % slaveCount].getName() + "\"");
66 if((Host.currentHost()).equals(slaves[i % slaveCount]))
67 Msg.info("Hey ! It's me ! ");
69 channel.put(todo[i], slaves[i % slaveCount]);
72 Msg.info("Send completed");
74 Msg.info("All tasks have been dispatched. Let's tell everybody the computation is over.");
76 for (int i = 0; i < slaveCount; i++) {
77 BasicTask task = new BasicTask("finalize", 0, 0);
79 channel.put(task,slaves[i]);
82 Msg.info("Goodbye now!");