在内联 ptx 汇编 CUDA 中使用 SIMD 视频指令

Posted

技术标签:

【中文标题】在内联 ptx 汇编 CUDA 中使用 SIMD 视频指令【英文标题】:Using SIMD video instructions in inline ptx assembly CUDA 【发布时间】:2013-06-25 02:39:24 【问题描述】:

我想使用 SIMD 视频指令(vadd4、vmax4 等) http://docs.nvidia.com/cuda/pdf/ptx_isa_3.1.pdf 中的第 8.7.13 节

我在我的代码中尝试了以下内容

asm("vadd4.u32.u32.u32 %0, %1, %2, %3;" : "=r"(i) : "r"(j) : "r"(k) : "r"(l));

其中 i,j,k,l 是 int 变量。我使用了“r”,因为它是 .u32 reg 的约束

但是在编译时,我得到以下错误

错误:未知的寄存器名称“r”

我应该在这里使用什么来代替“r”?还是代码中还有其他问题? (我使用的是计算能力为 3.5 的 Tesla 卡)

【问题讨论】:

【参考方案1】:

我相信你有一个轻微的语法错误。试试这个:

asm("vadd4.u32.u32.u32 %0, %1, %2, %3;" : "=r"(i) : "r"(j) , "r"(k) , "r"(l));

                                                           ^        ^
                                                           |        |
Note the replacement of two of your colons (:) with commas (,)

您不妨参考以下文档:

/usr/local/cuda/doc/pdf/Using_Inline_PTX_Assembly_In_CUDA.pdf

(假设安装了标准的 cuda 5 linux;如果在 Windows 机器上,只需使用文件搜索功能)

该文件的第 4 页指出:

...您可以有多个输入或输出操作数,用逗号分隔。

【讨论】:

您可以在 NVIDIA 向注册开发人员提供的包装函数头文件中找到通过内联 PTX 使用 SIMD 视频指令的示例:devtalk.nvidia.com/default/topic/535684/announcements/…

以上是关于在内联 ptx 汇编 CUDA 中使用 SIMD 视频指令的主要内容,如果未能解决你的问题,请参考以下文章

ptx 汇编中的 %f, %rd 是啥意思

CUDA PTX f32.f32 纹理读取

既找不到 .cubin 也找不到 .ptx 文件编译 CUDA

将 PTX 程序直接传递给 CUDA 驱动程序

CMAKE Cuda/ptx 项目上的重复代码生成标志

缺少 8 位变量的 CUDA 内联 PTX 约束字母,以禁用 8 位变量的 L1 缓存(布尔)