我正在尝试在我的 GPU 上测量峰值单精度触发器,因为我正在修改 PTX 文件以在寄存器上执行连续的 MAD 指令。不幸的是,编译器正在删除所有代码,因为它实际上没有任何用处,因为我没有执行任何数据加载/存储。是否有编译器标志或编译指示添加到代码中,以便编译器不会触及它?
谢谢。
最佳答案
要完全禁用 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 手册中记录,否则应视为不受支持。
关于optimization - 完全禁用 NVCC 上的优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11821605/