Lys*_*gel 5 cuda g++-4.7 g++4.8
我正在尝试使用COSA SDK 5.5 RC和Mac OS X 10.8上的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;
}
Run Code Online (Sandbox Code Playgroud)
但它失败了:
$ 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".
Run Code Online (Sandbox Code Playgroud)
相同的程序使用g ++ 4.7编译和运行:
$ nvcc example.cu -ccbin=g++-4.7
$ ./a.out
Hello World!
Run Code Online (Sandbox Code Playgroud)
但如果我包括<limits> ......
// example_limits.cu
#include <stdio.h>
#include <limits>
int main(int argc, char** argv) {
printf("Hello World!\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
......甚至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工作.gcc高达4.6应该可以正常工作(我只测试了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
Run Code Online (Sandbox Code Playgroud)
带有gcc 4.8的nvcc仍然在cstdlib的__int128上窒息.我想在包含--pre-include文件之前包含cstdlib.
您需要更仔细地阅读 MacOS 入门指南:
\n\n\n\n\n要在您的系统上使用 CUDA,您需要安装以下软件:
\n\n支持 CUDA 的 GPU
\n\n\xe2\x80\xa3 Mac OSX v.10.7.5 或更高版本
\n\n\xe2\x80\xa3 使用 Xcode 安装的 gcc 或 Clang 编译器和工具链
\n\n\xe2\x80\xa3 NVIDIA CUDA 工具包(可从http://developer.nvidia.com/cuda-downloads获取)
\n
这正是它所说的——使用 Xcode 附带的编译器。不要使用自建的 gcc 版本,因为它不能保证工作,即使该编译器版本被列为在其他平台上受支持并且简单的代码似乎可以正确编译。
\n| 归档时间: |
|
| 查看次数: |
4354 次 |
| 最近记录: |