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

时间:2015-03-19 18:48:02

标签: c++ cuda opencl gpgpu

我是gpu技术的新手,正在使用OpenCL和cuda后端探索用于GPU计算的vexCL库。我提出了一个特定于特定库的问题。

我正在修改这个问题,以便将其视为一般性问题。问题基本上是如何编译不支持-std = c ++ 11的cuda版本和需要std = c ++ 11特性的.cxx文件。

E.g。如果你查看vexcl教程,那么有一个教程程序同时使用thrust.cu和thrust.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

但是与图书馆的正确联系。

这就是我解决问题的方法

1 个答案:

答案 0 :(得分:0)

首先,thrust-sort.cu和thrust-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应该为您解决这些问题。