OPEN TS: АРХИТЕКТУРА И РЕАЛИЗАЦИЯ СРЕДЫ ДЛЯ ДИНАМИЧЕСКОГО РАСПАРАЛЛЕЛИВАНИЯ ВЫЧИСЛЕНИЙ

С.М. Абрамов, А.А. Московский, В.А. Роганов, Ю. В. Шевчук, Е. В. Шевчук, Н.Н. Парамонов, О.П. Чиж

Т-система с открытой архитектурой (Open TS) является средой автоматического динамического распараллеливания вычислений, основанной на гладком расширении языка С++. Open TS создавалась, в первую очередь, для высокопроизводительных вычислений. Динамическое распараллеливание имеет ряд преимуществ не только для случая, когда вопросы организации параллельного исполнения кода решаются во время исполнения программы (динамическое распараллеливание), но и для выравнивания нагрузки в гетерогенных и/или меняющихся со временем параллельных вычислительных системах, а также для задач, обладающих гранулами различной тяжести. При этом, использование неявных конструкций распараллеливания вычислений позволяет легко переносить программы между различными платформами параллельных вычислений - многопроцессорными системами, вычислительными кластерами, метакластерными системами и т.п.

Отличительной чертой Т-системы является сочетание императивного и функционального [1] подходов. Как правило, программа на Open TS состоит из двух уровней: на верхнем программист создаёт "каркас" вызывающих друг друга функций (так называемых Т-функций, подробнее рассматриваемых ниже), в то время как внутри Т-функций остаётся возможность воспользоваться низкоуровневой оптимизацией в императивной стиле. Предполагается, что "каркас" реализован в функциональном стиле, допускающем распараллеливание вычислений за счет параллельного выполнения вызовов Т-функций.

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

В Open TS реализованы переменные с неготовыми значениями и многократным присваиванием. Для этого используется концепция "замораживания" неготового значения после окончания работы потока-производителя значения. Поддерживается также распределённый подсчет ссылок на значения, что существенно упрощает работу программиста в части управления памятью.

"Архитектура" или, вернее сказать, структура "экосистемы" Open TS приведена на рисунке 1.

Основные концепции Т-системы реализованы в виде набора шаблонных классов С++ - в так называемой "Т-суперструктуре". Среда исполнения построена по микроядерной технологии. Микроядро Т-системы состоит из около сотни классов и 7000 строк кода, в то время как многие важные функции вынесены за рамки микроядра во внешние модули. Микроядро включает в себя мобильные объекты с контролем доступа, перемещаемые легковесные потоки (нити), а также сборщик мусора, доску заданий и другие компоненты. Микроядро расширяется внешними модулями - например, в модуле расширения реализуются нестандартные режимы управления выравнивания нагрузки в кластере или распределённой системе.

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

На нижнем уровне системы, для непосредственно передачи данных используется динамически (во время запуска приложения) определяемая реализация MPI [2] (Message Passing Interface). Сейчас в OpenTS поддерживается несколько реализаций MPI, в том числе и ориентированные на распределённые вычисления, такие как PACX MPI [3] и MPICH-G2[4].

Разработка программ на Open TS поддерживается следующими средствами:

  1. Разработаны две технологии компиляции программ на языке Т++: на основе конвертера и на основе компилятора. Конвертер преобразует код на Т++ в промежуточный код на С++, а затем запускает компилятор С++ для создания объектного кода. Компилятор основан на GNU Compiler Collec-tion [5] и реализует дополнительный входной язык для GCC. К достоинствам первой технологии можно отнести относительную простоту, возможность контролировать ход трансляции рассматривая листинг результирующей С++-программы. При этом также возможно применение различных компиляторов для обработки результирующего кода (в частности, оптимизирующего компилятора фирмы Intel). К недостаткам следует отнести отсутствие поддержки некоторых специфических языковых расширений, возникшие из-за ограничений используемой технологии OpenC++ [6].
  2. Созданы отладчик и трассировщик программ.
  3. В среду исполнения программ встроен ряд утилит, облегчающих разработку и отладку, а именно:
    1. Обработчик сигналов, печатающий стек вызовов в точке возникновения ошибки
    2. Дополнительный отладчик, запускаемый при получении процессом сигнала
    3. Средства отладочной печати с фильтрацией вывода на основе регулярных выражений.

OpenTS-pic1.gif (28995 bytes)

Рисунок 1. Open TS. Структура среды для динамического распараллеливания вычислений

С использованием Open TS разработано более десяти приложений в том числе:

Создателям приложений удалось достичь приемлемых показателей по ускорения вычислений (до 60% от линейного роста производительности) на кластерах, даже в случае приложений, оперирующих большими объёмами данных.

Адаптация Open TS к проведению расчётов на распределённых вычислительных установках потребовала как изменений механизмов обмена данными между узлами (использование специализированных реализаций MPI), так и изменений механизмов обмена данными о ресурсах и задачах. В настоящее время на упрощённой модели Т-системы (T-Sim) проводятся исследования по наиболее оптимальным способам передачи информации о ресурсах и эффективным стратегиям выравнивания нагрузки. В частности, создан прототип библиотеки стратегий управлениями ресурсами на основе списков типов С++ [10].

Работа выполнена в рамках программы "СКИФ" Союзного государства и при поддержке программы фундаментальных научных исследований ОИТВС РАН "Высокопроизводительные вычислительные системы, основанные на принципиально новых методах организации вычислительных процессов" а также программы фундаментальных исследований Президиума РАН "Разработка фундаментальных основ создания научной распределенной информационно-вычислительной среды на основе технологий GRID

ЛИТЕРАТУРА:

  1. А. Филд, П. Харрисон, "Функциональное программирование", М. "Мир" 1993
  2. Message Passing Interface Forum, электронный ресурс, http://www.mpi-forum.org/
  3. R. Keller, B. Krammer, M.S. Mueller, M.M. Resch, E. Gabriel, 'MPI Development Tools and Applications for the Grid', a Workshop on Grid Applications and Programming Tools, held in conjunction with the GGF8 meetings, Seattle, WA, USA, June 25th, 2003.
  4. N. Karonis, B. Toonen, and I. Foster, "MPICH-G2: A Grid-Enabled Implementation of the Message Passing Interface"// Journal of Parallel and Distributed Computing (JPDC), Vol. 63, No. 5, pp. 551-563
  5. GNU Compiler Collection, электронный ресурс, http://gcc.gnu.org/
  6. Chiba S.A "Metaobject Protocol for C++" , In Proceedings of the ACM Conference on Object-Oriented Programming Systems, Languages, and Applications (OOPSLA), page 285-299, October 1995. http://www.csg.is.titech.ac.jp/~chiba/openc++.html
  7. Потeмкин В.А., Арсламбеков Р.М., Белик А.В., Гуччионе С "Параллельная версия алгоритма MULTIGEN" Сборник материалов конференции "Информационно-вычислительные технологии в решении фундаментальных прикладных и научных задач" ИВТН-2003, стр. 11.
  8. Московский А.А., Вановский В.В., Грановский А.А., Немухин А.В. "Создание двухуровневой схемы распараллеливания для распределенных вычислений при моделировании фолдинга белков."// Международная конференция "Распределенные вычисления и Грид-технологии в науке и образовании" 29 июня - 2 июля 2004 г. г. Дубна, Россия
  9. Горбунов Л.М., Фролов А.А., Чижонков Е.В. "О критерии существования регулярной кильватерной волны" Материалы XXXI Звенигородской конференции по физике плазмы и управляемому термоядерному синтезу. г. Звенигород, 16 - 20 февраля 2004
  10. А. Александреску. "Современное проектирование на С++", М. "Вильямс", 2004.