Язык эффективного программирования векторного узла процессоров семейства NeuroMatrix®, приближенный к математической нотации

Вид материалаДоклад

Содержание


О языке nmvcpl
Планы по развитию
Пример программы
Подобный материал:
Язык эффективного программирования векторного узла процессоров семейства NeuroMatrix®, приближенный к математической нотации

Автор доклада: Бирюков А.А., ЗАО НТЦ «Модуль», ведущий инженер-программист, leshabirukov@gmail.com;

Архитектура NeuroMatrix® - оригинальная разработка ЗАО НТЦ «Модуль», применяемая в цифровой обработке сигналов[1].

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

Постановка задачи


Процессорное ядро NeuroMatrix® делится на универсальную скалярную часть, отвечающую за управление и инфраструктуру, и специализированную векторную, на которую в задачах обработки сигналов ложится основная вычислительная нагрузка. Высокоуровневое программирование скалярного кода обеспечивает компилятор С/С++[1], векторное же ядро ранее программировалось на ассемблере, а конечный пользователь писал программу с использованием библиотеки векторно-матричных операций на языке С/С++.

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

Описанные проблемы потребовали повышения уровня языка программирования. В связи с этим было решено разработать высокоуровневое средство эффективного программирования вычислительных задач на матричном устройстве NeuroMatrix.

Один из подходов – разработка языка специального, отражающего особенности целевого устройства. В качестве примера успешной реализации его следует упомянуть технологию CUDA фирмы NVidia[3].

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

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

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

О языке nmvcpl


В качестве средства решающего поставленную задачу предлагается язык nmvcpl, NeuroMatrix vector core programming language. Синтаксис языка максимально приближен к математической записи операций над матрицами. В то же время, практически любая конструкция на целевом языке ассемблера может быть выражена средствами языка.

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

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

Кроме того, язык содержит встроенное средство описания массивов констант, вычисляемых по формуле, описанной как выражение на языке С/С++ на этапе компиляции.

Планы по развитию


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

Также будет полезным реализовать PC-кодогенератор для целей тестирования

Пример программы


В
// Пример: переупаковка массива часел.

.nmvcpl_begin

.offsets_by_rows // Считать смещения в строках


const int totalSize = 256; // Размер массива

const int bitsIN = 4; // Размер поля на входе

const int bitsOUT = 8; // Размер поля на выходе


const int columns = 64/bitsIN; // Размерности матричной формы

const int rows = totalSize/rowSize;


// Единичная матрица

int:bitsOUT [r:columns][columns] ID =

.constants " r==_i_ ? 1 : 0 ";

int:bitsIN [r:rows][columns] A = addr_a + r; // Вход

int:bitsOUT [r:rows][columns] C = addr_c + r; // Выход

C=A * ID; // Вычисление


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


Было бы сложно написать (и тем более, автоматически оттранслировать) эту программу используя универсальный ЯП, поскольку 4-битные целые встроенным типом обычно не являются.

Результаты


В качестве средства высокоуровневого средства разработки эффективных программ для векторного ядра NeuroMatrix создан язык nmvcpl и компилятор для него. На языке реализовано несколько прикладных функций, в том числе КИХ-фильтр и быстрое преобразование Фурье на 256 точек. Оттранслированные программы запускались на плате мц5101, содержащей процессор архитектуры NeuroMatrix 1879ВМ4 (NM6405), и продемонстрировали скорость выполнения, близкую к скорости функции, написанной на ассемблере вручную, при сохранении точности результатов.

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

Табл. 1. Скорость БПФ-256 в сравнении с библиотечной функцией

Реализация

Процессор

Тактов процессора

Библиотечная функция на ассемблере

nm6403

3662[2]

Код, полученный из nmvcpl-программы

nm6405

3880






Литература

1. В. Черников, П. Виксне, А. Шелухин, П. Шевченко, А. Панфилов, А. Бирюков, А. Рузавин. Семейство процессоров NeuroMatrix® - архитектура, кросс-средства разработки программ, перспективы развития, Сборник трудов второй международной научно-практической конференции "Современные информационные технологии и ИТ-образование" под ред. проф. В.А.Сухомлина, Москва, 2006

2. В. Кашкаров, С. Мушкаев. Организация параллельных вычислений в алгоритмах БПФ на процессоре NM6403. – , журнал "Цифровая обработка сигналов", No1, 2001

3. NVidia CUDA Reference Manual (англ.), доступен для загрузки на .nvidia.com/object/cuda_3_2_toolkit_rc.php