А М Ларгина, В А Ларгин - Выбор системы программирования параллельных вычислительных задач асу тп аэс - страница 1

Страницы:
1  2 

УДК 681.3.06

Ларгина А.М., Ларгин В.А.

ВЫБОР СИСТЕМЫ ПРОГРАММИРОВАНИЯ ПАРАЛЛЕЛЬНЫХ ВЫЧИСЛИТЕЛЬНЫХ ЗАДАЧ АСУ ТП АЭС

Рассмотрены системы параллельного программирования вычислительных задач верхнего уровня АСУ ТП. Обосновывается выбор наиболее оптимальной системы параллельного программирования. Ист. 14.

Введение

Все возрастающие требования к безопасности АЭС предполагают развитие систем верхнего уровня АСУ ТП - информационно-вычислительных и систем внутриреакторного контроля энергоблоков АЭС [1] - за счет включения в их состав экспертных систем поддержки оперативного персонала [2]. Одной из таких систем поддержки является динамическая математическая модель реакторной установки типа ВВЭР с анализом прогнозной и текущей информации об объекте, представляющая собой комплекс вычислительных задач большой размерности.

В [3] показано, что наиболее предпочтительными вариантами для реализации подобных высокоточных моделей в реальном или ускоренном масштабе времени являются кластерные вычислительные системы (или кластеры). В качестве вычислительных узлов в кластере обычно используются однопроцессорные персональные компьютеры, двух- или четырехпроцессорные SMP-серверы [4]. Каждый узел кластера работает под управлением своей копии операционной системы (ОС). Сетевая ОС имеет в своем составе средства передачи сообщений между компьютерами по линиям связи. На основе этих сообщений поддерживаются синхронизации доступа к разделяемым ресурсам, обнаружение отказов и динамическая реконфигурация системы [5].

Для эффективной работы кластера необходимы параллельные приложения, реализующие его функциональность. Главная цель применения параллельных приложений - повышение скорости вычислений за счет их распараллеливания. Реальный выигрыш зависит как от специфики задачи, так и от того, насколько учтены в программе характеристики аппаратных и программных средств кластера.

Основным требованием к выполняемым на кластерных системах и функционирующим в режиме реального времени программным приложениям является их отказоустойчивость к сбоям вычислительных узлов.

Традиционным способом обеспечения отказоустойчивости при выполнении последовательной задачи является ее перезапуск на исправном ресурсе с некоторой контрольной точки. Более сложным является обеспечение отказоустойчивости параллельной задачи в системах без синхронного резервирования (к которым принадлежат кластеры). Процессы параллельной задачи реализуются на разных узлах и динамически взаимодействуют между собой. В этом случае простой перезапуск процесса с контрольной точки может привести либо к потере сообщений, отправленных другому процессу, но не полученных им в результате сбоя, либо к посылке повторных сообщений вследствие повторного выполнения уже исполненного фрагмента программы, либо и того и другого вместе.

В настоящее время существует ряд систем параллельного программирования кластеров с различным уровнем пользовательского сервиса. Возникает задача выбора системы параллельного программирования, наиболее адекватной упомянутому выше требованию.

Целью данной статьи является сравнительный анализ и выработка рекомендаций по выбору системы параллельного программирования для применения в кластерных системах верхнего уровня АСУ ТП АЭС. Для этого рассмотрим наиболее представительные системы, нашедшие промышленное применение.

PVM

PVM (Parallel Virtual Machine) - Параллельная Виртуальная Машина - представляет собой надстройку над операционной системой UNIX и может использоваться на различных аппаратных платформах: ПЭВМ; локальная сеть, включающая в себя суперкомпьютеры с параллельной архитектурой; универсальные ЭВМ, графические рабочие станции и пр. [6]. PVM представляет собой набор библиотек и утилит, предназначенных для разработки, отладки параллельных программ и управления конфигурацией виртуальной вычислительной машины. PVM предоставляет программисту единый (но виртуальный) многопроцессорный вычислительный комплекс. Этот виртуальный комплекс используется для реального выполнения программ. Система берет на себя доставку сообщений, преобразование данных, управление процессами.

Поддерживаются языки C/C++ и FORTRAN, имеются средства сопряжения библиотек PVM и с другими языками, такими как Perl, Java и др.

В PVM реализованы следующие принципы:

- управление конфигурацией виртуальных вычислительных ресурсов может осуществляться любым пользователем системы;

- единицей параллелизма является задача, состояние которой изменяется в процессе работы программы. Задача в определенные промежутки времени может выполнять вычисления, переходить к обмену данными и т. д.;

- использование явной модели обмена сообщениями;

- поддержка всех типов неоднородности;

- поддержка симметричных многопроцессорных систем.

Программирование с использованием PVM происходит следующим образом. Программист создает программу, которая при ее выполнении порождает несколько процессов, взаимодействующих между собой посредством обмена сообщениями. Обмен и другие операции реализуются обращениями к подпрограммам библиотек. Подпрограммы позволяют передавать и принимать сообщения. Данные перед передачей "упаковываются" в буфер передачи. При упаковке может использоваться кодирование данных.

В PVM реализованы основные типы обмена - двухточечный и коллективный. Есть средства синхронизации процессов. Любая задача может запускать новые процессы или завершать выполнение других процессов, выполнивших свою работу.

Система PVM состоит из двух основных компонентов. Первым является процесс pvmd3 (демон - в терминологии ОС UNIX), который запускается на всех компьютерах, входящих в состав виртуальной машины. Эти процессы работают без связи с терминалом, находясь в состоянии "сна" до тех пор, пока какой-нибудь процесс не обратится к соответствующей службе ОС. Особенностью демона pvmd3 является то, что запускать его могут обычные пользователи, работающие без привилегий суперпользователя. Вторым компонентом PVM является набор библиотек, реализующих те или иные операции. В параллельных программах, написанных на языке C++, используются функции из библиотеки Hbpvm3. Модель программирования PVM включает как SPMD, так и MPMD-модели [4], причем обе они равноправны. Все это дает возможность эффективно использовать ресурсы параллельной вычислительной системы.

Язык программирования ADA

Ada структурный, модульный, объектно-ориентированный язык программирования, содержащий высокоуровневые средства программирования параллельных процессов [7]. Является официальным языком программирования министерства обороны США. Основное назначение языка Ada - разработка больших программных систем реального времени для встроенных компьютерных систем. Это не исключает его использования для решения параллельных вычислительных задач.

Язык Ada строго типизирован, в нём исключена работа с объектами, не имеющими типов, а автоматические преобразования типов сведены к минимуму. Помимо раздельной компиляции модулей и обеспечения иерархической секретности спецификаций в этом языке была реализована поддержка параллельного программирования в виде встроенных средств поддержки многозадачности.

Благодаря поддержке многозадачности достигается стабильность семантики, которая избавляет разработчика программного обеспечения как от необходимости использования разнородных внешних библиотек, так и от необходимости разработки своих собственных решений для обеспечения поддержки многозадачности.

Простейшая параллельная программа на языке Ada является процедурой, содержащей определения задач и их тела. Объявления в любом компоненте обрабатываются по одному в порядке их появления. Обработка объявления задачи приводит к созданию экземпляра задачи. После обработки всех объявлений начинают выполняться последовательные операторы подпрограммы в виде безымянной задачи.

В качестве стандартных средств поддержки многозадачности Ada используются задачи (tasks), которые описывают последовательности действий и способны выполняться одновременно, а также объекты защищенных типов (protected types), которые являются нововведением стандарта Ada 95.

Программа на языке Ada состоит как минимум из одной, а, возможно, и множества задач, выполняющихся одновременно и независимо от остальных. Механизмы межзадачного обмена данными и синхронизации основаны на высокоуровневых концепциях «рандеву» и использовании защищенных объектов. В спецификации задачи публикуются различные входы (entry) в задачу, в которых она готова ожидать обращения к ней от других задач. В процессе взаимодействия одна из задач рассматривается как сервер, а вторая - как клиент, причем задача-сервер не может быть инициатором начала взаимодействия.

В простейшем случае, когда рассматривается взаимодействие только двух задач, задача-клиент, желающая обратиться к другой задаче (задаче-серверу), инициирует обращение к входузадачи-сервера. После этого задача-сервер откликается на обращение задачи-клиента, принимая обращение к этому входу. Таким образом, взаимодействие двух задач осуществляется в ситуации, когда задача-клиент обратилась к входу, а задача-сервер готова принять это обращение. Этот способ взаимодействия двух задач называется рандеву. Поскольку задача-клиент и задача-сервер выполняются независимо друг от друга, то нет никакой гарантии, что обе задачи окажутся в точке осуществления рандеву одновременно. Поэтому, если задача-сервер оказалась в точке рандеву, но при этом нет ни одного обращения к входу (запроса на взаимодействие), то она должна ждать появления такого обращения. Аналогично, если задача-клиент обращается к входу, а задача-сервер не готова обслужить такое обращение, то задача-клиент должна ждать, пока задача-сервер обслужит это обращение. В процессе ожидания как задача-клиент, так и задача-сервер не занимают ресурсы процессора, находясь в состоянии, которое называют приостановленным или состоянием блокировки. В случаях, когда вызовы к входу задачи-сервера осуществляют сразу несколько задач-клиентов, эти вызовы ставятся в очередь. Очередь обслуживается в порядке поступления вызовов FIFO.

Механизмы параллелизма языка Ada 95 - это защищенные типы, которые поддерживают синхронизированный доступ к разделяемым данным, а также оператор requeue, обеспечивающий планирование и синхронизацию в зависимости от аргументов вызова.

Защищенные функции обеспечивают доступ только для чтения к скрытым переменным, следовательно, функцию могут вызвать одновременно несколько задач. Защищенные процедуры обеспечивают исключительный доступ к скрытым переменным для чтения и записи. Защищенные точки входа похожи на защищенные процедуры, но имеют еще часть when, которая определяет логическое условие синхронизации. Защищенная процедура или точка входа в любой момент времени может выполняться только для одной вызвавшей ее задачи. Вызов защищенной точки входа приостанавливается, пока условие синхронизации не станет истинным и вызывающая задача не получит исключительный доступ к скрытым переменным. Условие синхронизации не может зависеть от параметров вызова.

Система с передачей сообщений MPI

MPI (Message Passing Interface) представляет собой библиотеку функций, предназначенную для поддержки работы параллельных процессов в терминах передачи сообщений [8]. Целями создания MPI были:

- разработка интерфейса прикладного программирования (не только для компиляторов или библиотек реализации систем);

- обеспечение возможности эффективных коммуникаций (избежать копирования из памяти в память, совмещать процессы вычислений и коммуникаций);

- разрешить расширения для использования в гетерогенной (неоднородной) вычислительной среде;

- скрыть от пользователя проблемы коммуникаций;

- определить интерфейс, который бы не слишком отличался от разработанных ранее, таких как PVM и пр.;

- определить универсальный интерфейс (который может быть реализован на многих программно-аппаратных платформах).

Система MPI является основным средством программирования таких современных высокопроизводительных мультикомпьютеров, как Cray T3D, Cray T3E, IBM SP2 и других. В MPI учтены достижения других проектов по созданию систем передачи сообщений: NX/2, Express, nCUBE, Vertex, p4, PARMACS, PVM, Chameleon, Zipcode, Chimp и т. д. Ее реализации представляют собой библиотеки подпрограмм, которые могут использоваться в программах на языках C/C++ и FORTRAN. В настоящее время принята новая версия спецификации - MPI-2.

В модели программирования, которую поддерживает MPI, программа порождает несколько процессов, взаимодействующих между собой с помощью обращений к подпрограммам передачи и приема сообщений. Обычно, при инициализации MPI-программы создается фиксированный набор процессов, причем каждый процесс выполняется на своем процессоре.

Спецификация MPI обеспечивает переносимость программ на уровне исходных кодов и большую функциональность. Поддерживается работа на гетерогенных кластерах и симметричных многопроцессорных системах.

Эффективность и надежность обеспечиваются: определением MPI операций не процедурно, а логически, т.е. внутренние механизмы выполнения операций скрыты от пользователя; использованием непрозрачных объектов в MPI (группы, коммуникаторы, типы и т.д.); хорошей реализацией функций передачи данных, адаптирующихся к структуре физической системы. Обменные функции разработаны с учетом архитектуры системы, например, для систем с распределенной памятью и систем с общей памятью, что позволяет минимизировать время обмена данными.

MPI различают две модели параллельных вычислений: MPMD-модель (Multiple program -Multiple Data) и SPMD-модель (Single program - Multiple Data). В первом случае MPI-программа представляет собой совокупность автономных процессов, функционирующих под управлением своих собственных программ и взаимодействующих посредством стандартного набора библиотечных процедур для передачи и приема сообщений. Таким образом, в самом общем случае MPI-программа реализует MPMD-модель программирования. Во втором случае (SPMD-модель) все процессы исполняют различные ветви одной и той же программы. Такой подход обусловлен тем обстоятельством, что задача может быть достаточно естественным образом разбита на подзадачи, решаемые по одному алгоритму. На практике чаще всего встречается именно эта модель программирования. Последнюю модель иначе можно назвать моделью распараллеливания по данным.

Переносимость обеспечивается, во-первых, тем, что тот же самый исходный текст параллельной программы на MPI может быть выполнен на ряде машин. Программный код может одинаково эффективно выполняться, как на параллельных компьютерах с распределенной памятью, так и на параллельных компьютерах с общей памятью. Во-вторых, переносимость обеспечивается способностью параллельных программ выполняться на гетерогенных системах. В-третьих, такими механизмами, как: определение одного вычислительного компьютера в виде виртуального компьютера и возможностью задания произвольного количества таких виртуальных компьютеров в системе независимо от количества физических компьютеров. В-четвертых, переносимость обеспечивается заданием виртуальных топологий. Отображение виртуальных топологий на физическую систему осуществляется системой MPI. И, в-пятых, компиляторами для Fortran и C++.

Наличие в системе таких средств как: виртуальные топологии, коллективные взаимодействия, создаваемые пользователем типы данных и др., значительно повышают уровень параллельного программирования по сравнению с системами с передачей сообщений, у которых нет таких средств.

В проекте MPI-2 введены дополнительные по отношению к MPI весьма важные возможности.

Взаимодействие между приложениями. Поддержка механизма "клиент-сервер". Стало возможным писать на MPI не только расчетные математические задачи, но и другие многофункциональные задачи.

Динамическое создание и уничтожение процессов (ветвей). Это важно для работы в сетях

ЭВМ.

Для работы с файлами создан архитектурно-независимый интерфейс. Это необходимо для случая, если диск находится на одной ЭВМ, а ветвь, которая должна с ним работать - на

другой.

Сделан шаг в сторону SMP-архитектуры. Теперь разделяемая память может быть не только каналом связи между ветвями, но и местом совместного хранения данных. Для этого ветви делегируют в MPI так называемые буфера - "окна". Интерфейс выполнен так, чтобы в принципе его можно было реализовать и через передачу сообщений на не-SMP-комплексах. MPI автоматически поддерживает идентичность содержимого всех "окон" с одинаковым идентификатором.

Одной из реализаций MPI является спецификация MPICH (MPI CHameleon), которая поддерживает работу на большом числе платформ и с различными коммуникационными интерфейсами, в том числе TCP/IP.

Важным достоинством MPI является наличие системы CMDE (Channel Memory based Dynamic Environment) [9], позволяющей решать проблему восстановления выполнения параллельного приложения после сбоя его узла на основе использования Памяти Каналов.

Система CMDE является динамическим программным окружением, состоящим из множества взаимосвязанных компонентов, каждый из которых запускается на отдельном узле кластерной системы или сети. Динамизм системы определяется обеспечением динамического включения компонентов в систему или исключения из неё.

Система CMDE состоит из двух подсистем: подсистемы низкоуровневых коммуникаций для библиотеки MPICH и подсистемы запуска и сопровождения параллельных MPI-программ на кластерах. Первая подсистема состоит из одного компонента - коммуникационной библиотеки низкого уровня, реализующей всё множество высокоуровневых коммуникационных функций библиотеки MPICH. Вторая подсистема состоит из компонентов четырёх типов - Диспетчера, Сервера Памяти Каналов (СПК), Сервера Контрольных Точек (СКТ) и Исполнителя. В текущей реализации системы для выполнения поставленных задач необходимо существование одного Диспетчера, одного или более СПК, одного или более СКТ и двух или более Исполнителей.

Диспетчер является центральным компонентом системы. Он обеспечивает добавление других компонентов в систему и отслеживает их отключение, формирует и поддерживает очередь приложений, назначает ресурсы приложению и перераспределяет ресурсы в случае сбоев.

Страницы:
1  2 


Похожие статьи

А М Ларгина, В А Ларгин - Выбор системы программирования параллельных вычислительных задач асу тп аэс