问题标签 [ptxas]
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 - 如何实现涉及多个变量的自定义原子函数?
我想在 CUDA 中实现这个原子函数:
我不相信我可以用任何原子函数来做到这一点。我需要为几个指令锁定几个全局内存位置。我可以用 PTXAS(汇编)代码来实现吗?
gcc - 带 PTX 输出的 NVCC 单独编译
只是为了看看 CUDA 生成什么样的代码,除了目标文件之外,我还喜欢编译为 ptx。由于我的一些循环展开可能需要很长时间,我希望能够编译*.cu→<code>*.ptx→<code>*.o而不是在*.cu→<code>*.ptx和*.cu→< code>*.o,我目前正在这样做。
只需添加-ptx到该nvcc *.cu行即可提供所需的 ptx 输出。
使用ptxas -c编译*.ptx可以*.o工作,但在我的可执行链接中导致错误:Relocations in generic ELF (EM: 190).
尝试编译*.ptxwith静默nvcc失败,不输出任何内容。
我需要传递一些选项ptxas吗?我应该如何通过单独编译通过 ptx 正确编译?或者,我可以告诉nvcc保留 ptx 吗?
c++ - CUDA ptxas 错误“函数使用了太多共享数据”
我以前从未使用过 CUDA 或 C++,但我试图从(http://www.maisondelasimulation.fr/projects/RAMSES-GPU/html/download.html运行中获取 Ramses GPU。由于 autogen 中的错误。我使用 ./configure 并让这个工作正常。所以生成的 makefile 包含以下 NVCC 标志
但是当我尝试使用 make 编译程序时,我得到了多个 ptxas 错误:
我正在尝试在两个 NVIDIDA C1060 上使用内核 2.6 和 CUDA 4.2 在 Linux 上编译此代码(我尝试在我的大学中进行此操作,但他们没有定期升级东西。)。我尝试用 sm_20 替换 sm_10、sm_11 和 sm_13,(我在这里看到了这个修复:Entry function uses too much shared data (0x8020 bytes + 0x10 bytes system, 0x4000 max) - CUDA error)但这并没有解决我的问题。你有什么建议吗?如果您需要,我可以上传 Makefile 以及其他所有内容。谢谢您的帮助!
c++ - CUDA:--ptxas-options=-v 共享内存和 cudaFuncAttributes.sharedSizeBytes 不匹配
我正在尝试在结构中使用and 在reqRegs运行时动态优化内核的块大小。sharedSizeBytescudaFuncAttributes
我当前的实现从标准输出文本中浏览nvcc --ptxas-options=-v以发现内核的寄存器和共享内存使用情况。这种方法有点hacky,并且取决于输出文本的确切格式--ptxas-options=-v,可能会在没有警告的情况下更改。
我的问题是我看到--ptxas-options=-v输出中报告的“smem”共享内存值sharedSizeBytes与cudaFuncAttributes结构中的差异,这让我担心我一直使用的共享内存估计是错误的,或者sharedSizeBytes变量不可靠,这意味着我不能将它用于运行时块大小优化。这是nvcc --ptxas-options=-v一个这样的内核的输出......
...与cudaFuncAttributes.sharedSizeBytes运行时的值 = 296 相比,对于完全相同的内核。有人知道这里会发生什么吗?
这是另一个使用不同内核的示例:
其中cudaFuncAttributes.sharedSizeBytes= 340 在运行时。
谢谢。
cuda - CUDA ptxas 的 --abi-compile=yes 选项有什么作用(需要寄存器)?
NVIDIA CUDA 的 PTX 优化汇编器ptxas具有以下选项:
那是什么ABI?当你禁用它时会发生什么?这似乎导致使用的寄存器更少,嗯......
(受此GTC 2011关于寄存器溢出的演示的启发提出的问题。)
cuda - __device__ 函数中的 NVCC 寄存器使用报告
我正在尝试使用NVCC选项获取有关我的CUDA内核中寄存器使用情况的一些信息,虽然使用全局函数一切都很好,但我在使用设备时遇到了一些困难,因为
--ptxas-options=v
ptxas info : Used N registers
输出中缺少行。关于调用全局函数,我尝试使用 noinline 关键字并将它们保存在另一个文件中,因为我认为NVCC正在报告全局函数的完整寄存器使用情况,包括在内联之后被调用的设备,但没有任何变化。我可以获得有关设备功能的寄存器使用情况的信息,仅将它们定义为全局。
你有什么建议吗?
谢谢!
cuda - 支持 `__shfl()` 和 `__shfl_sync()` 指令的正确方法是什么?
据我了解,CUDA 10.1 删除了以下shfl说明:
PTX ISA 6.4 版删除了以下功能:
对于 .targetsm_70 及更高版本,已删除对不带限定符的支持
shfl和投票指令。.sync自 PTX ISA 6.0 版以来,此支持已被弃用,如 PTX ISA 6.2 版中所述。
shfl支持未来和过去 CUDA 版本的正确方法是什么?
我当前的方法(在下面共享)导致使用 CUDA 10.1 出错:
另外,我想补充一点,我的项目的依赖项之一是CUB,我相信他们使用相同的方法来拆分_sync()和旧shfl指令。我不确定我做错了什么。
cuda - 解释 ptxas 的详细输出,第二部分
这个问题是解释 ptxas 的详细输出的延续,第一部分。
当我们用 编译一个内核.ptx文件ptxas -v,或者用 用一个.cu文件编译它时-ptxas-options=-v,我们会得到几行输出,例如:
(与链接到的问题中的示例相同;但名称拆解)
这个问题是关于最后一行的。来自其他内核的更多示例:
除了使用的寄存器数量之外,我们如何解释这一行的信息?具体来说:
- 是
cmem常量记忆的缩写吗? - 为什么有不同的类别,
cmem即cmem[0],,?cmem[2]cmem[14] smem可能代表shared memory; 它只是静态共享内存吗?- 每种条目在什么情况下会出现在这一行?
cuda - 为什么 nvcc 拒绝链接这个简单的合作组程序?
考虑以下 CUDA 程序,在一个名为 的文件中foo.cu:
这个程序做的不多——但它是一个有效的程序(如果你的计算能力足够高,可以支持整个网格作为一个合作组)。它应该编译链接并运行。但是,我明白了:
奇怪!如果我添加一些特定-l的-L标志并没有帮助,例如:
为什么会这样?我应该如何修改 nvcc 命令行以使其找到未解析的符号?
笔记:
- 我正在使用 Devuan GNU/Linux 3.0。
- CUDA 10.1 作为分发包安装,因此其库位于
/usr/lib/x86_64-linux-gnu. - 带有 GeForce 1050 Ti 卡的 x86_64 机器。
cuda - 如何禁用有关不确定堆栈大小的 ptxas 警告?
编译 CUDA 设备代码时,您可能会收到错误消息(为了便于阅读而使用换行符):
这可能有几个原因,比如动态内存分配或使用递归,但现在这些都不重要。我想至少在某些功能内禁用警告。问题是,我不知道要使用哪个令牌。搜索此列表是没有用的(按照此处关于禁用特定警告的建议)-因为这些是 NVCC 的 C/C++ 前端中的警告,而不是汇编程序。
那么如何禁用此警告?