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