我正在做一些测试,我意识到在编译时使用-G参数会给我带来比不使用它更差的性能。
我已经检查了Nvidia的文档:
--device-debug (-G)
Generate debug information for device code.
但它并没有帮助我知道为什么给我这么差的表现的原因。它在哪里以及何时生成这些调试信息?造成这种糟糕表现的原因是什么呢?
使用-G
开关会禁用nvcc
在设备代码中可能做的大多数编译器优化。由于这个原因,生成的代码通常比没有使用-G
编译的代码运行得慢。
通过cuobjdump -sass myexecutable
在每种情况下运行可执行文件并查看生成的设备代码,可以很容易地看到这一点。在非-G
的情况下,您通常会看到更少的设备代码,并且您也可以看到特定优化中的差异。
-G
中禁用。
还需要注意的是,在使用Thrust时,使用-G
开关可能会导致不可预测的行为。新版本的推力应该表现得更好,但在使用-G
编译推力代码时可能仍然存在意想不到的问题。