CUDA - STL向量在传递给使用nvcc

时间:2016-02-02 02:10:56

标签: c++ vector stl cuda

解决

我发现了问题。即使我设置-DCMAKE_BUILD_TYPE = Debug,我也强制nvcc进行优化。所以nvcc优化了vector和g ++。

问题

我有一种奇怪的行为,我不确定如何解释。基本上,我是一个封装了我想用CUDA做的所有事情的类。但是错误与CUDA API没有任何关系。我总结了一段代码。

//Foo.cuh
class Foo{
    void updateData(const std::vector<Bar> &_bars);
    // Other methods related to CUDA stuff
};

//Foo.cu
void Foo::updateData(const std::vector<Bar> &_bars){
    std::cout << "Size of vector: " << _bars.size() << std::endl;   
    // Do thing with data, cudamalloc and so on...    
}

// main.cpp
Foo foo;
std::vector<Bar> bars = /*Something of size 125*/;
std::cout << "Size of vector: " << bars.size() << std::endl;    
foo.updateData(bars);

然后,如果我运行代码,第一个输出抛出Size of vector: 125和第二个Size of vector: 14710694641059515977

我没有达到任何CUDA代码,只是将stl向量传递给管理CUDA代码的类的问题。就我而言,.cpp代码是用g ++和.cu代码用nvcc编译的。它可能与此有关吗?

任何答案都表示赞赏。谢谢你!

1 个答案:

答案 0 :(得分:1)

我发现了问题。我强制nvcc进行优化,设置-O2,即使我设置-DCMAKE_BUILD_TYPE = Debug。所以nvcc优化了vector和g ++。