2014-05-11 81 views
0

我正在做一些测试,并且我意识到编译时使用-G参数给我的性能比没有它好。使用nvcc编译器与-G参数编译时,GPU性能不佳

我在Nvidia的检查文档:

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

但它并没有帮助我知道为什么给我这么糟糕表现的原因。 它在哪里产生这个调试信息以及何时?这可能是导致这种糟糕表现的原因?

+2

我不知道nvcc的细节,但通常打开调试信息会禁用一堆编译器优化,以使生成的代码更好地匹配源代码。 – DrC

回答

5

使用-G开关disables most compiler optimizationsnvcc可能会在设备代码中执行。由于这个原因,生成的代码通常比没有编译为-G的代码运行得慢。

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

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

另请注意,与Thrust,使用-G开关may result in unpredictable behavior。较新版本的推力应该表现得更好,但在编译推力代码时可能仍然存在意想不到的问题,其编号为-G

+0

感谢您的详细解释和来源。 –