c++ - 为什么在指定 -rdc=true 时 cuda 代码运行得更慢

标签 c++ cuda

我有很多用.h 和.cu 编写的类,所以我尝试了可重定位设备代码(-rdc=true)。耗时约 12 秒。然后我尝试合并代码,仅使用 header 类并删除 -rdc=true,仅用了 2 秒。

代码做的是sha1(some string) 0x40000次,用于winrar加密。

这是为什么呢?目前还可以,但我的项目会变大,单独编译会有用。 -rdc=true 会降低性能是正常行为吗?

最佳答案

如果函数代码位于单独的翻译单元中,而不是在您调用的入口点的 header 中,则不会发生内联。在这种情况下,函数调用会更昂贵。您可能希望使用 inline 关键字将时间关键型函数重新定位到头文件中,以便编译器有机会内联。​​

单独编译可能会产生对参数使用本地地址空间的结果(请参阅 http://docs.nvidia.com/cuda/parallel-thread-execution/index.html#abstracting-abi 以了解参数传递),这比此表所示的寄存器 (http://docs.nvidia.com/cuda/parallel-thread-execution/index.html#operand-costs) 要昂贵得多。

使用 inline 关键字将类实现文件中的一些方法移动到头文件中以避免链接问题可能是一种解决方案。

关于c++ - 为什么在指定 -rdc=true 时 cuda 代码运行得更慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36496562/

相关文章:

cuda - 如何将 device_vector 的每个元素递减一个常数?

compiler-errors - 我可以使用仅主机功能覆盖CUDA主机和设备功能吗?

c++ - 如何从子成员函数修改父公共(public)成员变量?

c++ - cmake 和 GenerateExportHeader

c++ - 检查 union 实例之间相等性的正确方法是什么?

c++ - 错误C2011 : 'class type redefinition - Basic Inheritance

c++ - 我使用统一内存运行内核函数后无法访问它

linux - DMA 通过 PCIe 到其他设备

c++ - 如何使用 CUDA Thrust 执行策略覆盖 Thrust 的低级设备内存分配器

c++ - 将文本和行添加到文件的开头