c - 是否可以将汇编指令放入 CUDA 代码中?

标签 c assembly cuda inline-assembly ptx

我想在 CUDA C 代码中使用汇编代码 为了减少昂贵的处决 正如我们在 C 语言编程中使用 asm 一样。

这可能吗?

最佳答案

自 CUDA 4.0 起,CUDA 工具链支持内联 PTX。工具包中有文档对其进行了描述:Using_Inline_PTX_Assembly_In_CUDA.pdf

下面是一些演示在 CUDA 4.0 中使用内联 PTX 的代码。请注意,此代码不应用作 CUDA 内置 __clz() 函数的替代品,我编写它只是为了探索新的内联 PTX 功能的各个方面。

__device__ __forceinline__ int my_clz (unsigned int x)
{
    int res;

    asm ("{\n"
         "        .reg .pred iszero, gezero;\n"
         "        .reg .u32 t1, t2;\n"
         "        mov.b32         t1, %1;\n"
         "        shr.u32         %0, t1, 16;\n"
         "        setp.eq.b32     iszero, %0, 0;\n"
         "        mov.b32         %0, 0;\n"
         "@iszero shl.b32         t1, t1, 16;\n"
         "@iszero or.b32          %0, %0, 16;\n"
         "        and.b32         t2, t1, 0xff000000;\n"
         "        setp.eq.b32     iszero, t2, 0;\n"
         "@iszero shl.b32         t1, t1, 8;\n"
         "@iszero or.b32          %0, %0, 8;\n"
         "        and.b32         t2, t1, 0xf0000000;\n"
         "        setp.eq.b32     iszero, t2, 0;\n"
         "@iszero shl.b32         t1, t1, 4;\n"
         "@iszero or.b32          %0, %0, 4;\n"
         "        and.b32         t2, t1, 0xc0000000;\n"
         "        setp.eq.b32     iszero, t2, 0;\n"
         "@iszero shl.b32         t1, t1, 2;\n"
         "@iszero or.b32          %0, %0, 2;\n"
         "        setp.ge.s32     gezero, t1, 0;\n"
         "        setp.eq.b32     iszero, t1, 0;\n"
         "@gezero or.b32          %0, %0, 1;\n"
         "@iszero add.u32         %0, %0, 1;\n\t"
         "}"
         : "=r"(res)
         : "r"(x));
    return res;
}

关于c - 是否可以将汇编指令放入 CUDA 代码中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3677220/

相关文章:

c - 需要帮助在 C 中实现二进制搜索

c - 使用带有 while 循环的 scanf 输入两个单独的字符串

objective-c - 如何缩短逻辑或中的多重相等性检查?

assembly - .com 文件格式的详细信息是什么?

c++ - 当我们在CUDA中调用内核时,是否发生上下文切换?

c - IPP链接到非线程静态库时是否线程安全?

c - 我们可以在常规寄存器中存储浮点吗?

winapi - ntdll.dll 内部 ZwCreateUserProcess 的远跳转

visual-studio-2010 - 如何在 Visual Studio 2010 中设置 CUDA 编译器标志?

c++ - 如何在同时使用 Intel C++ 和 CUDA C++ 的 Eclipse-nsight 中创建项目?