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.MPIEngine/3.3/MPIEngine.cs

    r6354 r6388  
    3131using HeuristicLab.Optimization;
    3232using System.Linq;
     33using Microsoft.Hpc.Scheduler;
     34using System.ServiceModel;
     35using HeuristicLab.MPIAlgorithmRunner;
     36using HeuristicLab.Operators.MPISupport;
    3337
    3438namespace HeuristicLab.MPIEngine {
     
    4953    }
    5054
    51     private string algFile;
     55    private IAlgorithm algorithm;
    5256
    5357    public override void Start() {
     
    6468        alg.Engine = new SequentialEngine.SequentialEngine();
    6569
    66         algFile = Path.GetTempFileName();
    67         XmlGenerator.Serialize(alg, algFile);
     70        algorithm = alg;
    6871      }
    6972
     
    7780        IScope globalScope = context.Scope;
    7881
    79         string resultFile = Path.GetTempFileName();
    80         ItemList<ResultCollection> empty = new ItemList<ResultCollection>();
    81         XmlGenerator.Serialize(empty, resultFile);
     82        string exec = @"mpiexec";
     83        string args = @"-c 3 C:\public\MPISupport\HeuristicLab.MPIAlgorithmRunner-3.3.exe ";
    8284
    83         string exec = @"C:\Program Files\Microsoft Compute Cluster Pack\Bin\mpiexec.exe";
    84         string args = @"-n 3 HeuristicLab.MPIAlgorithmRunner-3.3.exe " + algFile + " " + resultFile + " 5000";
     85        IScheduler scheduler = new Scheduler();
     86        scheduler.Connect("blade00.hpc.fh-hagenberg.at");
    8587
    86         System.Threading.Thread pollThread = new System.Threading.Thread(delegate(object state) {
    87           while (true) {
    88             System.Threading.Thread.Sleep(5000);
     88        ISchedulerJob job = scheduler.CreateJob();
     89        job.Name = "HeuristicLab.MPIEngine";
     90        job.RequestedNodes.Add("BLADE03");
     91        ISchedulerTask task = job.CreateTask();
     92        task.Name = "HeuristicLab.MPIAlgorithmRunner";
     93        task.CommandLine = exec + " " + args;
     94        task.StdOutFilePath = "stdout.txt";
     95        task.StdErrFilePath = "stderr.txt";
     96        task.MinimumNumberOfCores = task.MaximumNumberOfCores = 3;
     97        job.AddTask(task);
    8998
    90             lock (resultFile) {
    91               object results = XmlParser.Deserialize(resultFile);
    92               ResultCollection resultCollection = (globalScope.Variables["Results"].Value as ResultCollection);
     99        scheduler.SubmitJob(job, @"HPC\svonolfe", @"Vunkopf!3");
    93100
    94               if (resultCollection != null) {
    95                 if (!resultCollection.ContainsKey("MPIResults"))
    96                   resultCollection.Add(new Result("MPIResults", results as IItem));
     101        try {
     102          string address = null;
     103          int timeout = 10;
    97104
    98                 resultCollection["MPIResults"].Value = results as IItem;
     105          while (address == null && timeout > 0) {
     106            ISchedulerJob schedulerJob = scheduler.OpenJob(job.Id);
     107            if (schedulerJob != null) {
     108              INameValueCollection properties = schedulerJob.GetCustomProperties();
     109              NameValue item = properties.FirstOrDefault(i => i.Name == "address");
     110              if (item != null) {
     111                address = item.Value;
     112              } else {
     113                System.Threading.Thread.Sleep(1000);
     114                timeout--;
    99115              }
    100 
    101116            }
    102117          }
    103         });
    104         pollThread.Start();
    105118
    106         Process p = Process.Start(exec, args);
    107         p.WaitForExit();
     119          if (address == null) {
     120            throw new Exception("A timeout occurred when starting the MPIAlgorithmRunner");
     121          }
    108122
    109         pollThread.Abort();
    110         File.Delete(algFile);
    111         File.Delete(resultFile);
     123          NetTcpBinding netTCPBinding = new NetTcpBinding(SecurityMode.None);
     124          ChannelFactory<IAlgorithmBroker> factory = new ChannelFactory<IAlgorithmBroker>(netTCPBinding, address);
     125          IAlgorithmBroker proxy = factory.CreateChannel();
     126
     127          proxy.TransmitAlgorithm(new MPITransportWrapper<IAlgorithm>(algorithm));
     128
     129          while (!proxy.IsAlgorithmTerminated()) {
     130            ItemList<ResultCollection> results = proxy.GetResults().InnerItem;
     131
     132            ResultCollection resultCollection = (globalScope.Variables["Results"].Value as ResultCollection);
     133
     134            if (resultCollection != null && results != null) {
     135              if (!resultCollection.ContainsKey("MPIResults"))
     136                resultCollection.Add(new Result("MPIResults", results));
     137
     138              resultCollection["MPIResults"].Value = results;
     139            }
     140
     141            System.Threading.Thread.Sleep(5000);
     142          }
     143        }
     144        catch (Exception e) {
     145          scheduler.CancelJob(job.Id, "Exception: " + e.Message);
     146          throw e;
     147        }
    112148      }
    113149    }
Note: See TracChangeset for help on using the changeset viewer.