【发布时间】:2014-08-04 03:01:06
【问题描述】:
根据文档,在计算能力为 1.x 的设备中,编译器默认内联 __device__ 函数,但对于计算能力为 2.x 及更高版本的设备,只有在编译器认为合适的情况下才会这样做。什么时候不适合?还有限定符,例如__noinline__ 和__forceinline__。在哪些情况下最好不要内联 __device__ 函数?
【问题讨论】:
-
This post 可能正在回答您的问题。
-
感谢该链接,但在哪些情况下明确使用 noinline 会有所帮助?例如,它是否有助于降低非常大内核的寄存器压力?
-
在我使用
__noinline__的情况下,它被用来限制代码大小,从而减少过多的编译时间。我知道使用__noinline__对注册压力没有可预测的影响。内联可能允许更激进的代码移动,例如加载调度,这可能会增加寄存器压力,而不内联可能会由于 ABI 限制而增加寄存器压力。我从来没有发现使用__noinline__可以提高性能的情况,但这种情况当然可能存在。 -
@njuffa 我认为你的评论值得回答。
-
@Farzad:感谢您的认可。我已将评论扩展到下面的答案,并希望这能回答提问者的问题。
标签: cuda inline device compiler-optimization