Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/08/11 11:07:33 (13 years ago)
Author:
svonolfe
Message:

Worked on the MPIEngine (#1542)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/MPI/HeuristicLab.ExtLibs/HeuristicLab.MPInet/MPIAlgorithmRunner/3.3/Program.cs

    r6354 r6388  
    2929using HeuristicLab.Operators.MPISupport;
    3030using HeuristicLab.Core;
     31using Microsoft.Hpc.Scheduler;
     32using System.ServiceModel;
     33using System.Net;
    3134
    3235namespace HeuristicLab.MPIAlgorithmRunner {
     
    3437    EventWaitHandle waitHandle = new EventWaitHandle(false, EventResetMode.ManualReset);
    3538
     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
    3663    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;
    3967
    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)) {
    4868        MPI.Communicator communicator = MPI.Communicator.world.Clone() as MPI.Communicator;
    4969
    5070        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);
    5373
    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);
    6076
    6177          ItemList<ResultCollection> results = new ItemList<ResultCollection>();
     
    87103
    88104            Console.WriteLine("Update results");
    89             lock (resultName) {
    90               XmlGenerator.Serialize(results, resultName);
    91             }
     105            broker.Results = results;
    92106          }
    93107
     108          lock (broker.ExitWaitHandle) {
     109            broker.Terminated = true;
     110          }
     111
     112          broker.ExitWaitHandle.WaitOne();
    94113          Console.WriteLine("Finished.");
     114          service.Close();
    95115        } else {
    96116          Program p = new Program();
Note: See TracChangeset for help on using the changeset viewer.