编译一个不支持c++11和.cxx文件的cuda代码需要一个带有vexcl示例的c++11

Compiling a cuda code which does not support c++11 and a .cxx file requires a c++11 with an vexcl example

本文关键字:c++11 一个 vexcl 文件 不支持 cxx 编译 cuda 代码      更新时间:2023-10-16

我是gpu技术的新手,曾使用OpenCL和cuda后端探索用于gpu计算的vexCL库。我回答了一个特定图书馆特有的问题。

我正在修改这个问题,以便把它当作一个一般性问题来处理。问题主要是如何编译不支持-std=c++11的cuda版本和需要std=c++11功能的.cxx文件。

例如,如果你查看vexcl教程,有一个教程程序同时使用了thrt.cu和thrt.cpp。现在我已经解决了它,我只想在下面的段落中提到解决它的方法:

1) 首先编译.cpp文件,例如

   g++ -c -std=c++11 -o ts1.o -I${VEXCL_ROOT} -I${CUDA_INCLUDES} -DVEXCL_BACKEND_CUDA thrust-sort.cpp

2) 并编译.cu文件

nvcc -c -o ts2.o thrust-sort.cu

3) 一起编译目标文件

 nvcc -o ts ts1.o ts2.o -lboost_system -lboost_filesystem -lcuda

但要与图书馆建立适当的联系。

这就是我解决问题的方法

首先,Throt-sort.cu和Throt-sort.cpp是同一程序的一部分。这些被拆分是因为nvcc在版本7(刚刚发布)之前不支持C++11。因此,您需要编译这两者(使用-c标志),然后将它们链接在一起。其次,在vexcl中,不能在同一个二进制文件中混合后端。而且,由于这个特定的例子使用了推力,所以后端必须是CUDA。所以编译命令应该是

g++ -c -std=c++11 -o ts1.o -I${VEXCL_ROOT} -I${CUDA_INCLUDES} -DVEXCL_BACKEND_CUDA thrust-sort.cpp
nvcc -c -o ts2.o thrust-sort.cu
nvcc -o ts ts1.o ts2.o -lboost_system -lboost_filesystem -lcuda

库中提供的CMakeLists.txt应该可以开箱即用地处理这些问题。

相关文章: