以下CUDA推力程序崩溃:
#include <thrust/device_vector.h>
#include <thrust/extrema.h>
int main(void)
{
thrust::device_vector<int> vec;
for (int i(0); i < 1000; ++i) {
vec.push_back(i);
}
thrust::min_element(vec.begin(), vec.end());
}
我得到的例外是:
Unhandled exception at 0x7650b9bc in test_thrust.exe: Microsoft C++
exception:thrust::system::system_error at memory location 0x0017f178..
In `checked_cudaMemcpy()` in `trivial_copy.inl`.
如果我添加#include <thrust/sort.h>
并用sort
替换min_element
,它不会崩溃。
我在Windows7上使用CUDA4.1 64位,compute_20,sm_20(费米),调试版本。在Release构建中,我没有得到崩溃,min_element找到了正确的元素。
我是做错了什么,还是Thrust中有漏洞?
我可以使用针对Compute Capability 2.0(即nvcc -G0 -arch=sm_20
)的调试模式来重现错误。该错误不会在发布模式下或针对Compute Capability 1.x设备时重现,这通常表明代码生成问题,而不是库中的错误。无论故障在哪里,我都鼓励您提交一份错误报告,这样这个问题就会得到应有的关注。同时,我建议在发布模式下编译,这是经过更严格测试的。