我是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
但是与图书馆的正确联系。
这就是我解决问题的方法
答案 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应该为您解决这些问题。