С.М. Абрамов, А.А. Московский, В.А. Роганов, Ю. В. Шевчук, Е. В. Шевчук, Н.Н. Парамонов, О.П. Чиж
Т-система с открытой архитектурой (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. Open TS. Структура среды для динамического распараллеливания вычислений |
С использованием Open TS разработано более десяти приложений в том числе:
Создателям приложений удалось достичь приемлемых показателей по ускорения вычислений (до 60% от линейного роста производительности) на кластерах, даже в случае приложений, оперирующих большими объёмами данных.
Адаптация Open TS к проведению расчётов на распределённых вычислительных установках потребовала как изменений механизмов обмена данными между узлами (использование специализированных реализаций MPI), так и изменений механизмов обмена данными о ресурсах и задачах. В настоящее время на упрощённой модели Т-системы (T-Sim) проводятся исследования по наиболее оптимальным способам передачи информации о ресурсах и эффективным стратегиям выравнивания нагрузки. В частности, создан прототип библиотеки стратегий управлениями ресурсами на основе списков типов С++ [10].
Работа выполнена в рамках программы "СКИФ" Союзного государства и при поддержке программы фундаментальных научных исследований ОИТВС РАН "Высокопроизводительные вычислительные системы, основанные на принципиально новых методах организации вычислительных процессов" а также программы фундаментальных исследований Президиума РАН "Разработка фундаментальных основ создания научной распределенной информационно-вычислительной среды на основе технологий GRID