完全禁用NVCC上的优化

时间:2012-08-06 01:34:24

标签: optimization cuda gpu nvcc

我正在尝试测量GPU上的峰值单精度触发器,因为我正在修改PTX文件以在寄存器上执行连续的MAD指令。不幸的是,编译器正在删除所有代码,因为它实际上没有任何用处,因为我不执行任何数据的加载/存储。是否有编译器标志或编译指示要添加到代码中,以便编译器不会触及它?

感谢。

5 个答案:

答案 0 :(得分:5)

要使用nvcc完全禁用优化,您可以使用以下命令:

nvcc -O0 -Xopencc -O0 -Xptxas -O0  // sm_1x targets using Open64 frontend
nvcc -O0 -Xcicc -O0 -Xptxas -O0 // sm_2x and sm_3x targets using NVVM frontend

请注意,生成的代码可能非常慢。 -O0标志传递给主机编译器以禁用主机代码优化。 -Xopencc -O0和-Xcicc -O0标志控制编译器前端(生成PTX的部分)并关闭那里的优化。 -Xptxas -O0标志控制编译器后端(将PTX转换为机器代码的部分)并关闭该部分中的优化。请注意,-Xopencc,-Xcicc和-Xptxas标志是组件级标志,除非在nvcc手册中有说明,否则应视为不受支持。

答案 1 :(得分:2)

我认为没有办法在编译器中关闭这种优化。您可以通过添加代码来存储您的值并将该代码包装在始终为false的条件语句中来解决此问题。要使编译器无法确定始终为false的条件,请至少使用一个变量(而不仅仅是常量)。

答案 2 :(得分:1)

(我仍在使用CUDA 4.0,新版本可能已更改)

要禁用ptxas(将ptx转换为cubin的工具)的优化,您需要传递一个选项--opt-level 0(默认为--opt-level 3)。如果您想通过nvcc传递此选项,则需要在其前面添加--ptxas-options

请注意,ptxas执行了许多有用的优化 - 禁用时 - 如果不完全错误,可能会使代码更慢!例如,它会进行寄存器分配并尝试预测共享位置以及全局内存的位置。

答案 3 :(得分:0)

这些对我有用:

-g -G -Xcompiler -O0 -Xptxas -O0 -lineinfo -O0

答案 4 :(得分:-1)

据我所知,没有编译器标志或编译指示。但你可以计算更多并存储更少