如何用nvcc编译gcc并行模式STL代码?

如何用nvcc编译gcc并行模式STL代码?,gcc,stl,cuda,openmp,nvcc,Gcc,Stl,Cuda,Openmp,Nvcc,我正试图用nvcc 5.5.0在我的GPU上编译一个第三方库,但我一直在STL中遇到编译错误。我已经追踪到了该库使用GCC并行头的情况。具体来说,这是一个导致编译问题的最小示例: #include <parallel/algorithm> 我是不是在尝试获取引用OpenMP的代码以使用nvcc编译?如果这是显而易见的,请原谅我,我是CUDA的新手。我正在使用GCC4.8.2。新的CUDA6.5RC工具包来实现一些c++11特性 在Fedora20/GCC4.8.2、CUDA6.5R

我正试图用nvcc 5.5.0在我的GPU上编译一个第三方库,但我一直在STL中遇到编译错误。我已经追踪到了该库使用GCC并行头的情况。具体来说,这是一个导致编译问题的最小示例:

#include <parallel/algorithm>

我是不是在尝试获取引用OpenMP的代码以使用nvcc编译?如果这是显而易见的,请原谅我,我是CUDA的新手。我正在使用GCC4.8.2。

新的CUDA6.5RC工具包来实现一些c++11特性

在Fedora20/GCC4.8.2、CUDA6.5RC上,我成功地编译了以下代码

t1.cu:

#include <math.h>
#include <parallel/algorithm>

int main(){
}

如果仅包含
math.h
就可以解决此问题,则可以签入设置。如果没有,那么继续使用CUDA 6.5可能是值得的。

无论如何,您无法在设备代码中直接使用此类算法,因此一个典型的建议是将主机代码分为依赖于此特定库的部分和需要CUDA的部分。使用函数包装器或任何你喜欢的东西来连接两者。然后用
g++
编译非CUDA相关模块,用
nvcc
编译CUDA相关模块。另外,gcc 4.8.2不是CUDA 5.5的官方支持平台。谢谢您的回复。我不认为我可以在不拉入的情况下包含库标题,但我确实需要库中的其他功能才能在设备上运行。我还将看看如何使用不同的gcc,“我确实需要库中的其他功能在设备上运行”。如果所讨论的库是已编译的库,它将不会在设备上运行,除非您有源代码并可以重新编译它,或者它是一个模板库。即使这样的图书馆也需要一些努力来为CUDA进行适当的装饰。此外,如果所说的库元素以任何方式依赖于STL元素,那么它可能无法用于设备代码。该库是一个只包含头的库,我知道作者已经做了一些工作,将其移植到CUDA。当我找到问题并将其缩小到包含
时,我想我应该先在这里问一下。我现在就直接试试。谢谢,谢谢你。它不会在CUDA5.5.0上修复它,但我会尝试安装6.5RC并在那里进行测试。
#include <math.h>
#include <parallel/algorithm>

int main(){
}
nvcc -std=c++11 -arch=sm_20 t1.cu -o t1