有没有人实际上让NVCC和intel编译器一起工作?

时间:2014-05-05 02:49:35

标签: c++ visual-studio-2012 cuda nvcc

有很多关于试图让NVCC使用intel编译器的问题。它没有用,我明白了。

人们给出的最常见的答案是使用NVCC / cl.exe将设备代码编译到库中,然后单独编译主机代码并链接它们。我试图这样做,但我无处可去。

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

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

我已将控制台应用程序设置为intel 14.0并编译为exe。我还添加了正确的路径"附加库依赖"并通过"附加依赖"告诉编译器有关CUDA库的信息。 (我也告诉过它cudart_static.lib)。

还设置构建依赖项以首先编译CUDA项目。

然而,这种设置并不好。给我一个错误,甚至谷歌也不知所措:

Error   5   error MSB4057: The target "ComputeLegacyManifestEmbedding" does not exist in the project.   C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Platforms\Win32\PlatformToolsets\Intel C++ Compiler XE 14.0\Toolset.targets  1162    7   rxnCalc_cpp

要验证链接是否正常,如果我将两个项目都设置为通过VS2012编译,我就没有问题。

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

平台 - VS2012

Cuda Toolkit - 6.0

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

所以,我只是在浪费时间或是否有一些我想念的东西?我似乎已经完成了一百个帖子,但我还没有看到一个成功。很多人急于告诉你这是你应该做的,但没有人告诉你该怎么做!

1 个答案:

答案 0 :(得分:2)

对于那些使用Windows并尝试让CUDA和intel编译器进行合作的人,请参阅我关于如何设置解决方案的初步问题。

为了让它工作,根据Roger Dahl的建议,我将CUDA项目更改为DLL。

这涉及以下修改:

  1. 将CUDA项目更改为dll

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

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

  4. 这有效,我现在能够利用所有英特尔编译器优化。

    但请注意,我确实需要将intel编译器设置为仅执行单个文件IPO。多文件IPO会导致错误,这在某种程度上是预期的。

    希望这可以帮助其他人在同一条船上。