【问题标题】:Is there an assembly language for CUDA?CUDA 有汇编语言吗?
【发布时间】:2011-09-08 19:03:23
【问题描述】:

我问这个是因为我知道有一种方法可以使用二进制文件而不是源文件。

另外,我猜用汇编语言模拟函数指针会更容易。除非 GPU 上的程序集与 CPU 上的程序集完全不同。

【问题讨论】:

标签: assembly cuda


【解决方案1】:

您可能想看看 PTX。 NVIDIA 在 CUDA 4.0 文档中提供了描述它的文档。

http://developer.nvidia.com/nvidia-gpu-computing-documentation

NVIDIA 将 PTX 描述为“Ta 低级并行线程执行虚拟机和指令集架构 (ISA)。PTX 将 GPU 公开为数据并行计算设备。”不完全像 x86 汇编,但您可能会发现它很有趣。

【讨论】:

  • 值得指出的是,PTX 是一个虚拟指令集。每个不同的 NVIDIA 架构都有自己的 PTX 目标物理 ISA。类似于内联 x86 asm,可以将 PTX 指令内联到 CUDA 代码中。
【解决方案2】:

实际上有两种不同的 CUDA 汇编语言。

PTX 是一种独立于机器的汇编语言,可编译为 SASS,即在特定 GPU 系列上执行的实际操作码。如果你构建 .cubins,你就是在处理 SASS。大多数 CUDA 运行时应用程序都使用 PTX,因为这使它们能够在原始应用程序之后发布的 GPU 上运行。

此外,如果您的目标是 sm_20(Fermi/GTX 400 系列),函数指针已经在 CUDA 中使用了一段时间。

【讨论】:

    【解决方案3】:

    是的,GPU 上的组件与 CPU 上的组件完全不同。 区别之一是 GPU 的指令集没有标准化。 NVidia(以及 AMD 和其他 GPU 供应商)可以并且确实将其指令集从一种 GPU 模型更改为另一种。

    所以 CUDA 不公开汇编语言。没有意义。 (而 CUDA 的 C 方言以及它们支持的任何其他语言的限制是因为 GPU 硬件的限制,而不仅仅是因为 Nvidia 讨厌你并想惹恼你。所以即使你可以直接访问底层指令集和汇编语言,你将无法神奇地做你现在不能做的事情。

    (请注意,NVidia 确实定义了一个“虚拟”指令集,您可以使用并嵌入到您的代码中。但它不是 指令集,它不直接映射到硬件指令。它只不过是一种“看起来像”汇编语言的更简单的编程语言

    【讨论】:

    • 哦!很高兴知道...如果我什至不能期望该代码在不同的 GPU 上工作...这绝对是错误的方法!谢谢
    • 您的 CUDA 代码可以在不同的 GPU 上正常工作。 CUDA 只是将其编译为每个 GPU 的合适目标。
    猜你喜欢
    • 2023-03-06
    • 2010-12-24
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 2013-01-17
    • 2013-09-04
    • 1970-01-01
    相关资源
    最近更新 更多