Memory 如何有效覆盖GPU上的内存区域?

Memory 如何有效覆盖GPU上的内存区域?,memory,memory-management,cuda,gpu,Memory,Memory Management,Cuda,Gpu,我在GPU上分配数据块。我有一个算法来生成新数据来替换旧数据。新缓冲区具有相同的数据大小。有一种解决方案是将旧数据带回cpu,然后将其擦除,但我认为这是非常低效且非常缓慢的。是否可以在同一位置用新数据覆盖旧元素?如果内核接受指向某个缓冲区的指针,则可以将原始数据指针传递给该内核,从而使输入数据被内核的结果覆盖 或者,如果您正在使用需要使用缓冲区的算法,您可以使用cudaMemcpy将存储在缓冲区中的结果复制到存储输入数据的内存区域,并在过程中覆盖它。如果您可以随时覆盖旧数据,则只需mydata[

我在GPU上分配数据块。我有一个算法来生成新数据来替换旧数据。新缓冲区具有相同的数据大小。有一种解决方案是将旧数据带回cpu,然后将其擦除,但我认为这是非常低效且非常缓慢的。是否可以在同一位置用新数据覆盖旧元素?

如果内核接受指向某个缓冲区的指针,则可以将原始数据指针传递给该内核,从而使输入数据被内核的结果覆盖


或者,如果您正在使用需要使用缓冲区的算法,您可以使用
cudaMemcpy
将存储在缓冲区中的结果复制到存储输入数据的内存区域,并在过程中覆盖它。

如果您可以随时覆盖旧数据,则只需
mydata[i]=mydata[i]+math
否则,您可能需要2个副本,并将它们用作缓冲区
mydataA[i]=mydataB[i]+mydataB[i+1]
mydataB[i]=mydataA[i]+mydataA[i+1]