Синтаксис встроенного кода 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
функция).