我正在做一些測試,並且我意識到編譯時使用-G參數給我的性能比沒有它好。使用nvcc編譯器與-G參數編譯時,GPU性能不佳
我在Nvidia的檢查文檔:
--device-debug (-G)
Generate debug information for device code.
但它並沒有幫助我知道爲什麼給我這麼糟糕表現的原因。 它在哪裏產生這個調試信息以及何時?這可能是導致這種糟糕表現的原因?
我正在做一些測試,並且我意識到編譯時使用-G參數給我的性能比沒有它好。使用nvcc編譯器與-G參數編譯時,GPU性能不佳
我在Nvidia的檢查文檔:
--device-debug (-G)
Generate debug information for device code.
但它並沒有幫助我知道爲什麼給我這麼糟糕表現的原因。 它在哪裏產生這個調試信息以及何時?這可能是導致這種糟糕表現的原因?
使用-G
開關disables most compiler optimizations即nvcc
可能會在設備代碼中執行。由於這個原因,生成的代碼通常比沒有編譯爲-G
的代碼運行得慢。
通過在每種情況下運行您的可執行文件,通過cuobjdump -sass myexecutable
並查看生成的設備代碼,可以很容易地看到這一點。在非-G
的情況下,您通常會看到較少的設備代碼,您也可以在特定的優化中看到不同之處。
其中一個原因是高度優化的設備代碼可能會消除實際的源代碼行和實際的源代碼變量。這可能會使代碼調試非常困難。因此,要啓用調試,大多數優化將被禁用,其中-G
。
另請注意,與Thrust,使用-G
開關may result in unpredictable behavior。較新版本的推力應該表現得更好,但在編譯推力代碼時可能仍然存在意想不到的問題,其編號爲-G
。
感謝您的詳細解釋和來源。 –
我不知道nvcc的細節,但通常打開調試信息會禁用一堆編譯器優化,以使生成的代碼更好地匹配源代碼。 – DrC