为什么以下代码在main的末尾崩溃?
#include <thrust/device_vector.h>
thrust::device_vector<float4> v;
int main(){
v.resize(1000);
return 0;
}
错误是:
terminate called after throwing an instance of 'thrust::system::system_error'
what(): unspecified driver error
如果我使用host_vector
代替device_vector
,代码运行正常。
你认为它是一个推力错误,还是我在这里做错了什么?
我在使用cuda 4.0的ubuntu 10.10和使用cuda 6.5的Windows 7上尝试过它。 在两种情况下,Thrust版本都是1.7。
感谢
答案 0 :(得分:4)
这个问题既不是Thrust中的错误,也不是你做错了什么。相反,这是CUDA运行时API设计的限制。
崩溃的根本原因是当变量超出范围时调用thrust::vector
的析构函数,这在CUDA运行时API上下文被拆除后发生。这将产生运行时错误(可能是cudaErrorCudartUnloading
),因为该进程在已经与CUDA驱动程序断开连接后尝试调用cudaFree
。
我不知道除了不使用在main()
翻译单元范围内声明的Thrust设备容器之外的解决方法。