问题标签 [ptx]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cuda - 如何编译 PTX 代码
我需要修改PTX代码并直接编译。原因是我想要一个接一个的特定指令,并且很难编写导致我的目标 PTX 代码的 cuda 代码,所以我需要直接修改 ptx 代码。问题是我可以将其编译为(fatbin 和 cubin),但我不知道如何将这些(.fatbin 和 .cubin)编译为“Xo”文件。
cuda - CUDA/PTX 32 位与 64 位
CUDA 编译器具有生成 32 位或 64 位 PTX 的选项。这些有什么区别?就像 x86 一样,NVidia GPU 实际上有 32 位和 64 位 ISA?还是仅与主机代码有关?
c++ - 将内核链接到 PTX 函数
我可以使用 PTX 文件中包含的 PTX 函数作为外部设备函数将其链接到另一个应该调用该函数的 .cu 文件吗?
这是来自CUDA的另一个问题- 将内核链接在一起,其中函数本身不包含在 .cu 文件中,但我宁愿有一个 PTX 函数以某种方式链接。
llvm - LLVM NVPTX 后端结构参数零大小
加载由 LLVM 的 NVPTX 后端生成的 PTX 程序集时,我遇到了一个模糊的异常。(我正在从 ManagedCuda 加载 PTX - http://managedcuda.codeplex.com/)
这是模块的 LLVM IR(有点奇怪,因为它是由工具生成的)
这是生成的 PTX
我不知道如何阅读 PTX,但我觉得问题与structtest 函数定义中的.b0
位有关。.param .b0 structtest_param_0
传递非结构值(如整数或指针)可以正常工作,并且.b0
. 函数的位读取类似.b32
或.b64
这样做时的一些理智的东西。
将三元组更改为 nvptx-nvidia-cuda(32 位)没有任何作用,包括/排除http://llvm.org/docs/NVPTXUsage.html中建议的数据布局
这是 NVPTX 后端的错误,还是我做错了什么?
更新:
我正在查看这个 - http://llvm.org/docs/doxygen/html/NVPTXAsmPrinter_8cpp_source.html - 它看起来好像类型正在下降到 line 01568
,显然不是原始类型,并且Ty->getPrimitiveSizeInBits()
返回零。(至少这是我的猜测,无论如何)
我是否需要添加一个特殊情况来检查它是否是一个结构,获取地址,制作参数byval
,然后取消引用结构?这似乎是一个 hacky 解决方案,但我不确定如何解决它。
c - 在 cuda 设备函数中使用省略号
我正在尝试将一些 C 代码移植到 cuda 内核。我移植的代码普遍使用省略号。当我尝试在如下所示的设备函数中使用省略号时,我收到一条错误消息,指出设备函数中不允许使用省略号。
但是,cuda 支持在主机和设备函数中使用 printf,并在自己的代码中使用省略号,如下 common_functions.h 中所示。
有没有办法在设备函数中使用省略号?
我不想硬编码最大数量的参数,然后更改所有调用。
我也不想编写自定义可变参数函数方法。
我还尝试创建一个 PTX 文件,我可以用它来替换省略号的用法,因为 ISA PTX 文档似乎具有处理可变参数的工具(请注意,文档说它不支持它们,然后提供了一个带有支持功能和示例的段落.也许,有一个错字?)。在下面定义的过程中,我一直得到一个简单的 PTX 文件,但在最后一条评论中遇到了可执行问题。我计划阅读 nvcc 编译器文档以尝试理解这一点。
我正在使用 GTX660,我认为它是 Ubuntu 12.04 上的 3.0 级和 cuda 5.0 工具包。
关于下面提到的“魔法”的更新:
在我看来,编译器中一定发生了一些特别的事情来限制省略号的使用并做一些特别的事情。当我如下调用 printf 时:
我很惊讶在 ptx 中发现了这个:
然后
在我看来,编译器接受 printf 的省略号,但随后交换对 vprintf 的调用并手动动态创建 va_list。va_list 是设备函数中的有效类型。
optimization - 开发 PTX 而不是 CUDA 进行优化。有意义吗?
我正在开发 cuda 代码。但是宣布了 PTX 或 SPIR 后端的新设备语言。我可以遇到一些他们正在开发的应用程序。至少我认为我们可以说 ptx 语言足以在产品级别开发一些东西。
众所周知,PTX 不是真正的设备代码。它只是 NVidia 的中间语言。但我的问题是如果我开发 PTX 而不是 CUDA 会怎样?如果我使用 ptx,我可以开发自然优化的代码吗?有意义吗?
另一方面,为什么/什么是 PTX 语言的动机?
提前致谢
c++ - Ptx 程序集因错误而中止
我曾尝试在 MS Visual Studio 2012 中的 C/CUDA 5.5 上编写乘法 CSR 矩阵和向量的程序,但遇到 ptx 错误。我的代码清单:
这是我在VS中得到的:
嗬我能修吗?
cuda - CUDA:使用 NVPTX 编译 LLVM IR
对于我的项目,我以两种不同的方式为某些功能生成 PTX 指令。第一种方法使用 CUDA C 来实现函数和 nvcc 来编译它们,使用 nvcc -ptx <file>.cu -o <file>.ptx
. 另一种方法是用不同的语言编写代码,从中生成 LLVM IR,然后使用 NVPTX 后端将其编译为 ptx。我在这里遇到的问题是某些功能在第二种情况下表现更差。其他功能或多或少会产生可比的性能。
现在我想知道为什么某些功能的性能存在如此差异(以及为什么其他功能没有),但是使用 nsight 进行分析还没有给我任何好主意。
我发现的唯一区别是寄存器的使用。在生成的 ptx 代码中,我可以看到以下内容:
使用 nvcc 编译
使用 nvptx 编译
据我了解,这表示使用的虚拟寄存器的数量和类型,但正如您可以清楚地看到的,这在第二种情况下是不正确的。使用 nsight 进行分析后,我可以看到第一种情况下实际使用的寄存器/线程数为 8,第二种情况下为 31。当然,这可能说明了为什么第二种情况下的代码比较慢,但问题是我所有使用 NVPTX 从 LLVM IR 编译到 ptx 的函数都有这个问题。它们都有 396 个使用过的虚拟寄存器,并且 nsight 为所有这些报告了 31 个使用过的寄存器/线程,即使某些函数产生的性能几乎与第一种情况完全相同。
这是我减速的问题吗?为什么它不影响所有功能?如果不是,那么可能导致减速的原因是什么?你能就我应该看的方向给出任何提示吗?
谢谢!
(使用的 LLVM 版本是 3.3)
编辑:我注意到的另一个区别是失速原因:
NVCC:
NVPTX:
显然,“其他”原因相对增加。也许这可以解释问题?
编辑:添加 ptx 源代码
此处显示的函数将数据从全局内存复制到共享内存。然后每个线程将自己的元素和前一个元素与数组中的最后一个元素进行比较。如果比较结果为正,则将索引写入输出数组。
1) LLVM IR 使用 NVPTX 编译成 PTX
2) 使用 nvcc 编译为 PTX 的 CUDA C
opencv - nvcc:致命错误:编译多个 GPU 代码实例时不允许使用选项“--cubin (-cubin)”
尝试在带有 GTX760、CUDA v5.0 的 Win7 x64 机器上使用 VS2010 编译 OpenCV 2.4.8 的 GPU 模块,每个对象构建例程后都会出现以下错误:
nvcc:致命错误:编译多个 GPU 代码实例时不允许使用选项“--cubin (-cubin)”
这是什么意思?我应该在构建之前更改我的 CMake 参数中的某些内容吗?
我在一个工作库之上构建,只是试图让我的应用程序构建和识别 CUBLAS,这样我就可以使用 gemm 进行子空间投影。