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; } }