小编use*_*869的帖子

'code=sm_X' 是只嵌入二进制(cubin)代码,还是 PTX 代码,或者两者都嵌入?

我对 '-gencode' 语句中的 'code=sm_X' 选项有点困惑。

示例:NVCC 编译器选项有什么作用

-gencode arch=compute_13,code=sm_13
Run Code Online (Sandbox Code Playgroud)

嵌入库中?

只有与CC 1.3,或GPU的机器代码(代码的cubin)与CC 1.3的GPU的PTX代码?

在“Maxwell 兼容性指南”中,声明“只有由 'code=' 子句指定的后端目标版本将保留在生成的二进制文件中”。

由此,我推断给定的编译器选项仅嵌入了带有 CC 1.3 且没有PTX 代码的GPU 的机器代码。这意味着,这将能够运行这个库例如,AA麦克斯韦代卡上,因为是从机器代码可能是“刚刚在时间”(JIT)编译库中没有内嵌代码PTX。

另一方面,在 NVIDIA 的 GTC 2013 演示文稿“作为应用程序构建工具的 CUDA 工具包简介”中,它表示“-gencode arch=compute_13,code=sm_13”对于所有 CC >= 1.3 的 GPU 来说就足够了,并且对于 CC > 1.3 的 GPU 使用此编译器选项,机器代码是从 PTX 代码进行 JIT 化的。因此,在我看来,Maxwell 兼容性指南和 GTC 演示中给出的信息是相互矛盾的。

cuda nvcc

3
推荐指数
1
解决办法
2172
查看次数

如何使用线程安全的全局纹理引用获取 GPU 内核(对于使用单个 GPU 的多个 CPU 线程)

当我们在多个 CPU 线程(所有 CPU 线程使用相同的 GPU)中并行运行某些 GPU 函数(例如,我们在多个位置使用纹理引用的点跟踪器)时,我们会遇到麻烦。

看来“纹理引用”(据我所知是“全局设备变量”)是问题所在,因为这些是我们拥有的唯一“全局”变量(注意“恒定内存”也可能是一个问题,但我们将重点关注现在讨论纹理参考问题)。正如我们在图像处理领域中一样,我们主要使用对 2D 图像(倾斜线性存储器)的纹理引用。

我们如何重写使用纹理引用的内核,以便它们是 CPU 线程安全的?有可能吗?请注意,在我们的框架中,我们计划为每个 GPU 提供 4 个 CPU 线程(每个 CPU 线程都是一个 GPU 工作线程,它发出一些“GPU 作业”,然后执行该作业)。

这个问题似乎与“纹理引用数组”的问题有关,我不知道现在使用较新的 Cuda Toolkit/较新的 GPU 架构是否可以使用纹理引用数组。请参阅论坛帖子

https://devtalk.nvidia.com/default/topic/376700/?comment=2688621

https://devtalk.nvidia.com/default/topic/368336/cuda-programming-and-performance/-help-compilation-problem-with-cuda-texture-cuda-texture-usage/

或者只需在 nvidia cuda 论坛中搜索“纹理引用数组”,就会发现这似乎确实是一个热门话题:-)

在这篇文章中提到了一个函数“cuTexRefCreate”,这是要走的路吗?我想它也可以在 cuda 运行时 api 中使用。但它似乎已被弃用,因此这可能不是一种安全的方法。

对这个问题的任何帮助将不胜感激。请注意,任何可能的策略也应该适用于 Fermi 架构 GPU。

一个相关的问题还在于,这个多线程问题是否也是最新开普勒架构的问题,在该架构中,“const __restrict”类型的指针可能会自动映射到纹理对象。

multithreading cuda

1
推荐指数
1
解决办法
1659
查看次数

标签 统计

cuda ×2

multithreading ×1

nvcc ×1