使用推力 device_vector 作为全局变量

bc5*_*547 3 cuda thrust

为什么下面的代码会在 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。

谢谢

tal*_*ies 5

问题既不是 Thrust 中的错误,也不是您做错了什么。相反,这是 CUDA 运行时 API 设计的限制。

崩溃的根本原因thrust::vector是当变量超出范围时调用了 的析构函数,这是在 CUDA 运行时 API 上下文被拆除后发生的。这将产生运行时错误(可能cudaErrorCudartUnloading),因为进程cudaFree在与 CUDA 驱动程序断开连接后尝试调用。

除了不使用在main()翻译单元范围内声明的 Thrust 设备容器之外,我不知道其他解决方法。