Комбинированный формат инструкций SASS - PullRequest
3 голосов
/ 16 января 2020

Я не видел документ cuda, который описывает комбинированную форму инструкций SASS. Например, я знаю, что такое IADD и IMAD. Но

IMAD.IADD R8, R8, 0x1, R7 ;

не ясны. Какой операнд принадлежит какому коду операции? Как это выполняется? Кроме того, мы имеем дело с одним ADD и одним MAD , что означает два ADD и один MUL ? Или это рассматривается как один один MADD , что означает один ADD и один MUL ?

Как насчет IMAD.MOV.U32 R5, RZ, RZ, 0x0 ;? Как это интерпретируется?

1 Ответ

4 голосов
/ 17 января 2020

Архитектура Вольта и Тьюринга имеет два основных канала выполнения.

  1. Канал FMA отвечает за инструкции FFMA, FMUL, FADD, FSWZADD и IMAD.
  2. Ответственность за канал ALU для целых чисел (кроме IMAD), битовых манипуляций, логических инструкций и команд перемещения данных.

Канал ALU выполняет MOV и IADD3 . Канал FMA выполняет IMAD , включая варианты IMAD.IADD и IMAD.MOV .

Использование IMAD для эмуляции IADD и MOV позволяет компилятору Явно планируйте инструкции для канала FMA вместо канала ALU.

Из выводов компилятора ясно, что компилятор эмулирует двоичные целочисленные добавления и необработанные перемещения с IMAD, что обобщает оба. Суффикс - это просто дизассемблер, который хорошо сочетается с шаблоном и говорит, что операция семантически эквивалентна более простой операции. Последовательности IMAD.* умны, используя RZ (нулевой регистр), 0x0 и 0x1 для достижения sh этого. Когда дизассемблер видит такой шаблон, он добавляет суффикс .MOV op, чтобы сказать: «Эй, это просто простое движение».

Например,

IMAD.IADD R8, R8, 0x1, R7

- это:

R8 = 1*R8 + R7 = R8 + R7
IADD R8, R8, R7

(если существовало IADD)

Аналогично для случая MOV вы видите, что он использует RZ. Он эмулирует следующее.

MOV R5, 0x0

В Вольте есть операция MOV, но я почти никогда ее не вижу.

(Есть также версия с левым смещением на К IMAD.SHL Я думаю, который использует множитель 2 ^ K , где K - величина сдвига.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...