我正在使用MSVC将GPU应用程序移植到Windows,这在NVCC中似乎不太好用。我将编译和链接阶段分开了。 nvcc
将仅预处理cuda文件:
nvcc -dc -ccbin cl somefile.cu
和cl
将编译其他所有内容:
cl anotherfile.c
此分隔是必要的,因为许多MSVC标志(此处不包括)并未与nvcc
的cl.exe
换行(相关症状here)相对应。
完成编译后,有两种方法可以进行链接。
nvcc
链接仅 CUDA设备代码,然后使用link.exe
链接所有内容,如this guide所述。[尽我所能,我无法获得link
来查找CUDA头,也找不到任何有关如何将link
指向cudart
库的文档。只要它像他们的g++
示例一样简单!
nvcc
完成所有链接。但是,根据doc,没有“没有选择”可以跳转到链接阶段。因此,当我尝试链接所有内容时,请使用...
nvcc somefile.o anotherfile.o -o app.exe
我收到cl
的一些警告!
cl : Command line warning D9024 : unrecognized source file type 'somefile.o', object file assumed
cl : Command line warning D9024 : unrecognized source file type 'anotherfile.o', object file assumed
自然,nvcc
假定这些目标文件是源代码,并将它们发送到cl
,因为该文档包括:
请注意,nvcc在对象,库或资源文件之间没有任何区别。
Of course cl
抱怨–这些目标文件应直接传递给链接器。我知道link
最终会被调用,因为我通过-Xlinker
传递了一些无关的参数。在这些警告之后,确实编译了app.exe
。
尽管文档指示没有链接器相位参数,但如何强制nvcc
仅link对象,而不将其错误地传递给cl
?没有办法抑制这些警告(至少在没有stackoverflow社区的condemned的情况下)。
我正在使用MSVC将GPU应用程序移植到Windows,这在NVCC中似乎不太好用。我将编译和链接阶段分开了。 nvcc将仅预处理cuda文件:...
从http://github.com/fangq/mcx签出我的cuda代码