C++ 使用其他c++;编译CUDA代码的编译器

C++ 使用其他c++;编译CUDA代码的编译器,c++,cuda,nvcc,C++,Cuda,Nvcc,我有一个由nvcc编译的CUDA(*.cu)代码,它在GPU中运行得非常好。但是NVCC不支持一些C++ 11特性,一些第三方C++库不能与NVCC一起使用。我想知道是否可以用GCC或其他商用C++编译器编译CU代码?谢谢。nvcc支持显式指定它使用的主机编译器,以及主机编译器特定的选项。有关详细信息,您可以在nvcc选项-ccbin和-Xcompiler上找到文档 例如,我将nvcc与英特尔编译器和英特尔MKL绑定,如下所示 $ nvcc -ftz true -ccbin icpc -Xco

我有一个由nvcc编译的CUDA(*.cu)代码,它在GPU中运行得非常好。但是NVCC不支持一些C++ 11特性,一些第三方C++库不能与NVCC一起使用。我想知道是否可以用GCC或其他商用C++编译器编译CU代码?谢谢。

nvcc支持显式指定它使用的主机编译器,以及主机编译器特定的选项。有关详细信息,您可以在nvcc选项
-ccbin
-Xcompiler
上找到文档

例如,我将nvcc与英特尔编译器和英特尔MKL绑定,如下所示

$ nvcc -ftz true -ccbin icpc -Xcompiler "-Wall -Wno-long-long -ansi -pedantic -ansi-alias -parallel -fopenmp -openmp-link=static -static-intel -wd10237" -O2 -Xcompiler "-O2"   -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -Ilib -c -o test/triangle.o test/triangle.cu
$ nvcc -ftz true -ccbin icpc -Xcompiler "-Wall -Wno-long-long -ansi -pedantic -ansi-alias -parallel -fopenmp -openmp-link=static -static-intel -wd10237" -O2 -Xcompiler "-O2"  -Ilib -Llib test/triangle.o lib/KTiming.o -lpthread -lm /opt/intel/composer_xe_2013.1.117/mkl/lib/intel64/libmkl_intel_lp64.a /opt/intel/composer_xe_2013.1.117/mkl/lib/intel64/libmkl_intel_thread.a /opt/intel/composer_xe_2013.1.117/mkl/lib/intel64/libmkl_core.a /opt/intel/composer_xe_2013.1.117/mkl/lib/intel64/libmkl_core.a -lcublas -lcurand -lcusparse -o test/triangle

nvcc支持显式指定它使用的主机编译器,以及主机编译器特定的选项。有关详细信息,您可以在nvcc选项
-ccbin
-Xcompiler
上找到文档

例如,我将nvcc与英特尔编译器和英特尔MKL绑定,如下所示

$ nvcc -ftz true -ccbin icpc -Xcompiler "-Wall -Wno-long-long -ansi -pedantic -ansi-alias -parallel -fopenmp -openmp-link=static -static-intel -wd10237" -O2 -Xcompiler "-O2"   -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -Ilib -c -o test/triangle.o test/triangle.cu
$ nvcc -ftz true -ccbin icpc -Xcompiler "-Wall -Wno-long-long -ansi -pedantic -ansi-alias -parallel -fopenmp -openmp-link=static -static-intel -wd10237" -O2 -Xcompiler "-O2"  -Ilib -Llib test/triangle.o lib/KTiming.o -lpthread -lm /opt/intel/composer_xe_2013.1.117/mkl/lib/intel64/libmkl_intel_lp64.a /opt/intel/composer_xe_2013.1.117/mkl/lib/intel64/libmkl_intel_thread.a /opt/intel/composer_xe_2013.1.117/mkl/lib/intel64/libmkl_core.a /opt/intel/composer_xe_2013.1.117/mkl/lib/intel64/libmkl_core.a -lcublas -lcurand -lcusparse -o test/triangle

如果这些C++11特性只出现在.cu文件的主机部分,我建议将代码分离到一个单独的文件中,该文件直接由主机编译器生成。您可能还希望通过注册开发人员网站为您使用的C++11功能提交功能请求(C+11添加了许多不同的功能,我想您的代码只需要其中一些功能)。我想您的第一条评论就是我要找的。但是有几行代码使用C++11,这对算法的其余部分至关重要。似乎我无法将其与主代码分开:(请检查单独编译。如果这些C++11功能仅出现在.cu文件的主机部分,我建议将这些代码分离到一个单独的文件中,该文件直接由主机编译器生成。您可能还希望通过注册开发人员网站为您使用的C++11功能提交功能请求。)(C+11添加了许多不同的功能,我想你的代码只需要其中的一些)我想你的第一条评论就是我要找的。但是有几行使用C++11的代码对算法的其余部分至关重要。似乎我无法将其与主代码分开:(请检查中的单独编译。值得注意的是,英特尔编译器仅在64位Linux上的CUDA 5.0或更高版本中受支持。谢谢。我在Linux 64位操作系统中安装了cuda5.5,我尝试了第一个编译命令,但它报告“nvcc致命:未指定输入文件;请使用选项--help了解更多信息/opt/cuda5/include/host_config.h(72)):灾难性错误:#错误指令:--不支持的ICC配置!仅支持Linux x86_64上的ICC 12.1!#错误--不支持的ICC配置!仅支持Linux x86_64上的ICC 12.1!#官方cuda5.5仅支持ICC 12.1。您可以在/opt/cuda5/include/host_config.h(72)中注释掉
#错误
。到目前为止,我没有任何编译失败。哦…我正在群集中运行编译,所有内容都是由它安装的。我无权修改代码:(但无论如何,谢谢你,事实上,我也是。我将..../cuda-5.5复制到我的家中,定义了
$cuda_home
,并在我的
.bashrc
中添加了
$PATH
LD_LIBRARY_PATH
。然后我完全控制了cuda-5.5。值得注意的是,英特尔编译器仅在64位Linux上的cuda 5.0或更高版本中受支持。谢谢在linux 64位操作系统中暂停,我尝试了第一个编译命令,但它报告“nvcc致命:未指定输入文件;使用选项--help获取更多信息/opt/cuda5/include/host_config.h(72):灾难性错误:#错误指令:--不支持的ICC配置!仅支持Linux x86_64上的ICC 12.1!#错误--不支持的ICC配置!仅支持Linux x86_64上的ICC 12.1!#官方cuda5.5仅支持ICC 12.1。您可以在/opt/cuda5/include/host_config.h(72)中注释掉
#错误
。到目前为止,我没有任何编译失败。哦…我正在群集中运行编译,所有内容都是由它安装的。我无权修改代码:(但无论如何,谢谢你,事实上,我也是。我将..../cuda-5.5复制到我的家中,定义了
$cuda\u home
,并在我的
.bashrc
中添加了
$PATH
LD\u LIBRARY\u PATH
。然后我就可以完全控制cuda-5.5了。)