linux - Linux 上的 CUDA 5.5 和英特尔 C/C++ 编译器

标签 linux cuda nvcc icc

对于我当前的项目,我需要在同一个项目中使用 CUDA 和英特尔 C/C++ 编译器。 (我依赖于英特尔 MKL 的 SSYEV 实现,使用 GCC+MKL 而不是 ICC+MKL 大约需要 10 倍的时间(GCC 约 3ms,ICC 约 300µs)。

icc -v
icc version 12.1.5

NVIDIA 声明,支持英特尔 ICC 12.1 ( http://docs.nvidia.com/cuda/cuda-samples/index.html#linux-platforms-supported ),但即使在降级到英特尔 ICC 12.1.5(作为英特尔 Composer XE 2011 SP1 更新 3 的一部分安装)之后,我仍然遇到这个问题:

nvcc -ccbin=icc src/test.cu -o test
/usr/local/cuda-5.5/bin//..//include/host_config.h(72): catastrophic error: #error directive: -- unsupported ICC configuration! Only ICC 12.1 on Linux x86_64 is supported!
#error -- unsupported ICC configuration! Only ICC 12.1 on Linux x86_64 is supported!

不幸的是,Nvidia 似乎只是在容忍使用 ICC,因为我很难将其称为“支持”,因为 Nvidia 缺乏将 ICC 与 CUDA 一起使用的信息。

我正在运行 Ubuntu 12.10 x86_64 和 CUDA 5.5。使用 -Xcompiler -gcc-version=470 选项告诉 icc 模仿普通 GCC 4.7.2 的行为也无济于事。使用 google/search,我只能从处理 CUDA 3.x 和 Intel ICC 11.1 的 Nvidia 论坛中找到线程,但我无法将获得的信息转移到当前的 CUDA 版本。

如果有任何关于如何解决此问题的建议,我将不胜感激:-)

最佳答案

引用您收到的错误中引用的文件,它专门寻找具有特定构建日期的 ICC 编译器:

#if defined(__ICC)

#if !(__INTEL_COMPILER == 9999 && __INTEL_COMPILER_BUILD_DATE == 20110811) || !defined(__GNUC__) || !defined(__LP64__)

#error -- unsupported ICC configuration! Only ICC 12.1 on Linux x86_64 is supported!

#endif

解决方案是让英特尔编译器实际匹配指定的构建日期。如前所述,ICC 12.1 , IE。版本 12.1.0.233,而不是 ICC 12.1.5 应该可以解决问题。

狭窄的焦点至少部分是由于测试限制。在这种情况下,特定的 ICC 变体在发布之前使用 CUDA 工具包进行了测试,因此主机配置检查中包含此测试。

关于linux - Linux 上的 CUDA 5.5 和英特尔 C/C++ 编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18698817/

相关文章:

c - 没有 df -i 的 inode 使用

linux - 在 "OOM Killer"之后,有没有 "Resurrector"?

linux - 将命令行参数传递给 bash 脚本命令

c++ - cudaMemcpy 无效参数

c++ - CUDA 归约和样本 : data racing?

linux - 链接到 linux 共享库

c++ - CUDA 应用程序 .exe 已停止工作

compiler-errors - “adadelta_solver”的Caffe编译错误

R gputools : gcc: error: unrecognized command line option ‘-Wp’

c++ - c++ 和 cublas 代码的混合未编译