Опубликован: 28.10.2009 | Доступ: свободный | Студентов: 515 / 40 | Оценка: 4.67 / 4.39 | Длительность: 20:33:00
Лекция 2:

Microsoft High Performance Computing Server 2008

Интерфейс приложений

HPC 2008 предоставляет возможность управлять кластером через .NET интерфейсы, реализованные в библиотеках Microsoft.Hpc.Scheduler.dll, Microsoft.Hpc.Scheduler.Properties.dll и Microsoft.Hpc.Scheduler.Session.dll.

В качестве примера (пример из [2.1]) использования интерфейса приложений рассмотрим добавление задания в очередь. Для этого необходимо выполнить следующие действия:

  • Соединиться с кластером (метод IScheduler.Connect )
  • Создание задание (метод IScheduler.CreateJob )
  • Создать задачу (метод ISchedulerJob.CreateTask )
  • Добавить задачу в задание (метод ISchedulerJob.AddTask )
  • Отправить задание на выполнение (метод ISchedulerJob.SubmitJob )
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Hpc.Scheduler;
using Microsoft.Hpc.Scheduler.Properties;
using System.Threading;

namespace JobSubV2
{
 class Program
 {
  private static ManualResetEvent jobFinishEvt = new ManualResetEvent(false);
  static void Main(string[] args)
  {
   Scheduler scheduler = new Scheduler();

   scheduler.Connect("localhost");

   ISchedulerJob job = scheduler.CreateJob();

   job.MinimumNumberOfNodes = 1;
   job.MaximumNumberOfNodes = 1;


   ISchedulerTask task = job.CreateTask();

   task.CommandLine = "ComputeTask.exe";
   task.WorkDirectory = @"\\filer\appData";

   job.AddTask(task);

   job.OnJobState += new EventHandler<JobStateEventArg>(job_OnJobState);

   scheduler.SubmitJob(job, null, null);

   jobFinishEvt.WaitOne();
  }

  static void job_OnJobState(object sender, JobStateEventArg e)
  {
   Console.WriteLine("Job <{0}> has changed from state <{1}> to <{2}>", 
   e.JobId,e.PreviousState.ToString(),                                                                        
   e.NewState.ToString());
   if (e.NewState.Equals(JobState.Finished))
   {
    Console.WriteLine("Job <{0}> has finished", e.JobId);
    jobFinishEvt.Set(); 
   }
  }
 }
}

HPC Basic Profile

Одно из наиболее интересных нововведений HPC 2008 по сравнению с Compute Cluster Server 2003 состоит в добавлении к интерфейсам взаимодействия веб-сервиса, известного как High Performance Computing Basic Profile (HPCBP). Спецификация HPCBP была разработана Open Grid Forum ([2.2]) и является открытой. Реализация HPCBP в HPC 2008 дает возможность использовать возможности кластеров под управлением Windows High Performance Server 2008 из операционных систем и языков программирования, не поддерживаемых группой HPC в Microsoft: например, Java и Python. HPCBP устанавливается вместе с HPC 2008, но по умолчанию не запускается. Для запуска HPCBP требуется запустить сервис HPC Basic Profile Web Service на головном узле и провести настройки в соответствии с поставляемой документацией.

Для доступа к HPCBP из C/C++ программ, работающих под управлением Linux, можно воспользоваться, например, проектом BES++ ([2.3]), доступном в открытом исходном коде.

Ниже приведен пример кода на C#, взаимодействующего с HPCBP (пример из [2.1]):

public class HPCBPClient
{    
 static int main(string[] args)
 {
  if (args.Length != 4) {
  Console.WriteLine("HPCBPClient [service URL] 
  [JSDL job file] [username] [password]");
  return 1;
 }

 string serviceUrl = args[0];
 string jsdlFileName = args[1];
 string userName = args[2];
 string password = args[3];

 HPCBPClient hpcbp = new HPCBPClient(serviceUrl, userName, password);

 EndpointReferenceType[] eprs = new EndpointReferenceType[1];
 eprs[0] = hpcbp.CreateActivity(jsdlFileName);

 GetActivityStatusResponseType[] status = null;
 do { // Loop polling the service to see if the job is over
  Thread.Sleep(5000);
  status = hpcbp.GetActivityStatuses(eprs);
 } while (status[0].ActivityStatus.state == ActivityStateEnumeration.Pending           
        || status[0].ActivityStatus.state == ActivityStateEnumeration.Running);

 return 0;
 }
}