有人能让NVCC和英特尔编译器一起工作吗?
Has Anyone Actually gotten NVCC and the intel compiler to work together?
在试图让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。
这涉及到以下修改:
-
将CUDA项目更改为dll
-
添加__declspec(dllexport)到CUDA包装函数
-
指向DLL库文件的控制台链接器
这工作,我现在能够利用所有的英特尔编译器优化。
但是,请注意,我确实需要将英特尔编译器设置为只做单个文件IPO。多档IPO会造成错误,这在一定程度上是意料之中的。
希望这篇文章能帮助到其他有同样遭遇的人。
- 编译器如何将链表中的地址字符串在一起?
- _mm512_exp_pd与 GNU 编译器一起使用
- 尝试将Winelib与标准macOS构建工具一起使用:得到奇怪的编译器错误
- 当没有显式关键字与单参数构造函数一起使用时,编译器可以发出警告
- 将shared_ptr与指向指针的指针一起使用时出现编译器错误
- GCC 中的编译器错误,但在将 decltype 与具有尾随返回类型语法的模板化成员函数一起使用时没有 clang
- 如何将QT5和QT Creator 2.6.1与VS 2012中的编译器一起使用
- 将运算符 ^ 与“double”操作数一起使用会发出编译器错误
- 我应该将哪个 Boost 版本与支持 C++03 的编译器一起使用
- visual studio 2012为C++使用了什么编译器?它兼容吗?我可以将它与代码块一起使用吗
- gcc 4.7.3与构造函数一起使用make_shared时出现内部编译器错误
- 为什么当 typedef const 指针与额外的 const 一起使用时,编译器不会给出错误?
- 无法使资源编译器与 Code::Blocks 一起使用
- 完全支持C++11的Windows C++编译器(应与Qt一起使用)
- 将CMake与同一语言的多个编译器一起使用
- 名称篡改如何与使用不同编译器编译的DLL和LIB一起工作
- Eclipse CDT不能与集成了Cygwin编译器的OpenCV 2.0一起工作
- 与类型转换运算符一起使用时条件运算符"?:"的编译器错误
- 如何从Unix命令行安装c和c++编译器,然后与Eclipse一起使用
- 移动lblas库并将其与g++编译器一起使用