CUDA 11 中的链接时优化 - 它们是啥以及如何使用它们?

Posted

技术标签:

【中文标题】CUDA 11 中的链接时优化 - 它们是啥以及如何使用它们?【英文标题】:Link-time optimizations in CUDA 11 - what are they and how to use them?CUDA 11 中的链接时优化 - 它们是什么以及如何使用它们? 【发布时间】:2021-05-26 17:43:09 【问题描述】:

CUDA 11 features announcement,据说现在有:

新的链接时间优化功能

nvcc 实际采用了哪些链接时优化(例如,相对于使用 g++ 或 clang++ 的主机端代码中的 LTO 功能)?

另外 - 是否需要做一些事情来启用 LTO,或者它是否总是会发生(与需要使用 -flto 开关编译的主机端代码不同?

【问题讨论】:

我还没有探索过这个新功能,但我会假设跨编译单元的函数内联是这些功能之一。应该很容易通过简单的实验来确认或反驳。 【参考方案1】:

部分答案:

要启用链接时优化,请在调用 NVCC 编译器时使用--dlink-time-opt(或dlto),用于编译和设备端代码链接。如果编译器找不到相关的中间信息,则不会应用(链接时)优化。

【讨论】:

【参考方案2】:

我的猜测是 -dlto 必须与编译时间和链接时间有关,如果您使用非 nvcc 链接程序,例如 gcc 或 g++,那么您可能无法获得最佳性能

【讨论】:

我已经说过了。

以上是关于CUDA 11 中的链接时优化 - 它们是啥以及如何使用它们?的主要内容,如果未能解决你的问题,请参考以下文章

Jet Engine 的查询优化是基于统计的,但是它们是如何用链接表刷新的呢?

弄清楚一个 cuda 内核有多少块和线程,以及如何使用它们

CUDA 中的编译时信息

CUDA nvvp 提供的报告中的“Instruction Issued”是啥意思?

什么是 CUDA 11 中引入的 L2 缓存 accessPolicyWindow

cuda是啥