next up previous


Subsections

5 T-система как направление

Работы по Т-системе являются важной частью российско-белорусского проекта СКИФ и направлены на создание отечественной мобильной программной системы для высокопроизводительных вычислений. В разработке новой версии Т-системы было использовано «ноу-хау» для слияния функциональной и императивной моделей вычислений.

5.1 Теоретические аспекты и архитектура новой версии Т-системы

Процесс вычисления в ПРГ трактуется как поток преобразований вычислительного графа. Имеется три иерархически вложенных инварианта для состояния вычислительного графа, которые соответствуют собственно вычислениям внутри SMP-узла, динамическому выбору «направлению» вычислений (стратегии), и кластерному уровню (пересылка данных по сети).

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

5.1.0.1 Собственно вычисление.

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

5.1.0.2 Стратегии параллелизма.

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

5.1.0.3 Выбор стратегии.

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

5.2 Т-ядро

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

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

5.2.1 Дизайн ПРГ для SMP

Модуль параллельной редукции графов реализует следующие классы:

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

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

Во время работы потоки порождают неготовые значения и узлы графа. Если неготовое значение не объявлено как ленивое (вычисляемое по запросу), то система немедленно порождает узел и устанавливает его в очередь к потокам-вычислителям. В противном случае порождение узла и вычисление форсируется при первом обращении к неготовому значению.

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

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

5.2.2 Дизайн кластерного уровня

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

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

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

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

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

Между собой вычислительные пространства соединяются при помощи так называемых порталов. Портал соответствует интегральным коммуникационным возможностям среды передачи данных, и может отражать различную специфику среды, такую как множество физических путей соединения, различные скорости в разных направлениях и т.д. Свойства вычислительных пространств, которые видны через порталы, суммируются с помощью иерархической системы объектов, отражающих ресурсы кластера. Алгоритмы обмена информацией и способы пересчета загрузки вычислительных пространств являются частными случаями более общих алгоритмов обмена информацией между вычислительными узлами -- Distributed Parallel Memo Table (DPMT).

Согласно вычислительной модели, реализуемой Т-системой, процесс вычисления есть процесс выполнения преобразований, связанных с системой из трех инвариантов, из которых третий инвариант соответствует уровню обмена вычислениями между вычислительными пространствами. Это происходит следующим образом: когда вычислительное пространство обнаруживает собственную перегрузку по отношению к другому известному ей пространству (это проверка может быть выполнена эффективно -- за несколько команд процессора, -- в силу системы организации обмена и интеграции степеней загруженности пространств) оно может нарушить третий инвариант, переслав вычисления на свободных узел кластера. Реально в этот момент происходят следующие изменения в структуре данных: вычисление освобождает («роняет») свою текущую вершину графа, если таковая имеется, и порождает вместо нее вершину, которая «повисает» на портале к нужному пространству (который находится автоматически иерархическим планировщиком), сопоставляет ему уникальный идентификатор, который состоит из последовательного номера текущего пространства и некоторого локального счетчика (который после этого увеличивается на единицу). Вычисление пересылается в другое пространство, при этом функциональность локальной вершины сводится к ожиданию ответа, а удаленной -- к вычислению.

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

Данные в реальных программах обычно представлены в виде структур, связанных между собой ссылками, и, вообще говоря, занимающих большой объем в памяти. Реальная «упаковка» и «распаковка» структур данных при передаче связана с «отрезанием» некоторых из этих ссылок. В процессе пересылки «отрезанные» ссылки структур передаются в другое пространство как неготовые значения, вычисляемые лениво (по запросу), причем их вычисление есть в точности подкачка следующей порции данных с того узла, откуда они изначально пересылались.

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

5.2.3 Использование MPI-программ в качестве вычислительных узлов

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

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

5.2.4 Приоритеты задач и иерархическая структура вычислительных ресурсов (планировщик)

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

С каждой задачей ассоциирован ее приоритет, который влияет на ее очередность исполнения.

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

5.2.5 Поддержка приложений реального времени

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

5.3 Компилятор (source-to-source конвертер)
для языка TC

Важным достоинством новой версии Т-системы является то, что она поддерживает гладкое расширение языка C. Гладким оно названо потому, что все необходимые конструкции для указания мест распараллеливания программы просто и естественно погружены в синтаксис языка C.

Компилятор преобразует программу на языке TC в программу на языке C. При этом он производит необходимый анализ программы и вставляет в текст все необходимые обращения к ядру Т-системы. Затем C-программа транслируется обычным оптимизирующим компилятором.

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

Предполагается, что это удобство будет оценено пользователями, которым будет проще начинать разработку и переделку своих программ под Т-систему.

В процессе разработки находится гладкое расширения языка Fortran, организованное аналогичным образом.

5.4 FL -- script-language для Т-системы

В некоторых случаях удобно иметь специальный язык для оперативного формирования вычислительных задач. На такое средство программирования можно смотреть как на аналог shell'а в системе Unix, из которого можно вызывать базовые системные и пользовательские функции, написанные на языках ТC, Fortran и т. д.

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

Основными отличиями shell для кластеров являются:

Т-система также предоставляет возможность подключения кода, написанного на других языках программирования и в других вычислительных пространствах.


next up previous
2000-09-12