Средства программирования реконфигурируемых многопроцессорных вычислительных систем

Данные методы преобразования параллельно-конвейерных реализаций задач различных проблемных областей были экспериментально проверены для реконфигурируемых вычислителей, построенных на основе ПЛИС. При этом был обеспечен рост реальной производительности в 1,5 - 4 раза.

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

1. Каляев А.В., Левин И.И. Модульно-наращиваемые многопроцессорные системы со структурно-процедурной организацией вычислений. М.: Янус-К, 2003. 380с.

В.А. Гудков, А.А. Гуленок, А.И. Дордопуло, Л.М. Сластен

СРЕДСТВА ПРОГРАММИРОВАНИЯ РЕКОНФИГУРИРУЕМЫХ МНОГОПРОЦЕССОРНЫХ ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ

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

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

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

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

ментов и элементов памяти, объединенных между собой пространственной коммутационной системой.

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

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

Для обращения к данным используются два основных метода доступа: параллельный доступ (задаваемый типом Vector) и последовательный доступ (задаваемый типом Stream). На рис. 1 и 2 представлены программы, являющиеся граничными примерами извлечения параллелизма, и графы вычислительных структур, в которые они будут оттранслированы. Применение неявного описания параллелизма позволяет достаточно просто управлять степенью распараллеливания программы на уровне описания структур данных.

VAR A,B,C :VECTOR [10];

CADR SummaVector; begin C=A+B; end;

ENDCADR;

A[10]

B[10]

VAR A,B,C :STREAM [10];

CADR SummaStream; begin C=A+B; end;

ENDCADR;

A[2] A[1]

B[2] B[1]

C[1] C[2] C[10]

Рис.1. Параллельное сложение Рис. 2. Последовательное сложение массивов массивов

Используемые типы доступа к переменным определяют основные типы данных в языке COLAMO: Vector (вектор), Number (число), Stream (поток), Array (массив), которые отличаются способом обработки данных. Потоком является одномерный массив, элементы которого могут быть обработаны только последовательно. Вектором является массив, элементы которого могут быть обработаны параллельно. Многомерные массивы состоят из множества измерений, каждое из которых может иметь последовательный или параллельный тип доступа и, соответственно, тип данных Stream или Vector.

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

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

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

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

В развитие предложенного подхода в настоящее время ведется разработка трансляторов с языка COLAMO в архитектуру машины потока запросов и трансляция в язык VHDL, являющийся базовым средством для программирования реконфигурируемых систем на основе ПЛИС.

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

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

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

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

Нижний уровень ресурсонезависимого программирования обеспечивает среда разработки масштабируемых компонентов вычислительных структур. Функциональные возможности среды разработки позволяют формировать вычислительную структуру задачи из типовых блоков, ранее созданных на основе УИБЬ описания, например полученного в среде проектирования ХГЬШХ ШБ. Различают типовые блоки параллельно-конвейерной реализации вычислительно трудоемких фрагментов задачи трёх типов: элементарные вычислительные блоки (схемы), интерфейсные блоки (интерфейсы) и составные блоки (компоненты) [5].

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

Интерфейсные блоки предназначены для сопряжения вычислительных блоков и обеспечивают управление потоками данных в вычислительном контуре. Интерфейсы могут быть шесть видов: интерфейс базового модуля, сквозной интерфейс, конвейер-конвейер, конвейер-процедура, процедура-конвейер и процедура-процедура. Интерфейс базового модуля предназначен для загрузки/выгрузки данных в вычислительную систему, а также для управления вычислительным процессом. Сквозной интерфейс является универсальным и соединяет однотипные входы/выходы с одинаковой разрядностью и скоростью потока данных, они не имеют описаний на языке УИБЬ и существуют для того, чтобы не нарушать логику соединений. Остальные интерфейсы предназначены для соединения соответствующих схем и компонентов, их структура описывается в УИБЬ файлах.

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

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

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

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

Если вычислительная сеть сформирована правильно, т.е. соблюдены разрядности, типы соединений, типы соединенных элементов, скорость потока данных, уникальность имён и др., то такая сеть может быть откомпилирована в множество файлов на языке УИБЬ, каждый из которых реализуется на отдельном модуле реконфигурируемого вычислителя. Обеспечение связей в созданном проекте между модулями обеспечивает компилятор. Перед компиляцией в среду необходимо загрузить файл с описанием архитектуры вычислительной системы.

Компиляция представляет собой следующую последовательность действий:

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

• анализ скорости потока данных;

• раскрытие параллельности;

• раскрытие каскадирования;

• раскрытие компонентов. Для всех компонентов повтор пунктов 3, 4, 5;

• укладка вычислительной структуры на архитектуру вычислительной

системы.

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

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

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

1. Каляев И.А., Левин И.И. Высокопроизводительные многопроцессорные вычислительные системы с программируемой архитектурой на основе ПЛИС // Сб. трудов конференции «Моделирование 2006». Киев, 2006. С. 41-47.

2. Каляев А.В., Левин И.И. Модульно-наращиваемые многопроцессорные системы со структурно-процедурной организацией вычислений. М.: Янус-К, 2003. 380 с.

3. Каляев А.В. Многопроцессорные вычислительные системы с программируемой архитектурой. М.: Радио и Связь, 1984. 240 с.

4. Левин И.И., Сластен Л.М. Реализация информационных графов в архитектуре многопроцессорных систем//СуперЭВМ и многопроцессорные вычислительные системы. Материалы Международной научно-технической конференции. Таганрог: Изд-во ТРТУ, 2002. С. 98-100.

5. Левин И.И., Сластен Л.М. Алгоритм коммутации элементов многопроцессорной системы со структурно-процедурной организацией вычислений//Методы и средства обработки информации: Труды первой Всероссийской научной конференции / Под ред. Л.Н. Королева. - М.: Издательский отдел факультета вычислительной математики и кибернетики МГУ им. М.В. Ломоносова, 2003. С. 119-124.

И.И. Левин, Н.Н. Дмитренко, С.В. Носков КОНТРОЛЛЕР РАЗДЕЛЯЕМОЙ ПАМЯТИ ДЛЯ МНОГОПРОЦЕССОРНОЙ ВЫЧИСЛИТЕЛЬНОЙ СИСТЕМЫ

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