问题标签 [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.

0 投票
2 回答
21288 浏览

cuda - 在 Nvidia 的 NVCC 编译器中使用多个“arch”标志的目的是什么?

我最近了解了 NVCC 如何为不同的计算架构编译 CUDA 设备代码。

据我了解,当使用 NVCC 的 -gencode 选项时,“arch”是程序员的应用程序所需的最小计算架构,也是 NVCC 的 JIT 编译器将为其编译 PTX 代码的最小设备计算架构。

我也明白 -gencode 的“代码”参数是 NVCC 完全编译应用程序的计算架构,因此不需要 JIT 编译。

在检查了各种 CUDA 项目 Makefile 之后,我注意到以下情况经常发生:

经过一番阅读,我发现可以在一个二进制文件中编译多个设备架构 - 在本例中为 sm_20、sm_21。

我的问题是为什么需要这么多拱门/代码对?上面是否使用了“arch”的所有值?

那和说有什么区别:

“arch”字段中最早的虚拟架构是自动选择的,还是有其他一些晦涩的行为?

还有其他我应该注意的编译和运行时行为吗?

我已经阅读了手册http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#gpu-compilation,但我仍然不清楚编译或运行时会发生什么。

0 投票
3 回答
5080 浏览

cuda - PTX - 什么是 CTA?

我正在研究 PTX,但我不明白 CTA(计算线程数组)与 CUDA 块有何不同。

它们是一样的吗?在我看来,现在(我只是在 PTX 文档的开头)它们是一样的

0 投票
1 回答
198 浏览

cuda - PTX - .local 和 .param 之间的区别

我正在研究 PTX,但我不明白.param.local状态空间之间的区别。

.local是线程可见的变量并存储在它们的堆栈中(顺便说一下,线程内存)

.param是用于对象分配(如果按值传递)、函数参数和返回值以及输入参数的变量,它们也在堆栈上分配

在 PTX 手册上有:

在 PTX 中,可以使用 mov 指令将函数输入参数的地址移动到寄存器中。请注意,如果需要,参数将被复制到堆栈中,因此地址将在 .local状态空间中,并通过ld.localst.local 指令访问。

我不明白:.param如果.param==.local并且所有内容都已经在堆栈上,为什么要将 a 复制到堆栈中?

0 投票
1 回答
172 浏览

cuda - PTX - .reg 寄存器在哪里?

当我.reg用来声明寄存器时......它们在哪里?

我的意思是:如果我.reg在设备函数内部使用寄存器存储在每个线程拥有的寄存器文件中......但是如果我.reg在全局范围内的模块中声明一个变量(不是.global,只是全局范围)怎么办?

0 投票
2 回答
271 浏览

cuda - PTX ISA(携带传播)中的错误?

Cuda中有错误吗?我在 GTX580 上运行了以下代码,最后 r1 为零。我希望它是一种由于携带传播?我已经使用 Cuda Toolkit 4.2.9 和 5.5 测试了代码,并使用“nvcc -arch=sm_20 bug.cu -o bug && ./bug”来编译和运行它。

0 投票
3 回答
1188 浏览

cuda - 在CUDA中将类型转换为unsigned long long?

基本上我想要的是一个像 hiloint2uint64() 这样的函数,只需加入两个 32 位整数并将结果重新解释为 uint64。

我在 CUDA 中找不到任何可以做到这一点的函数,无论如何,是否有任何 ptx 代码可以进行这种类型转换?

0 投票
1 回答
506 浏览

cuda - ptx 中的原始数据类型

上面的代码来自这里: CUDA disable L1 cache only for one variable

根据作者的说法,“d”表示浮点数,“r”表示整数。

我想编写一小段内联 asm 代码,我想知道其余原始类型变量的符号(如 unsigned short、unsigned long long、float-32 等),我无法从 ptx isa 中找到它。

我用字母“l”代表unsigned long long,对吗?

0 投票
2 回答
739 浏览

optimization - 内联 PTX 是否比 C/C++ 代码更有效?

我注意到 PTX 代码允许一些具有复杂语义的指令,例如位字段提取 ( bfe)、查找最重要的非符号位 ( bfind) 和人口计数 ( popc)。

显式使用它们比在 C/C++ 中使用其预期语义编写代码更有效吗?

例如:“人口计数”,或popc,表示计数一位。所以我应该写:

对于该功能,或者我应该使用:

? 内联 PTX 会更高效吗?我们是否应该编写内联 PTX 以获得最佳性能?

还有 - GPU 是否有一些与 PTX 指令相对应的额外魔法指令?

0 投票
1 回答
336 浏览

cuda - 反汇编的 CUDA 微码中的明显冗余操作

我有以下内核执行全局内存矩阵in到全局内存矩阵的简单分配out

我正在检查由以下内容转储的反汇编微码cuobjdump

反汇编代码顶部或旁边的注释是我自己的。

如您所见,有一些明显无用的操作, ???在注释中标记。本质上,它们是寄存器自身的移动。

然后我有以下两个问题:

  1. 如果它们没用,我相信它们会无用地消耗计算时间。我可以通过删除它们来优化反汇编的微码吗?
  2. PTX 文件可以内联在 CUDA 代码中。然而,PTX 只是跨 GPU 的可移植性所需的一种中间语言。我可以以某种方式“内联”优化的反汇编微码吗?

非常感谢您提前。

编辑:在 SM = 2.0 的发布模式下编译的相同代码

编辑:在 SM = 2.1 的发布模式下编译的相同代码

0 投票
1 回答
5083 浏览

cuda - 如何在运行时生成、编译和运行 CUDA 内核

好吧,我有一个非常微妙的问题:)

让我们从我所拥有的开始:

  1. 数据,大量数据,复制到 GPU
  2. 程序,由 CPU(主机)生成,需要针对该数组中的每个数据进行评估
  3. 程序更改非常频繁,可以生成为 CUDA 字符串、PTX 字符串或其他(?),每次更改后都需要重新评估

我想要什么:基本上只是想让它尽可能有效(快速),例如。避免将 CUDA 编译为 PTX。解决方案甚至可以完全针对特定设备,这里不需要大的兼容性:)

我所知道的:我已经知道函数cuLoadModule,它可以从存储在文件中的 PTX 代码加载和创建内核。但是我认为,必须有其他方法可以直接创建内核,而无需先将其保存到文件中。或者也许可以将其存储为字节码?

我的问题:你会怎么做?您能否发布一个示例或链接到具有类似主题的网站?泰

编辑:现在好了,PTX 内核可以直接从 PTX字符串(字符数组)运行。无论如何,我仍然想知道,有没有更好/更快的解决方案?仍然存在从字符串到某些 PTX 字节码的转换,这应该可以避免。我还怀疑,可能存在一些从 PTX 创建设备特定 Cuda 二进制文件的巧妙方法,这将消除 JIT 编译器滞后(很小,但如果你有大量内核要运行,它可以加起来):)