【问题标题】:CUDA thrust library and cudaDeviceReset()CUDA 推力库和 cudaDeviceReset()
【发布时间】:2015-03-18 01:24:31
【问题描述】:

当您调用 cudaDeviceReset() 时,是否会使范围内的任何推力::device_vectors 无法使用?

thrust::host_vector<int> h_intVec;
thrust::device_vector<int> d_intVec;

... set the host vector to something...

d_intVec = h_intVec;

... do some GPU stuff ...

h_intVec = d_intVec;

cudaDeviceReset();

d_intVec = h_intVec;

当我尝试重新填充 device_vector 时,我似乎遇到了一些后端错误,这是我不知道的事情吗?

【问题讨论】:

    标签: c++ cuda thrust


    【解决方案1】:

    是的,它们无法使用。

    在底层,thrust::device_vector 定义在设备上创建了一个分配。 cudaDeviceReset 使设备上的所有分配无效,因此原始的 device_vector 不再可用。

    【讨论】:

    • 有没有办法重建或者我应该使用指向 device_vector 的指针来代替?
    • 摆脱cudaDeviceReset()不是更容易吗?为什么要在代码中间这样做?
    • 老实说,主要是出于懒惰的原因,我将多个向量主机中的大量数据移动到设备并返回。我认为在功能之间,最好只是重置而不是跟踪需要维护的内容并在需要时复制回来。
    • 我应该提到我正在使用 2 个 GPU,一个用于显示另一个用于纯粹运行 CUDA
    • @AidanPossemiers:任何推力对象在超出范围时都会自动释放和清理。如果您正确管理可变范围,您可能应该永远需要以编程方式释放推力设备向量。
    猜你喜欢
    • 2013-06-03
    • 2017-02-14
    • 2014-07-01
    • 2015-05-11
    • 1970-01-01
    • 2016-06-30
    • 2016-09-02
    • 2016-07-11
    • 2013-01-04
    相关资源
    最近更新 更多