NVCC,与 -Xcompiler 的奇怪交互

Xap*_*Mnu 1 c++ cuda compiler-errors compilation

我正在尝试构建 Magma,但遇到了一些问题,我很确定在使用早期版本的 CUDA 时没有遇到过这些问题。(我现在用的是6.5)。发生的情况是 makefile 生成以下命令:

nvcc -fPIC -O3 -DADD_ -Xcompiler -fno-strict-aliasing  -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_35,code=compute_35 -I/opt/cuda/include -I../include -I../control -I../sparse-iter/include -c zgemv_conjv.cu -o zgemv_conjv.o
nvcc fatal   : Unknown option 'fPIC'
Run Code Online (Sandbox Code Playgroud)

谷歌搜索显示 -fPIC 只能与 -Xcompiler 一起使用,因为它不是 nvcc 选项。但正如您所看到的,我的 nvcc 命令中确实有 -Xcompiler 。

我尝试将 -fPIC 放在 -Xcompiler 后面,如下所示:

nvcc -O3 -DADD_ -Xcompiler -fPIC -fno-strict-aliasing  -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_35,code=compute_35 -I/opt/cuda/include -I../include -I../control -I../sparse-iter/include -c zgemv_conjv.cu -o zgemv_conjv.o
nvcc fatal   : Unknown option 'fno-strict-aliasing'
Run Code Online (Sandbox Code Playgroud)

它在下一个非 nvcc 选项上失败,即使它位于 -Xcompiler 后面。有效的是这样的:

nvcc -O3 -DADD_ -Xcompiler -fno-strict-aliasing -Xcompiler -fPIC -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_35,code=compute_35 -I/opt/cuda/include -I../include -I../control -I../sparse-iter/include -c zgemv_conjv.cu -o zgemv_conjv.o
Run Code Online (Sandbox Code Playgroud)

我在其中复制了 -Xcompiler 开关。有谁知道这是否是预期的行为?我找不到任何有关它的参考或文档,而且我很确定它不像以前版本的 CUDA 那样工作。这可能是一个错误吗?

小智 8

根据this,您必须用-Xcompiler逗号分隔不同的子选项,或者必须为每个选项使用单独的-Xcompiler,就像您在上次尝试中所做的那样。看来这是故意的。

  • 您还可以在您想要通过单个“-Xcompiler”开关传递的所有内容周围加上双引号。 (4认同)