C++ 使用Boost';s无锁spsc_队列?

C++ 使用Boost';s无锁spsc_队列?,c++,c++11,boost,cuda,C++,C++11,Boost,Cuda,我正试图用CUDA编写一个程序,在主机端使用Boost的单生产者/单消费者队列,但我一包含就遇到了编译器错误 此时,我没有在设备上执行任何操作,也没有创建spsc\u队列对象。当我试图用上面的头进行编译时,错误就发生了 最初我使用的是Boost 1.54,使用GCC 4.8.4进行编译,并使用CUDA 7.0 makefile中的所有标志以及以下自定义标志:-Xcompiler-fopenmp-lgomp-std=c++11-lpthread。这些在变量MYFLAGS中,如下所示: main.o

我正试图用CUDA编写一个程序,在主机端使用Boost的单生产者/单消费者队列,但我一包含
就遇到了编译器错误

此时,我没有在设备上执行任何操作,也没有创建
spsc\u队列
对象。当我试图用上面的头进行编译时,错误就发生了

最初我使用的是Boost 1.54,使用GCC 4.8.4进行编译,并使用CUDA 7.0 makefile中的所有标志以及以下自定义标志:
-Xcompiler-fopenmp-lgomp-std=c++11-lpthread
。这些在变量MYFLAGS中,如下所示:

main.o: main.cu
    $(EXEC) $(NVCC) $(INCLUDES) $(ALL_CCFLAGS) $(GENCODE_FLAGS) -c $(MYFLAGS) main.cu.
然后在链接步骤中,我有

$(EXEC) $(NVCC) $(ALL_LDFLAGS) $(GENCODE_FLAGS) -O2 $(MYFLAGS) -o runnable $(OBJECTS) $(LIBRARIES).
我一包含标题,就收到了以下错误:

/usr/include/boost/utility/detail/result_of_iterate.hpp:135:75: error:
    invalid use of qualified-name std::allocator_traits<_Alloc>::propagate_on_container_swap’
spsc_queue.hpp
中的问题代码是“重置”例程的一部分,但我甚至还没有声明对象

void reset(void)
{
    if ( !boost::has_trivial_destructor<T>::value ) {
        // make sure to call all destructors!

        T dummy_element;
        while (pop(dummy_element))
        {}
    } else {
        write_index_.store(0, memory_order_relaxed);
        read_index_.store(0, memory_order_release);
    }
}
void重置(void)
{
如果(!boost::has_平凡_析构函数::value){
//确保调用所有析构函数!
T伪u元素;
while(pop(虚拟元素))
{}
}否则{
写入索引存储(0,内存顺序松弛);
读取索引存储(0,内存顺序释放);
}
}

因此,我的问题是:使用Boost的无锁spsc_队列时如何编译?当我提到复杂的C++代码(如Boost)时,代码< > NVCC < /C> >不像“代码> G++<代码>那样成熟。一些Boost库使用
nvcc
,其他库无法编译
boost::lockfree
似乎属于后一类


一个可能的解决方案是拆分主机和设备代码,并编译所有主机代码,其中包括标题
nvcc
无法理解的
g++

谢谢!我试试看。
void reset(void)
{
    if ( !boost::has_trivial_destructor<T>::value ) {
        // make sure to call all destructors!

        T dummy_element;
        while (pop(dummy_element))
        {}
    } else {
        write_index_.store(0, memory_order_relaxed);
        read_index_.store(0, memory_order_release);
    }
}