Техническое описание ядра Т-системы
(реализация от 30 Мая 1998г.)


Содержание

Введение

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

Базовые технические решения
Различные подходы к распараллеливанию программ

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


Существует несколько подходов к решению проблемы распараллеливания программ:

Ручное статическое распараллеливание

При ручном статическом распараллеливании программист на некотором языке параллельного программирования в процессе написания программы (в статике) организует:

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

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

Автоматическое статическое распараллеливание

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


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

Автоматическое динамическое распараллеливание

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

Выбор подхода к распараллеливанию программ

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

Организация процесса вычисления задач пользователя-автотрансформация вычислительной сети

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

являются различными способами конкретизации идеи представления процесса вычисления в виде автотрансформации сети из данных и процессов (функций, элементарных операций, автоматов).
Т-система отличается от перечисленных разработок деталями реализации, в которых учтены недостатки, выявленные в упомянутых проектах.

Гранулы параллелизма

Различают различные подходы к определению размера (вычислительной сложности) тех параллельных фрагментов, на которые разбивается программа:


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

Вычислительная сеть

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

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

Требования Т-системы к аппаратному и программному окружению

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


Рисунок 1. Аппаратное исполнение ВС

Функционирование Т-системы в составе вычислительной системы (ВС), основывающейся в части аппаратуры на прототипе комплекса аппаратных средств мультипроцессора обеспечивается следующим:
Техническое решение по реализации базового уровня программирования ВС в виде сильно связанной IP-сети Linux-машин среди прочего обусловлено следующим:

Рисунок 2. Базовый уровень программирования ВС
1999 © T-System© ИЦМС ИПС РАН