Синтаксис встроенного кода PTX для CUDA

Как написано в документе Nvidia Inline PTX Assembly, грамматика для использования встроенной сборки:asm("temp_string" : "constraint"(output) : "constraint"(input));
Вот два примера:
asm("vadd.s32.s32.s32 %0, %1.h0, %2.h0;" : "=r"(v) : "r"(a), "r"(b));
asm("vadd.u32.u32.u32 %0.b0, %1, %2, %3;" : "=r"(v) : "r"(a), "r"(b), "r"(z));
В обоих примерах есть такие параметры как:h0 или же b0 следовать %n, Я просмотрел официальный документ CUDA и не нашел никаких сомнений относительно значения h0 или же b0, я видел h0,h1 а также b0,b1,b2,b3, Похоже h0 или же h1 представляет 16-битное значение, в то время как bn представляет значение байта. Кто-нибудь знает точное значение этого?

Спасибо за помощь от Роджера Даля. Я прочитал PTX ISA 3.0 и нашел ответ.
"h" означает полуслово. h0 означает низкое половинное слово 32-битного слова. h1 означает старшее полуслово 32-битного слова. "b" означает целочисленный байт. b0,b1,b2 а также b3 представляет первый 8-битный, второй 8-битный, третий 8-битный и старший 8-битный из 32-битного слова.

1 ответ

Решение

vadd является одной из специальных инструкций для видео, которые включены в PTX. Описание полного PTX ISA включено в дистрибутив CUDA. На моей машине это в C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.1\doc\ptx_isa_3.0.pdf, Описание h0, h1, b0и т. д., указатели в 8.7.11 Video Instructions раздел. Они представляют различные неявные операции сдвига / маски (см. optMerge функция).

Другие вопросы по тегам