有人能让NVCC和英特尔编译器一起工作吗?

Has Anyone Actually gotten NVCC and the intel compiler to work together?

本文关键字:一起 编译器 工作 英特尔 NVCC      更新时间:2023-10-16

在试图让NVCC使用英特尔编译器上有很多问题。这行不通,我知道。

人们给出的最常见的答案是使用NVCC/cl.exe将设备代码编译成一个库,然后分别编译主机代码并链接它们。我也在尝试,但毫无进展。

在VS2012中,我用两个项目创建了一个解决方案-一个CUDA,另一个控制台应用程序。

我已经将CUDA项目设置为使用VS2012编译成静态库。编译没有问题。

我已经将控制台应用程序设置为intel 14.0并将其编译为exe。我还添加了正确的路径到"额外的库依赖关系",并通过"额外的依赖关系"告诉编译器关于CUDA库(我也告诉它关于cudart_static.lib)。

Build依赖也被设置为首先编译CUDA项目。

然而,这种设置并不好。给了我一个连谷歌都不知道的错误:

Error   5   error MSB4057: The target "ComputeLegacyManifestEmbedding" does not exist in the project.   C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V120PlatformsWin32PlatformToolsetsIntel C++ Compiler XE 14.0Toolset.targets  1162    7   rxnCalc_cpp

为了验证链接是否正常,如果我将两个项目设置为通过VS2012编译,我不会遇到任何问题。

操作系统- Windows 7 64位(32位应用程序)

平台- VS2012

Cuda Toolkit - 6.0

Cuda Compute Version - 5.0(并按此编译)

所以,我只是在浪费时间还是我错过了什么?我似乎已经发了一百篇帖子,但我还没有看到一个成功。很多人急于告诉你这是你应该做的,但没有人告诉你如何去做!

对于使用windows并试图让CUDA和intel编译器合作的每个人,请参阅我如何设置解决方案的初始问题。

为了让它工作,按照Roger Dahl的建议,我把CUDA项目改成了一个DLL。

这涉及到以下修改:

  1. 将CUDA项目更改为dll

  2. 添加__declspec(dllexport)到CUDA包装函数

  3. 指向DLL库文件的控制台链接器

这工作,我现在能够利用所有的英特尔编译器优化。

但是,请注意,我确实需要将英特尔编译器设置为只做单个文件IPO。多档IPO会造成错误,这在一定程度上是意料之中的。

希望这篇文章能帮助到其他有同样遭遇的人。

相关文章: