Андреев С. С., Дбар С. А., Лацис А. О., Плоткина Е. А.

Гибридный реконфигурируемый вычислитель.

Основные понятия.
Руководство программиста
Структура Руководства.
Часть 1. Базовое подмножество языка.
          •  Исходные коды примеров.
Часть 2. Типовые приемы программирования.
Часть 3. Расширенные возможности языка.
Руководство пользователя
Инженерная методика адаптации приложения к гибридному кластеру с ускорителями на ПЛИС.

Основные понятия.

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

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

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

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

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

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

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

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

Структура Руководства программиста.

Часть 1 Руководства - Базовое подмножество языка – иллюстрирует разработку простейших схем с использованием основополагающих языковых конструкций Автокода HDL. Эта часть Руководства является самостоятельным документом. Для его понимания не требуется никакой предварительной подготовки. В то же время, для понимания всех последующих документов уверенное владение сведениями, изложенными в Части 1, совершенно необходимо. В приложении приведены исходные тексты всех примеров.

Часть 2 Руководства - Типовые приемы программирования – иллюстрирует основные понятия модели программирования Автокода HDL, и дает общие рекомендации по эффективному использованию базовых языковых конструкций. Интуитивно сложившееся у читателя после изучения Части 1 представление о модели программирования, ее отличии от модели программирования привычных фоннеймановских языков, в этой части Руководства систематизируется, поясняется подробнее, иллюстрируется несколько более сложными примерами. После изучения этого документа пользователь должен быть способен строить векторно-конвейерные схемы и оценивать их быстродействие. Также должно появиться достаточно полное представление о том, как именно достигается ускорение расчета за счет схемной реализации.

Часть 3 Руководства - Расширенные возможности языка – посвящена более мощным конструкциям Автокода, которые надстроены над базовыми с целью повышения компактности и простоты записи схемы. Эти возможности сами по себе не вносят ничего нового в модель программирования, но позволяют значительно сократить объем текста схемы и повысить его «читабельность». Понимание необходимости и естественности описанных в этом документе языковых конструкций должно быть подготовлено изучением предшествующих документов.

 
 
 
 
 
 
 
 
  Тел. +7(499)220-79-72; E-mail: inform@kiam.ru