使用nvcc编译器使用-G参数编译时GPU性能不佳



我正在做一些测试,我意识到在编译时使用-G参数会给我带来比不使用它更差的性能。

我已经检查了Nvidia的文档:

--device-debug (-G)                         
    Generate debug information for device code. 

但它并没有帮助我知道为什么给我这么差的表现的原因。它在哪里以及何时生成这些调试信息?造成这种糟糕表现的原因是什么呢?

使用-G开关会禁用nvcc在设备代码中可能做的大多数编译器优化。由于这个原因,生成的代码通常比没有使用-G编译的代码运行得慢。

通过cuobjdump -sass myexecutable在每种情况下运行可执行文件并查看生成的设备代码,可以很容易地看到这一点。在非-G的情况下,您通常会看到更少的设备代码,并且您也可以看到特定优化中的差异。

其中一个原因是高度优化的设备代码可能会消除实际的源代码行和实际的源代码变量。这使得调试代码变得非常困难。因此,为了启用调试,大多数优化都在-G中禁用。

还需要注意的是,在使用Thrust时,使用-G开关可能会导致不可预测的行为。新版本的推力应该表现得更好,但在使用-G编译推力代码时可能仍然存在意想不到的问题。

最新更新