我正在尝试使用MacOS X 10.8上的CUDA SDK 5.5 RC和g ++ 4.7编译一些代码。 如果我理解正确,CUDA 5.5应该与g ++ 4.7一起使用。查看/usr/local/cuda/include/host_config.h它甚至可以使用g ++ 4.8。
关于g ++ 4.8:我尝试编译以下程序:
// example.cu
#include <stdio.h>
int main(int argc, char** argv) {
printf("Hello World!\n");
return 0;
}
但它失败了:
$ nvcc example.cu -ccbin=g++-4.8
/usr/local/Cellar/gcc48/4.8.1/gcc/include/c++/4.8.1/cstdlib(178): error: identifier "__int128" is undefined
/usr/local/Cellar/gcc48/4.8.1/gcc/include/c++/4.8.1/cstdlib(179): error: identifier "__int128" is undefined
2 errors detected in the compilation of "/tmp/tmpxft_00007af2_00000000-6_example.cpp1.ii".
相同的程序使用g ++ 4.7进行编译和运行:
$ nvcc example.cu -ccbin=g++-4.7
$ ./a.out
Hello World!
但如果我包含&lt; limits&gt; ...
// example_limits.cu
#include <stdio.h>
#include <limits>
int main(int argc, char** argv) {
printf("Hello World!\n");
return 0;
}
...甚至g ++ 4.7都失败了。构建日志位于此处:https://gist.github.com/lysannschlegel/6121347
在那里你还可以找到其他一些错误,我不完全确定它们是否与__int128缺失有关。
很可能其他标准库也包括打破g ++ 4.7的构建,限制是我绊倒的。
我也试过g ++ 4.5,因为我碰巧在我的机器上也有它(你可以永远不会有太多的编译器版本,可以吗?),并且它有效。
我可以预期这将在CUDA 5.5的发布中修复吗? (我希望NVIDIA不仅仅是回到支持gcc而只支持4.6版本。)
有没有办法在此期间解决这个问题?
更新
正如@talonmies在下面指出的那样,这并不是MacOS上CUDA 5.5中的一个错误,因为MacOS上没有正式支持gcc。由于许多第三方库没有正确处理支持的工具链,clang或llvm-gcc(llvm-gcc来自2007 ......),仍然需要使gcc工作。高达4.6的gcc应该可以正常工作(我只测试了4.5) 你可以使用@BenC在评论中指出的技巧使gcc 4.7工作:
$ cat compatibility.h
#undef _GLIBCXX_ATOMIC_BUILTINS
#undef _GLIBCXX_USE_INT128
$ nvcc example_limits.cu -ccbin=g++-4.7 --pre-include compatibility.h
使用gcc 4.8的nvcc仍然在cstdlib的__int128上窒息。我想在包含--pre-include文件之前包含了cstdlib。
答案 0 :(得分:4)
您需要更仔细地阅读MacOS入门指南:
要在系统上使用CUDA,您需要安装以下软件:
支持CUDA的GPU
‣MacOSX v.10.7.5或更高版本
using使用Xcode安装的gcc或Clang编译器和工具链
‣NVIDIACUDA工具包(可在http://developer.nvidia.com/cuda-downloads获得)
这正是它所说的 - 使用Xcode附带的编译器。不要使用自建的gcc版本,因为它不能保证工作,即使该编译器版本被列为在其他平台上受支持,并且如果普通代码看起来可以正确编译。