Changeset 6388 for branches/MPI/HeuristicLab.ExtLibs/HeuristicLab.MPInet/MPIAlgorithmRunner/3.3/Program.cs
- Timestamp:
- 06/08/11 11:07:33 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/MPI/HeuristicLab.ExtLibs/HeuristicLab.MPInet/MPIAlgorithmRunner/3.3/Program.cs
r6354 r6388 29 29 using HeuristicLab.Operators.MPISupport; 30 30 using HeuristicLab.Core; 31 using Microsoft.Hpc.Scheduler; 32 using System.ServiceModel; 33 using System.Net; 31 34 32 35 namespace HeuristicLab.MPIAlgorithmRunner { … … 34 37 EventWaitHandle waitHandle = new EventWaitHandle(false, EventResetMode.ManualReset); 35 38 39 private static void SetJobStatus(string address) { 40 Console.WriteLine("Started service... at " + address); 41 42 // Discover the job's context from the environment 43 String headNodeName = System.Environment.GetEnvironmentVariable("CCP_CLUSTER_NAME"); 44 int jobId = System.Convert.ToInt32(System.Environment.GetEnvironmentVariable("CCP_JOBID")); 45 46 // Connect to the head node and get the job 47 IScheduler scheduler = new Scheduler(); 48 scheduler.Connect(headNodeName); 49 ISchedulerJob job = scheduler.OpenJob(jobId); 50 51 job.SetCustomProperty("address", address); 52 53 job.Commit(); 54 } 55 56 private static string GetAddress(ServiceHost service) { 57 IPHostEntry IPHost = Dns.GetHostByName(Dns.GetHostName()); 58 string address = "net.tcp://" + IPHost.AddressList[0].ToString() + ":" + service.ChannelDispatchers[0].Listener.Uri.Port + "/AlgorithmBroker"; 59 60 return address; 61 } 62 36 63 static void Main(string[] args) { 37 if (args.Length != 3) { 38 Console.WriteLine("Args:" + args.Length); 64 using (new MPI.Environment(ref args)) { 65 int clients = MPI.Communicator.world.Group.Size; 66 int updateInterval = 5000; 39 67 40 throw new ArgumentException("You must provide 3 arguments - the algorithm file, the result file and the update interval (in ms)");41 }42 43 string fileName = args[0];44 string resultName = args[1];45 int updateInterval = int.Parse(args[2]);46 47 using (new MPI.Environment(ref args)) {48 68 MPI.Communicator communicator = MPI.Communicator.world.Clone() as MPI.Communicator; 49 69 50 70 if (communicator.Rank == 0) { 51 IAlgorithm alg = XmlParser.Deserialize<IAlgorithm>(fileName);52 MPITransportWrapper<IAlgorithm> transport = new MPITransportWrapper<IAlgorithm>(alg);71 ServiceHost service = AlgorithmBroker.StartService(communicator); 72 AlgorithmBroker broker = (service.SingletonInstance as AlgorithmBroker); 53 73 54 int clients = communicator.Size - 1; 55 Console.WriteLine("Sending alg to " + clients + " clients"); 56 for (int i = 0; i < clients; i++) { 57 int client = i + 1; 58 communicator.Send(transport, client, 0); 59 } 74 string address = GetAddress(service); 75 SetJobStatus(address); 60 76 61 77 ItemList<ResultCollection> results = new ItemList<ResultCollection>(); … … 87 103 88 104 Console.WriteLine("Update results"); 89 lock (resultName) { 90 XmlGenerator.Serialize(results, resultName); 91 } 105 broker.Results = results; 92 106 } 93 107 108 lock (broker.ExitWaitHandle) { 109 broker.Terminated = true; 110 } 111 112 broker.ExitWaitHandle.WaitOne(); 94 113 Console.WriteLine("Finished."); 114 service.Close(); 95 115 } else { 96 116 Program p = new Program();
Note: See TracChangeset
for help on using the changeset viewer.