问题标签 [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 投票
1 回答
2513 浏览

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 程序。

0 投票
0 回答
84 浏览

c++ - 将 CUDA 数组作为单个对象处理

大约一个月来,我一直在努力解决这个问题,但我的 C 技能和我的 google-fu 都没有足够强大,无法提出解决方案。

我最喜欢的一个副项目已经并且继续尝试通过 reverse and add 方法找到数字 196 的回文:

一直如此,直到结果从前到后读取相同。

最近,我选择的方法是使用 cuda,但我一遍又一遍地遇到同样的问题。携带。

备份,我将内存中的数字表示为一个无符号字符数组,每个数字都是一个字符 - 所以本质上是解压的 bcd。

部分和的生成很容易并行。我将当前位数存储在设备内存中,然后在每次迭代中:

一切都很好。

现在是随身携带。
在一个完美的世界中,我希望发生以下情况:

在这个完美的世界里,这条线

如果 *ptr 中的最高有效字节大于 9,则会溢出到下一个字节。

但这不会发生,因此指示的行可以替换为:

接下来是所有用于屏蔽的 simd 指令。

如果你有这个存在的目标:(最多 Sig 到最少)

然后,最不充足的 int 的最高有效字节,当添加到 F6 时,将导致中间 int 的总和(pist 添加到 F6...所有字节都是 FF)导致其所有位翻转为 0 并携带进入最重要的 int。

因此,实际上,我想将整个数组视为一个二进制序列,并允许位翻转。

任何想法或想法将不胜感激。

0 投票
1 回答
251 浏览

c++ - CUDA PTX,驱动程序 api - 执行后如何从内核获取全局变量

这是内核代码的一部分 - 为每个线程声明变量和所需的操作

我想将每个线程中的不同变量添加到全局变量 sum。我假设上面发布的代码是正确的 - 一切都顺利编译。但是我无法将全局变量 sum 的值返回给主机。

在内核执行之后,我有以下主机代码。

但返回错误代码 500 "CUDA_ERROR_NOT_FOUND"

有什么方法可以将内核中声明的全局变量的值传递给主机,或者有什么方法可以通过不同的方法绕过这个问题?

0 投票
1 回答
2282 浏览

assembly - 如何理解 CUDA/GPU 中的 SASS 分析结果

我使用 CUDA Binary Utilities 之一的 cuobjdump 来生成 SASS 代码,示例结果如下。这些代码尝试从全局内存中加载。

  1. 我在哪里可以获得解释每条指令含义的 SASS 代码的完整手册。在“cuda 二进制实用程序”中,它只提供了对指令含义的一般解释。例如,它没有解释 "R1.cc"、"IMAD.HI.X" 和 LD.e 的含义。

  2. 第二条指令是什么意思。我猜第一条是计算每个线程应该加载的内存地址,而第三条指令是将全局内存加载到寄存器中。我不知道第二条指令的含义。

  3. 我猜 cuda 会将一些参数信息,如网格大小、块大小和数组基址保存到常量内存中。在这种情况下,c[0x0][0x20] 是数组的基地址。我的问题是如何获得这些信息。

0 投票
1 回答
143 浏览

cuda - CUDA PTX f32.f32 纹理读取

是否可以直接使用浮点索引从 CUDA 纹理读取,例如我可以使用tex.1d.v4.f32.f32.

这似乎在查看.ptx文件时节省了两条指令,这反映在基准测试时性能的提高。然而,相当关键的缺点是,虽然这似乎运行没有问题,但它并没有产生预期的结果。

下面的代码演示了这个问题:

我已经在几张卡(K40、C2070)和几个 CUDA 版本(6.0、7.0)上尝试过这个,但总的来说我得到了相同的输出:

这是可能的还是我叫错了树?

0 投票
0 回答
166 浏览

assembly - “冗余”将操作移动到 Cuda 中的同一寄存器

我正在查看 CUDA SASS 代码,我注意到对相同寄存器的大量移动操作。前任:

我只是好奇,这些移动操作的目的是什么?是为了时机,他们的行为就像'nop'还是不太明显?

注意:这些不包含在 PTX 代码中,仅包含在 SASS 中。I 和假设在操作之间使用,而不是在 PTX 操作期间使用。虽然,就上下文而言,PTX 是:

实际c++代码是上面 ptx 的内联汇编。

更新:sm_52在Visual Studio 2013compute_52x64使用 Cuda Toolkit 7.5 编译。设备:GTX 970(麦克斯韦 GP​​U)。

从 切换DebugRelease消除了这种低效率。

0 投票
1 回答
535 浏览

cuda - Cuda 签名 128 位乘法错误

我想我在使用有符号整数在 cuda PTX 中进行 128 位有符号乘法时发现了一个问题。这是我的示例代码:

这应该会产生结果result_lo = 0x0, result_hi = 0x0。然而,这会产生结果:如果我没有弄错并且显然不是零result_lo = 0x0, result_hi = 0xFFFFFFFFFFFFFFFF,这实际上是值。2^127 - (2^126 - 1)

首先,我想确保我的理解是正确的,但是,有没有办法解决这个问题?

更新Debugmod 更改为Releasemode 修复了这个问题,仍然想知道这是否是 cuda 中的错误?

更新 2 将此错误报告给 NVIDIA

将 Cuda 工具包 7.5 与 Visual Studio 2013 一起使用。x64 Debug, sm_52, compute_52.

0 投票
1 回答
34648 浏览

cuda - CUDA:如何使用 -arch 和 -code 以及 SM 与 COMPUTE

我仍然不确定在使用 nvcc 构建时如何正确指定代码生成的体系结构。我知道在我的二进制文件中嵌入了机器代码和 PTX 代码,这可以通过控制器开关-code-arch(或两者的组合使用-gencode)来控制。

现在,根据这一点,除了两个编译器标志之外,还有两种指定架构的方法:sm_XXcompute_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

0 投票
2 回答
686 浏览

cuda - CUDA - PTX 进位传播

我想在 CUDA PTX 中添加两个 32 位无符号整数,并且我还想处理进位传播。我正在使用下面的代码来执行此操作,但结果与预期不符。
根据文档add.cc.u32 d, a, b执行整数加法并将进位值写入条件代码寄存器,即CC.CF.
另一方面,使用进位addc.cc.u32 d, a, b执行整数加法,并将进位值写入条件代码寄存器。该指令的语义是. 我也试过没有区别。
d = a + b + CC.CFaddc.u32 d, a, b

据我所知,如果结果不适合变量,则会出现进位,如果符号位损坏,则会发生溢出,但我正在使用无符号值。
上面的代码尝试添加0xFFFFFFFF0x2当然结果不适合 32 位,那么为什么我在__uaddc(0,0)调用后没有得到 1 呢?

编辑

Nvidia Geforce GT 520mx
Windows 7 Ultimate,64 位
Visual Studio 2012
CUDA 7.0

0 投票
1 回答
586 浏览

cuda - PTX 代码性能

我知道 CUDA (不错),但我不知道PTX,所以我的问题是:

  • 学习ptx代码是否有助于提高gpu(CUDA)代码的性能?
  • 如果是的话,有没有办法写一个ptx代码,可以结合CUDA代码来提升性能?