Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Разбиение рабочей матрицы и запись весовых коэффициентов




Для разбиения матрицы на строки и столбцы можно либо воспользоваться выпадающим списком стандартных разбиений (nbl, nbh, sbl, sbh), либо вводить константы разбиения в окна ввода, либо разбить матрицу в визуализаторе с помощью кнопок-переключателей. Все изменения в матрице отображаются в визуализаторе и в окнах ввода. Для удобства 64-х разрядные регистры разбиения (nb1 и sb) разделены на младшие и старшие части. При необходимости, можно скопировать значение младшей части регистра в старшую часть (кнопка "->"). Следует учитывать, что при работе с арифметико-логическими командами (в отличие от команд взвешенного суммирования) разбиение можно задать только в регистрах nbl и nbh, то есть вектора на входах X и Y будут иметь одинаковое разбиение. В операции взвешенного суммирования разбиение на столбцы (nbl, nbh) может отличаться от разбиения на строки (sbl, sbh). Весовые коэффициенты можно задать щелчком мыши в визуализаторе матрицы, устанавливая/сбрасывая необходимые биты. Альтерна­тивный способ – вызов окна диалога из всплывающего меню. В этом случае, можно задать значение всей строке, либо одному весовому коэффициенту. В окне диалога предусмотрен ввод шестнадцатеричных и десятичных значений. Для просмотра всех введённых весов можно воспользоваться генератором кода (кнопка "Code"). Весовые коэффициенты будут записаны в секцию данных в массиве Weights.

Установка входных значений

Входные значения (Entry X, Entry Y), маску (Mask X, Mask Y), пороги для функции активации можно задать щелчком мыши в визуализаторе матрицы на соответствующих регистрах, устанавливая/сбрасывая необходимые биты, либо вводя значения в соответствующие окна ввода.

Генератор кода

Сформированная пользователем команда, входные значения, константы разбиения и другая введённая пользователем информация используются для генерирования листинга ассемблерного кода. В листинге определены секция данных (значения, определённые пользователем) и секция кода – пример реализации функции с вызовом векторной команды. Генератор кода включается кнопкой "Code".

Замечания

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

Порядок выполнения работы

1.Запустите программу NMCalculator, разверните её на весь экран, и выберите в главном меню: Setup->Step of grid->5 для 15” монитора или Setup->Step of grid->6 для 17” монитора.

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

    • Выберите операцию взвешенного суммирования, установив флажок на индикаторе vsum.
    • Разбейте рабочую матрицу на 16 строк по 4 бита. Для этого, выберите из выпадающего списка поля sbl нужное значение. При этом, это значение будет автоматически скопировано и в старшую часть этого регистра.
    • В результате такого разбиения получилась матрица из 16 ячеек. Теперь, в каждую ячейку запишите весовой коэффициент равный 1. Для этого, щёлкая правой кнопкой мыши на ячейке, выберите пункт всплывающего меню Set element… и в появившемся окне введите 1.

На этом конфигурирование векторного процессора заканчивается и он настроен на выполнение определённой функции. Остаётся подать исходные данные на входы Х и Y рабочей матрицы, и мы получим результат вычислений в регистре afifo. Введите в поле Х 64-разрядную константу 1111111111111111 h, а вход Y пока использовать не будем. Для того чтобы ввести число, вовсе не надо отсчитывать 16 цифр, т.к. больше чем 16 цифр программа в любом случае не даст Вам ввести. Кроме того, следует помнить, что во все окна редактирования данные вводятся и выводятся через них в 16-ричной системе счисления. При этом если введено/выведено менее 16-ти цифр, то предполагается, что слева число дополняется недостающими нулями. Итак, посмотрим, что же мы получили в результате. Если всё сделали правильно, то в afifoбудет число 10 h (16), т.е. это просто сумма 16-ти 4-разрядных тетрад каждая из которых равна 1 h (0001 b). Далее, выполните следующее:

  • Подайте на вход Y 2 h. Как видите, она прибавляется к результату.
  • Измените значение на входе X таким образом, чтобы результат снова стал равным 10 h. Занесите в отчет это значение.
  • Верните начальные значения входов Х (=1111111111111111 h) и Y (=0 h).
  • Изменим конфигурацию рабочей матрицы: установите в ноль значение весового коэффициента самой нижней ячейки. При этом значение результата должно стать на единицу меньше ( fh). Объясните почему это происходит. Пояснения занесите в отчет.
  • Удалите одну единицу со входа Х. Какую по-вашему, единицу Вы удалили – старшую или младшую? Как при этом изменится результат? Запомните это для себя.
  • Теперь повторите последние 3 пункта, но весовой коэффициент надо установить в ноль не нижней ячейки, а самой верхней. Обратите внимание, что при удалении одной единицы со входа Х, т.е. замене его старшей тетрады на ноль, результат в afifo уже не уменьшается на 1 как прежде. Объясните почему это происходит. Пояснения занесите в отчет.
  • Верните начальные значения входов Х (=1111111111111111 h), Y (=0 h) и конфигурацию рабочей матрицы.
  • Разбейте рабочую матрицу на 2 столбца по 32 бита каждый. Задайте значения весовых коэффициентов рабочей матрицы в левом столбце следующими: самый нижний -1, второй снизу 2 h, а остальные оставьте равными 0. Для того чтобы ввести -1 не обязательно переводить её в ffffffffh, можно вводить прямо в десятичной системе, установив переклю­чатель в окне ввода весового коэффициента на Decimal. Проанализируем результат: 100000010. Младшие 8 цифр (00000010) – это результат прошлой операции по сложению всех тетрад входа Х плюс младшие 32 разряда входа Y. А вот старшие 8 цифр (00000001) – это результат новой операции, которая равна удвоенному значению второй тетрады за вычетом первой тетрады и плюс старшие 32 разряда входа Y. Таким образом, мы запро­граммировали векторный узел процессора на одновременное выполнение двух операций над одними и теми же входными данными. Это является одной из отличительных черт процес­сора NM6403, которая позволяет добиваться очень высокой производительности и широко используется на практике. Реально, можно совмещать и большее число различных операций. Ограничение существует лишь в том, что при возникновении переполнения в одном из столбцов оно теряется и никак не фиксируется, так что программист должен сам оценивать и задавать необходимую ему разрядность данных от 1 до 64 (по столбцам) и от 2 до 64 (по строкам), даже не обязательно кратную 2. Например, можно разбить матрицу на три столбца следующим образом: 5/27/32 или 1/2/21/40. Допустимо использование не всей матрицы.
  • Измените слово на входе Х на следующее: 11 h. Выпишите результат операции в отчет и объясните его.
  • Измените слово на входе Х на следующее: 1 h. Выпишите результат операции в отчет и объясните его.

3. Теперь Вам предстоит самостоятельно запрограммировать рабочую матрицу на вычисление 64-разрядного вектора, который в последующих пунктах будет использоваться Вами. Для этого потребуются числа дней рождения Вашей бригады. Исходя из того, что в месяце максимальное число дней 31 = 1 Fh, для разрядности входных данных достаточно 8 бит. Числа необходимо перевести в 16-ричную систему и, при необходимости, дополнить слева нулём до двух 16-ричных цифр. Затем, эти числа записываются по порядку в поле Х. Например, если после перевода получились числа 1 Ah и Ch, то в поле Х их надо ввести так: 1 A0 C или так: C1 A, но не так: 1 AC. Это важно потому, что иначе данные не будут соответствовать разбиению матрицы и результат будет отличен от ожидаемого. Теперь разбейте рабочую матрицу на 64 ячейки (8 бит х 8 бит). В каждом столбце будут выполняться свои операции, которые перечислены ниже в порядке от младших разрядов к старшим. Для их решения, необходимо задать нужные весовые коэффициенты и, при необходимости, соответствующие разряды слова на входе Y. В результате получится искомый вектор, отдельные части которого являются решениями этих задач. Итак, задачи:

1.Вычислите сумму всех дней рождения.

2.Из самого большого дня рождения вычтите остальные.

3.Из суммы всех дней рождения, кроме самого малого вычтите самое малое умноженное на 3 h.

4.Вычислите сумму произведений всех дней рождений на соответствующие им месяца.

5.Вычислите сумму всех дней рождения за вычетом их количества.

6.Вычислите сумму всех дней рождения плюс их количество.

7.Младший байт входа Х.

8.Противоположное значение старшего байта входа Х, отличного от 00 h.

Значение входов Х, Y, выхода в afifo и конфигурацию рабочей матрицы (в виде таблицы весовых коэффициентов) занесите в отчет в 16-ричной системе.

9.Кнопкой Clear all очистите конфигурацию процессора. Результат прошлой операции занесите в поле Х. Сейчас, необходимо, с помощью операции взвешенного суммирования поменять местами тетрады в слове Х. Подумайте, как это сделать. Значение выхода в afifo и конфигурацию рабочей матрицы (в виде таблицы весовых коэффициентов) занесите в отчет.

10.Кнопкой Clear all очистите конфигурацию процессора. Теперь рассмотрим операции векторного АЛУ. Векторное АЛУ, в отличие от скалярного работает над 64-разрядными данными. Чтобы его использовать, снимите флажок vsum. Помните, что разбиение на элементы при использовании векторного АЛУ одинаково для входов Х и Y, и задаётся регистром nb. Занесите в поле Y результат полученный в пункте 3, поле Х оставьте равным 0, а разбиение задайте произвольно. Выберите операцию вычитания. В результате получим: afifo = XY. Значение входов Х, Y, выхода в afifo и выполняемую операцию занесите в отчет в 16-ричной системе. Рекомендуется записывать в столбик – цифра под цифрой.

11.Сложите на векторном АЛУ результат прошлой операции с результатом пункта 3 не меняя разбиение. Занесите данные, результат и операцию в отчет. Результат должен быть равен 0 h.

12.Проинвертируйте побитно на векторном АЛУ результат пункта 3. Подумайте, какие для этого нужно выбрать операции, значения входов Х, Y и разбиение на элементы. Занесите данные, результат и операцию в отчет в двоичной системе. Убедитесь в правильности результата.

13.Поочерёдно выполните побитовые операции and, or и xor над результатами предыдущего пункта и пункта 3. Все данные, результаты и операции занесите в отчет в двоичной системе. Убедитесь в правильности результатов.

14.Кнопкой Clear all очистите конфигурацию процессора. Рассмотрим операцию маскирования. Выполните операцию маскирования с векторным умножением (см. раздел 1.4.3), настроив процессор согласно первому примеру в пункте 1, но на Y подайте не 0, а то же, что на Х (1111111111111111 h). При этом, вектор масок задайте равным: ffffffffffffffff h и 0 h. Все данные, результаты и операции занесите в отчет. Убедитесь в правильности результатов.

15.Кнопкой Clear all очистите конфигурацию процессора. Выполните операцию логического маскирования (см. раздел 1.4.3), задав на вход Х – результат пункта 3, на вход Y – 8888888888888888 h и Mask = f0f0f0f0f0f0f0f0 h. Все данные, результаты и операции занесите в отчет. Убедитесь в правильности результатов.

16.Кнопкой Clear all очистите конфигурацию процессора. Рассмотрим обработку данных функцией активации. Выполните операцию арифметической активации входа Х (см. раздел 1.4.4) складывая Х (=f31f05) с нулём на векторном АЛУ. При этом, задайте разбиение на элементы по 8 бит с верхним порогом насыщения равным 15 и соответственно, нижним равным -16. Все данные, результаты и операции занесите в отчет в двоичной системе. Убедитесь в правильности результатов.

17.Кнопкой Clear all очистите конфигурацию процессора. Выполните операцию логической активации входа Х (см. раздел 1.4.4), приняв Х равным результату пункта 3. Используйте операцию and с Y = ffffffffffffffff h. При этом, разбиение на элементы задайте равным 16 элементам по 4 бита каждый (см. табл. 1-1). Все данные, результаты и операции занесите в отчет в двоичной системе. Убедитесь в правильности результатов.

18.Кнопкой Clear all очистите конфигурацию процессора. Рассмотрим операцию циклического сдвига вправо операнда Х (см. раздел 1.4.5). Задайте всей матрице, как одной ячейке, весовой коэффициент равный 1 h, чтобы она просто складывала Х и Y. Выполните операцию взвешенного суммирования операнда Х (=0000000000000001 h) и Y (=0 h) два раза: с и без операции shift. Все данные, результаты и операции занесите в отчет. Убедитесь в правильности результатов.

Контрольные вопросы

  1. Перечислите основные внутренние блоки процессора NM6403 и поясните их назначение.
  2. Какова разрядность интерфейса с внешней памятью процессора NM6403?
  3. Состав и назначение скалярного процессора.
  4. Перечислите основные элементы векторного процессора и поясните их назначение.
  5. Какова разрядность узлов векторного процессора?
  6. Как может быть сформировано и обработано слово упакованных векторных данных?
  7. Какие операции способен выполнять векторный процессор?
  8. Поясните суть операции взвешенного суммирования и приведите примеры её использования.
  9. Какие операции способно выполнять векторное АЛУ? Чем оно отличается от скалярного АЛУ?
  10. Каковы особенности выполнения операций на векторном АЛУ при возникновении переполнений?
  11. Чем определяется разбиение на элементы при операциях на рабочей матрице и на векторном АЛУ?
  12. Поясните суть операции маскирования с векторным умножением.
  13. Поясните суть операции логического маскирования, с какими операциями она используется?
  14. Поясните суть операции арифметической активации, с какими операциями она используется?
  15. Поясните суть операции логической активации, с какими операциями она используется?
  16. Поясните суть операции циклического сдвига вправо операнда Х, с какими операциями она используется?
  17. Каков порядок выполнения преобразований над данными на векторном процессоре?

 

Лабораторная работа № 7

Программирование процессора NeuroMatrix ® NM 6403

Цель работы.

Целью работы является ознакомление с языком ассемблера процессора NeuroMatrix® NM6403 (Л18789 ВМ1) и возможностями, которые он предоставляет программисту.










Последнее изменение этой страницы: 2018-05-10; просмотров: 237.

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