C++ CUDA推力库和cudaDeviceReset()

C++ CUDA推力库和cudaDeviceReset(),c++,cuda,thrust,C++,Cuda,Thrust,当您调用cudaDeviceReset时,是否会导致范围中的任何推力::设备\向量不可用 推力:主机向量h_intVec; 推力:设备向量d_intVec; ... 将宿主向量设置为。。。 d_intVec=h_intVec; ... 做一些GPU的东西。。。 h_intVec=d_intVec; cudadeviceset; d_intVec=h_intVec; 当我尝试重新填充设备时,似乎出现了一些后端错误。\u向量是我不知道的事情吗?是的,它们不可用 在引擎盖下,一个推力::设备\向量定义

当您调用cudaDeviceReset时,是否会导致范围中的任何推力::设备\向量不可用

推力:主机向量h_intVec; 推力:设备向量d_intVec; ... 将宿主向量设置为。。。 d_intVec=h_intVec; ... 做一些GPU的东西。。。 h_intVec=d_intVec; cudadeviceset; d_intVec=h_intVec;
当我尝试重新填充设备时,似乎出现了一些后端错误。\u向量是我不知道的事情吗?

是的,它们不可用


在引擎盖下,一个推力::设备\向量定义在设备上创建一个分配。cudaDeviceReset将使设备上的所有分配无效,因此原始设备_向量不再可用

是的,它们无法使用


在引擎盖下,一个推力::设备\向量定义在设备上创建一个分配。cudaDeviceReset将使设备上的所有分配无效,因此原始设备_向量不再可用

有没有重建的方法,或者我应该使用一个指向设备向量的指针来代替呢?摆脱cudadeviceset不是更容易吗?为什么你在代码的中间这么做?主要是出于懒惰的原因,老实说,我正在把多个数据在多个向量主机中移动到设备上并返回。我认为在功能之间,最好只是重置,而不是跟踪需要维护的内容,并在Nessiary时复制回来。我应该提到我使用的是2个GPU,一个显示,另一个纯粹用于运行CUDA@AidanPossemiers:任何推力对象在超出范围时自动解除分配和清理。如果您正确地管理可变范围,您可能永远不需要以编程方式取消分配推力设备向量。是否有方法重新生成,或者我应该使用指向设备向量的指针?取消CUDADeviceSet不是更容易吗?为什么你在代码的中间这么做?主要是出于懒惰的原因,老实说,我正在把多个数据在多个向量主机中移动到设备上并返回。我认为在功能之间,最好只是重置,而不是跟踪需要维护的内容,并在Nessiary时复制回来。我应该提到我使用的是2个GPU,一个显示,另一个纯粹用于运行CUDA@AidanPossemiers:任何推力对象在超出范围时自动解除分配和清理。如果您正确地管理可变范围,您可能永远不需要以编程方式取消分配推力设备向量。