Современные информационные технологии/1. Компьютерная  инженерия

 

Канд. техн. наук  Дордопуло А.И.

Южный научный центр Российской академии наук, г. Ростов-на-Дону, Россия

Канд. техн. наук Гудков В.А., канд. техн. наук Гуленок А. А.

НИИ многопроцессорных вычислительных систем имени академика А.В. Каляева Южного федерального университета, г. Таганрог, Россия

ПРОГРАММИРОВАНИЕ МНОГОКРИСТАЛЬНЫХ РЕКОНФИГУРИРУЕМЫХ ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ MITRION-C И COLAMO*

 

Рост аппаратного ресурса ПЛИС за последние 10 лет составил с 1 до 58 миллионов эквивалентных вентилей, а частоты со 100 МГц до 400 МГц, что позволило значительно расширить класс решаемых задач на реконфигурируемых вычислительных системах. Вместе с тем растет и сложность решаемых задач, что требует как повышения вычислительной мощности вычислительных систем, так и требований к их программированию.

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

Опыт решения различных классов задач в НИИ МВС ЮФУ показал, что для эффективного решения современных трудоемких задач программисту необходимы средства программирования, обеспечивающие:

- программирование на языке высокого уровня;

- поддержку многокристального программирования;

- обеспечение высокой частоты работы ПЛИС;

- высокую плотность заполнения кристалла ПЛИС;

- поддержку конвейерной и макроконвейерной организации вычислений.

В настоящее время среди зарубежных компаний, занимающихся разработкой высокоуровневых средств программирования ПЛИС, наиболее распространены средства разработки следующих фирм: Mitrionics, Celoxica, ImpulseAcceleratedTechnologiesи др. Программные комплексы, разрабатываемые этими компаниями, основаны на языках высокого уровня для программирования РВС, но используют разные подходы к программированию ПЛИС и содержат различные специализированные средства программирования. Однако все созданные языки высокого уровня являются специализированными подмножествами семейства языка C, т.е. имеют синтаксис, похожий на синтаксис языка C, но отличаются семантикой использования конструкций, ориентированных на параллельное программирование.

Одним из наиболее известных программных комплексов для программирования ПЛИС является комплекс, разработанный компанией Mitrionics, состоящий из виртуального процессора Mitrion VirtualProcessor (MVP), программирование которого осуществляется на языке высокого уровня Mitrion-C, и библиотеки функций для построения хост-программMithalAPI, входящих в пакет разработки Mitrion SDK.

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

Основным средством распараллеливания на языке Mitrion-C является распараллеливание на уровне циклов. Параллелизм на уровне циклов является явным и определяется ключевым словом «Foreach», что дает возможность пользователю самому определять, какие циклы он хочет распараллеливать. Следует отметить, что при распараллеливании циклов в аппаратуре выполняется реализация всех операторов, расположенных в теле цикла, до тех пор, пока не будут выполнены все итерации цикла или не закончится доступный ресурс.

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

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

Программирование РВС на языке Mitrion-C начинается с разработки параллельной программы, после которой выполняется отладка, которая осуществляется при помощи специализированного графического эмулятора. В режиме эмуляции работы программист может увидеть, как программа распараллеливает свою работу, найти возможные проблемные сегменты программы и модифицировать их. Затем происходят этап компиляции, на котором программа компилируется в архитектуру процессора MVP, и генерация битового файла для загрузки в ПЛИС. На этапе программирования архитектуры MVP каждый оператор языка Mitrion-C обвязывается соответствующими регистрами и вспомогательными структурами для его реализации в аппаратуре. С одной стороны, это позволяет обеспечить высокую тактовую частоту работы ПЛИС, с другой стороны, приводит к нерациональной затрате аппаратного ресурса и снижению плотности заполнения кристалла ПЛИС.

Разрабатываемая программа на языке Mitrion-C должна быть полностью реализована на одном виртуальном процессоре MVP, что не позволяет программировать многокристальные РВС, следовательно, существенно снижает эффективность использования программного комплекса компании Mitrionics.

Для программирования многокристальных РВС со связями между ПЛИС программисту необходимо самому реализовать интерфейс (протокол) обмена данными между ПЛИС и решить вопросы, связанные с синхронизацией потоков данных. В этом случае программа для РВС вырождается в программу для кластера (множество процессоров MVP), реализованного на ПЛИС.

Альтернативный подход к программированию РВС предлагается в Научно-исследовательском институте многопроцессорных вычислительных систем Южного федерального университета (НИИ МВС ЮФУ), занимающемся разработкой многокристальных реконфигурируемых вычислительных систем различной архитектуры и конфигурации уже более 15 лет. В настоящее время в НИИ МВС ЮФУ для программирования многокристальных РВС разработан и широко используется программный комплекс, состоящий из: языка высокого уровня COLAMO, транслятора параллельных программ, синтезатора конфигурационных файлов ПЛИС, средств отладки, а также программ доступа и мониторинга состояния РВС.

Язык высокого уровня COLAMO предназначен для описания реализации параллельного алгоритма и создания на основе принципов структурно-процедурной организации вычислений [1] в архитектуре РВС специализированной вычислительной структуры, которая предполагает последовательную смену структурно (аппаратно) реализованных фрагментов информационного графа задачи, каждый из которых является вычислительным конвейером потока операндов. Таким образом, приложение (прикладная задача) для РВС состоит из структурной составляющей, представленной в виде аппаратно реализованных фрагментов вычислений, и процедурной составляющей, представляющей собой единую для всех структурных фрагментов управляющую программу последовательной смены вычислительных структур и организации потоков данных. Для представления такой организации вычислений в языке используется понятие «кадр», под которым понимается программно-неделимый компонент, представляющий собой совокупность операторов, которые реализуются в виде арифметико-логических команд и команд чтения/записи, выполняемых на различных функциональных устройствах, соединенных между собой в соответствии с информационной структурой алгоритма.

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

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

Помимо типа доступа, для переменной в языке COLAMO определены также и типы ее хранения: мемориальный (Mem – используется для хранения значений в ячейке памяти), регистровый (Reg – используется для организации рекурсии) и коммутационный (Com – используется для описания связей между элементами информационного графа задачи)[1].

Трансляция программы на языке высокого уровня COLAMO состоит в создании схемотехнической конфигурации вычислительной системы (структурной составляющей) и параллельной программы, управляющей потоками данных (потоковой и процедурной составляющих) [2]. Создание структурной составляющей заключается в построении вычислительного графа, соответствующего описанным на COLAMO информационным зависимостям между результатами вычислений. При этом для каждой используемой в тексте программы операции подставляется специализированный вычислительный блок в зависимости от типа доступа к переменным, типа данных, их разрядности и т.д. Синтезированный вычислительный граф задачи передается в среду разработки вычислительных структур Fire!Constructor для укладки на множество ПЛИС РВС [3]. Результаты сравнительного анализа системного программного обеспечения на базе Mitrion-CMVP и COLAMO – Fire!Constructor представлены в таблице 1.

Таблица 1. Сравнительные характеристики средств программирования ПЛИС

Характеристика средств программирования ПЛИС

Mitrion-C - MVP

COLAMO -Fire!Constructor

Программирование на языке высокого уровня

Да

Да

Сложность программирования

Низкая

Высокая

Многокристальное программирование

Нет

Да

Частота синтезированного решения, МГц

100

200-320

Степень заполнения кристалла ПЛИС, %

75

90

 

В результате анализа данных, приведенных в таблице 1, можно сделать вывод о том, что для программирования многокристальных реконфигурируемых вычислительных систем наиболее предпочтительным является комплекс средств программирования COLAMO – Fire!Constructor, который, несмотря на более высокую сложность программирования, позволяет в автоматизированном режиме создавать решения прикладных задач для множества кристаллов ПЛИС, обеспечивая при этом в 2-3 раза большую частоту (и, соответственно, производительность) и более высокую степень заполнения кристалла ПЛИС.

 

Литература:

1. И.А. Каляев, И.И. Левин, Е.А. Семерников, В.И. Шмойлов Реконфигурируемые мультиконвейерные вычислительные структуры /Изд. 2-е, перераб. и доп. / Под общ. ред. И.А. Каляева. - Ростов-на-Дону: Изд-во ЮНЦ РАН, 2009. – 344 с.

2. В.А. Гудков, И.И.Левин Расширение языка высокого уровня COLAMO для программирования реконфигурируемых вычислительных систем на уровне логических ячеек ПЛИС [Текст] / И.И. Левин, В.А. Гудков // Вестник компьютерных и информационных технологий. – М.: Машиностроение, 2010. – № 12. - С. 10-17.

3. В.А. Гудков, А.А Гуленок, А.И. Дордопуло, Л.М. Сластен Средства программирования реконфигурируемых многопроцессорных вычислительных систем // Известия ТРТУ. Тематический выпуск «Интеллектуальные и многопроцессорные системы». – Таганрог: Изд-во ТРТУ, 2006. - № 16 (71). Специальный выпуск. – С. 16-20.

______________________________________

*Работа выполнена при финансовой поддержке Министерства образования и науки РФ по Соглашению о предоставлении субсидии №14.578.21.0006 от 05.06.2014, уникальный идентификатор RFMEFI57814X0006, гранту Южного федерального университета №213.01-2014/014 и НИР №2257 базовой части государственного задания №2014/174.