2.2.2. Описание поведения

К семантике поведения акселератора относятся следующие элементы модели mA: множество ресурсов RA, функция ресурсов rA, множество операций ΨA, множество дескрипторов команд IA и функция декодирования dA (вместе с CA).

2.2.2.1. Операции

Для задания операций из ΨA используется язык C++. Ячейки памяти акселератора доступны в качестве глобальных переменных (регистровые файлы и памяти в виде массивов). Для удобства описания могут объявляться собственные локальные переменные. Также могут быть использованы возможности специальной библиотеки (например, N-битные типы данных INT< N>, UINT< N>, типы данных с фиксированной точкой FIXED< I,F>, операции битовых манипуляций и т.п.). Используемые в операции ресурсы обозначаются в виде вызова функции UseResources(resources) (тем самым задается функция rA). В существующей реализации список используемых в данной операции ресурсов передаются в виде битовой строки, где каждый ресурс соответствует определенному биту. Множество ресурсов RA задается в виде перечисления (enum) со значениями элементов по степеням двойки:

enum Resources {MAC_ADDER=1, MAC_MULTIPLIER=2, ALU_ADDER=4};

Пример 1. Операция по сложению двух 36-ти разрядных чисел:

void ADD_36_36(INT<36>& res, INT<36> a, INT<36> b) {

UseResources(MAC_ADDER);

res = a + b;

}

Пример 2. Операция по перемножению двух 16-ти разрядных знаковых чисел:

void SMUL_16_16(INT<32>& res, INT<16> a, INT<16> b) {

UseResources();

res = a * b;

}

Заданная на C++ операция может быть оформлена в виде отдельной функции (см. примеры выше) или встраиваться непосредственно в тело функции поведения команды (см. примеры в 2.2.2.2).

2.2.2.2. Дескрипторы команд

Дескрипторы команд акселератора из IA задаются соответствующими функциями поведения команд. Функция поведения может принимать аргументы в виде параметров инструкции pi. Тем самым одна функция поведения может описывать набор дескрипторов (один дескриптор соответствует одному конкретному набору значений параметров). Тело функции поведения может описываться на языке C++. Отображение в операции для соответствующих значений состояния команды t неявно задается путем использования специальной функции FinishCycle(). Вызовы данной функции отделяют операции внутри функции поведения, относящиеся к последовательным тактам исполнения (значениям параметра t дескриптора команды). Для описания динамического характера выбора операций в зависимости от состояния акселератора (аргумент дескриптора s) в описании функции поведения команды допускается использование управляющих конструкций языка C, в частности циклов и ветвлений (см. пример 3 ниже). Вызов функции FinishCycle() означает окончание всех операций для текущего такта команды и соответствует управляющему действию next. Возврат из функции поведения команды соответствует управляющему действию end. Использо-вание такого решения позволяет эффективно описывать дескрипторы команд, тем самым определяя потактовое поведение команд акселератора.

Пример 1. Однотактовая команда перемещения между регистрами, содержащая единственную операцию, задаваемую конструкцией

GRF[greg] = LRF[lreg]:

ACC_FUNCTION Move_LREG_GREG(INT<4> lreg, INT<4> greg) {

GRF[greg] = LRF[lreg];

FinishCycle();

}

Пример 2. Двухтактовая команда перемножения и аккумуляции результата. На первом такте происходит перемножение операндов (операция SMUL_16_16 - см. пример 2 в 2.2.2.1), на втором аккумуляция результата (операция ADD_36_36 - см. пример 1 в 2.2.2.1):

ACC_FUNCTION MAC_LREG_GREG(INT<4> grs, INT<4> grt) {

SMUL_16_16 (mulres, GRF[grs], GRF[grt]);

FinishCycle();

ADD_36_36 (ACC, ACC, mulres);

FinishCycle();

}

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

Пример 3. Команда свертки векторов, расположенных в памятях DM0 и TM0. Длительность команды зависит от данных (длина векторов задается регистром LOOPREG). Заметим, что в теле цикла за один такт выполняются несколько операций, использующих непересекающиеся ресурсы. Для синхронизации с процессором используется механизм прерывания:

ACC_FUNCTION CONV_ACC_DM0_TM0(INT<4> dreg, INT<4> treg) {

SMUL_16_16 (mulres, DM0[AR[dreg]++], TM0[AR[treg]++]);

FinishCycle();

while (LOOPREG>0) {

ADD_36_36 (ACC, ACC, mulres);

SMUL_16_16 (mulres,

DM0[AR[dreg]++], TM0[AR[dreg]++]);

LOOPREG--;

FinishCycle();

}

ADD_36_36 (ACC, ACC, mulres);

InterruptProcessor();

FinishCycle();

}

2.2.2.3. Функция декодирования

Функция декодирования dA задается описанием множества пар из формата машинного слова команды и ссылки на функцию поведения команды:

INSTRUCTION(< format_string>, < invoker_name>);

Формат машинного слова команды задается строкой в следующем алфавите:

Битовые символы: '0' и '1'

Параметрические символы: 'A-Z' и 'a-z'

Групповой символ: '*'

Разделительный символ: '-'

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

Непрерывная цепочка параметрических символов задает операнд. Декодер акселератора выделит указанные биты и передаст полученное значение в функцию поведения команды в виде параметра pi. Различные операнды разделяются групповым или разделительным символом. Операнды нумеруются в порядке справа налево.

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

Пример:

INSTRUCTION("11-**-0000-0000-0001-LREG-GREG", Move_LREG_GREG);

Функция поведения MoveLREG_GREG (см. пример 1 в 2.2.2.1) имеет два параметра по 4 бита каждый (LREG[4;7] и GREG[0;3]). Биты [20;21] могут принимать любые значения для данной команды (в данном примере эти биты относятся к коду акселератора и используются командой запуска акселератора основного процессора). Остальные биты фиксированы и составляют КОП инструкции аскелератора.

Заметим, что совокупность всех строк форматов машинного слова задает множество допустимых кодов инструкций данного акселератора (CA в 2.1.2).

Число управляющих слотов NS задается директивой SLOTS(< NS>).

2.3. Ассемблерный синтаксис команд акселератора

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

Описание ассемблерного синтаксиса системы команд состоит из трех секций:

Секция типов операндов и псевдонимов

Секция команд

Секция ограничений (constraints)

Детальное рассмотрение средств описания синтаксиса команд выходит за рамки данной статьи. Ниже приводится только краткий обзор основных возможностей.


Информация о работе «Динамическая поддержка расширений процессора в кросс-системе»
Раздел: Информатика, программирование
Количество знаков с пробелами: 56501
Количество таблиц: 2
Количество изображений: 0

Похожие работы

Скачать
216821
0
4

... система обеспечивает совместное функционирование всех устройств ПК и предоставляет пользователю доступ к его ресурсам. WINDOWS 95, WINDOWS 98, WINDOWS ME, WINDOWS XP. Состав Операционной системы: 13)      Программный модуль, управляющий файлами. 14)      Командный процессор (выполняет команды пользователя). 15)      Программы, обеспечивающие управление работой различных устройств (ввода, ...

Скачать
200225
20
0

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

Скачать
232852
0
0

... с приглашением по запросу (в машинной графике)required parameter обязательный параметрrequired space обязательный пробел (в системах подготовки текстов)requirements specification 1. техническое задание 2. описание требований к программному средствуrerun перезапуск, повторный запускreschedule переупорядочивать очередь (о диспетчере операционной системы)reschedule interval период переупорядочения ...

Скачать
227829
16
5

... этому представлен данный дипломный проект, который является первым в своем роде в г. Астрахани. В данном дипломном проекте рассматривается проблема построения локальной корпоративной сети звукового обеспечения интеллектуального здания на основе технологии Fast Ethernet для Областного центра детского и юношеского творчества г. Астрахани. Целью дипломного проекта является организация локальной ...

0 комментариев


Наверх