我发现了问题。即使我设置-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编译的。它可能与此有关吗?
任何答案都表示赞赏。谢谢你!
答案 0 :(得分:1)
我发现了问题。我强制nvcc进行优化,设置-O2,即使我设置-DCMAKE_BUILD_TYPE = Debug。所以nvcc优化了vector和g ++。