如果我有两个使用
如果我有两个CUDA Thrust设备向量,例如
我的问题是:是否有一种方法可以在不进行内存移动的情况下交换CUDA Thrust设备向量?
cudaMalloc
分配的数组,我可以通过交换相关指针而无需内存移动来交换它们。如果我有两个CUDA Thrust设备向量,例如
d_a
和d_b
,我可以使用第三个临时向量d_c
来交换它们,但这将需要内存移动。我的问题是:是否有一种方法可以在不进行内存移动的情况下交换CUDA Thrust设备向量?
thrust::vector
类有一个contiguous_storage
类型的成员,用于存储向量内容。当向量交换时,内部仅交换contiguous_storage
的begin()
迭代器、size
和allocator
。因此,不涉及数据的内存复制。您可以在文件contiguous_storage.inl
中的swap
成员函数中检查这一点。 - sgarizvivector_base::operator=
的代码,它使用了assign
函数,该函数似乎执行向量内容的完整内存复制。 - sgarizvithrust
使用了一个内核来执行拷贝操作? - Vitalitydevice_vector.swap()
在底层实际上是交换向量引用吗? - Vitality