CUDA - STL 向量在传递给使用 nvcc 编译的类时损坏



>已解决

我发现了问题。我强迫 nvcc 进行优化,即使我设置 -DCMAKE_BUILD_TYPE=调试。所以 nvcc 优化了向量和 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 编译的。会不会与此有关?

任何答案都值得赞赏。谢谢!

我发现了问题。我强制 nvcc 优化,设置 -O2,即使我设置 -DCMAKE_BUILD_TYPE=调试。所以 nvcc 优化了向量和 g++ 没有。

最新更新