问题标签 [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 - 如何从 .cu 文件中获取 NVVM IR (LLVM IR) 以及如何将 NVVM IR 编译为二进制文件?
我有一个用于 CUDA 7.5 的 CUDA C/C++ 程序。众所周知:libNVVM 库 - 一个从 NVVM IR 生成 PTX 的优化编译器库。
我可以通过以下方式获得 PTX:nvcc -ptx <file>.cu -o <file>.ptx
但是我怎样才能从中获得 NVVM IR (LLVM IR) <file>.cu
?
以及如何为目标架构编译 NVVM IR (LLVM IR) 或 Optimized IR?
我是否需要这个第三方库或程序,例如:libcuda.lang,...?
NVVM 编译器(基于 LLVM)从 NVVM IR 生成 PTX 代码。
NVVM IR 和 NVVM 编译器大多与所使用的源语言无关。由于 DCI(驱动程序/编译器接口)的不同,NVVM 编译器的 PTX 代码生成部分需要知道源语言。
从技术上讲,NVVM IR 是 LLVM IR,具有一组规则、限制和约定,以及一组受支持的内在函数。NVVM IR 中指定的程序始终是合法的 LLVM 程序。合法的 LLVM 程序可能不是合法的 NVVM 程序。
c++ - 将 CUDA 数组作为单个对象处理
大约一个月来,我一直在努力解决这个问题,但我的 C 技能和我的 google-fu 都没有足够强大,无法提出解决方案。
我最喜欢的一个副项目已经并且继续尝试通过 reverse and add 方法找到数字 196 的回文:
一直如此,直到结果从前到后读取相同。
最近,我选择的方法是使用 cuda,但我一遍又一遍地遇到同样的问题。携带。
备份,我将内存中的数字表示为一个无符号字符数组,每个数字都是一个字符 - 所以本质上是解压的 bcd。
部分和的生成很容易并行。我将当前位数存储在设备内存中,然后在每次迭代中:
一切都很好。
现在是随身携带。
在一个完美的世界中,我希望发生以下情况:
在这个完美的世界里,这条线
如果 *ptr 中的最高有效字节大于 9,则会溢出到下一个字节。
但这不会发生,因此指示的行可以替换为:
接下来是所有用于屏蔽的 simd 指令。
如果你有这个存在的目标:(最多 Sig 到最少)
然后,最不充足的 int 的最高有效字节,当添加到 F6 时,将导致中间 int 的总和(pist 添加到 F6...所有字节都是 FF)导致其所有位翻转为 0 并携带进入最重要的 int。
因此,实际上,我想将整个数组视为一个二进制序列,并允许位翻转。
任何想法或想法将不胜感激。
c++ - CUDA PTX,驱动程序 api - 执行后如何从内核获取全局变量
这是内核代码的一部分 - 为每个线程声明变量和所需的操作
我想将每个线程中的不同变量添加到全局变量 sum。我假设上面发布的代码是正确的 - 一切都顺利编译。但是我无法将全局变量 sum 的值返回给主机。
在内核执行之后,我有以下主机代码。
但返回错误代码 500 "CUDA_ERROR_NOT_FOUND"
有什么方法可以将内核中声明的全局变量的值传递给主机,或者有什么方法可以通过不同的方法绕过这个问题?
assembly - 如何理解 CUDA/GPU 中的 SASS 分析结果
我使用 CUDA Binary Utilities 之一的 cuobjdump 来生成 SASS 代码,示例结果如下。这些代码尝试从全局内存中加载。
我在哪里可以获得解释每条指令含义的 SASS 代码的完整手册。在“cuda 二进制实用程序”中,它只提供了对指令含义的一般解释。例如,它没有解释 "R1.cc"、"IMAD.HI.X" 和 LD.e 的含义。
第二条指令是什么意思。我猜第一条是计算每个线程应该加载的内存地址,而第三条指令是将全局内存加载到寄存器中。我不知道第二条指令的含义。
我猜 cuda 会将一些参数信息,如网格大小、块大小和数组基址保存到常量内存中。在这种情况下,c[0x0][0x20] 是数组的基地址。我的问题是如何获得这些信息。
cuda - CUDA PTX f32.f32 纹理读取
是否可以直接使用浮点索引从 CUDA 纹理读取,例如我可以使用tex.1d.v4.f32.f32
.
这似乎在查看.ptx
文件时节省了两条指令,这反映在基准测试时性能的提高。然而,相当关键的缺点是,虽然这似乎运行没有问题,但它并没有产生预期的结果。
下面的代码演示了这个问题:
我已经在几张卡(K40、C2070)和几个 CUDA 版本(6.0、7.0)上尝试过这个,但总的来说我得到了相同的输出:
这是可能的还是我叫错了树?
assembly - “冗余”将操作移动到 Cuda 中的同一寄存器
我正在查看 CUDA SASS 代码,我注意到对相同寄存器的大量移动操作。前任:
我只是好奇,这些移动操作的目的是什么?是为了时机,他们的行为就像'nop'还是不太明显?
注意:这些不包含在 PTX 代码中,仅包含在 SASS 中。I 和假设在操作之间使用,而不是在 PTX 操作期间使用。虽然,就上下文而言,PTX 是:
实际c++
代码是上面 ptx 的内联汇编。
更新:sm_52
在Visual Studio 2013compute_52
中x64
使用 Cuda Toolkit 7.5
编译。设备:GTX 970(麦克斯韦 GPU)。
从 切换Debug
到Release
消除了这种低效率。
cuda - Cuda 签名 128 位乘法错误
我想我在使用有符号整数在 cuda PTX 中进行 128 位有符号乘法时发现了一个问题。这是我的示例代码:
这应该会产生结果result_lo = 0x0, result_hi = 0x0
。然而,这会产生结果:如果我没有弄错并且显然不是零result_lo = 0x0, result_hi = 0xFFFFFFFFFFFFFFFF
,这实际上是值。2^127 - (2^126 - 1)
首先,我想确保我的理解是正确的,但是,有没有办法解决这个问题?
更新从Debug
mod 更改为Release
mode 修复了这个问题,仍然想知道这是否是 cuda 中的错误?
更新 2 将此错误报告给 NVIDIA
将 Cuda 工具包 7.5 与 Visual Studio 2013 一起使用。x64 Debug
, sm_52
, compute_52
.
cuda - CUDA:如何使用 -arch 和 -code 以及 SM 与 COMPUTE
我仍然不确定在使用 nvcc 构建时如何正确指定代码生成的体系结构。我知道在我的二进制文件中嵌入了机器代码和 PTX 代码,这可以通过控制器开关-code
和-arch
(或两者的组合使用-gencode
)来控制。
现在,根据这一点,除了两个编译器标志之外,还有两种指定架构的方法:sm_XX
和compute_XX
,其中compute_XX
指的是虚拟架构和sm_XX
真实架构。该标志-arch
仅采用虚拟架构的标识符(例如compute_XX
),而该-code
标志同时采用真实架构和虚拟架构的标识符。
文档状态-arch
指定了为其编译输入文件的虚拟架构。但是,此 PTX 代码不会自动编译为机器代码,而是一个“预处理步骤”。
现在,-code
应该指定 PTX 代码针对哪些架构进行组装和优化。
但是,尚不清楚将在二进制文件中嵌入哪个 PTX 或二进制代码。例如-arch=compute_30 -code=sm_52
,如果我指定,这是否意味着我的代码将首先编译为功能级别 3.0 PTX,然后将创建功能级别 5.2 的机器代码?将嵌入什么?
如果我只是指定-code=sm_52
会发生什么?只有 V5.2 的机器代码会嵌入由 V5.2 PTX 代码创建的机器代码吗?和有什么区别-code=compute_52
?
cuda - CUDA - PTX 进位传播
我想在 CUDA PTX 中添加两个 32 位无符号整数,并且我还想处理进位传播。我正在使用下面的代码来执行此操作,但结果与预期不符。
根据文档,add.cc.u32 d, a, b
执行整数加法并将进位值写入条件代码寄存器,即CC.CF
.
另一方面,使用进位addc.cc.u32 d, a, b
执行整数加法,并将进位值写入条件代码寄存器。该指令的语义是. 我也试过没有区别。
d = a + b + CC.CF
addc.u32 d, a, b
据我所知,如果结果不适合变量,则会出现进位,如果符号位损坏,则会发生溢出,但我正在使用无符号值。
上面的代码尝试添加0xFFFFFFFF
,0x2
当然结果不适合 32 位,那么为什么我在__uaddc(0,0)
调用后没有得到 1 呢?
编辑
Nvidia Geforce GT 520mx
Windows 7 Ultimate,64 位
Visual Studio 2012
CUDA 7.0
cuda - PTX 代码性能
我知道 CUDA (不错),但我不知道PTX,所以我的问题是:
- 学习ptx代码是否有助于提高gpu(CUDA)代码的性能?
- 如果是的话,有没有办法写一个ptx代码,可以结合CUDA代码来提升性能?