想问一下cudaMemcpyDeviceToDevice,从设备端复制数据到设备端是可以的哈?

  • 0 replies
  • 183 views
*

sisiy

  • *****
  • 245
    • 查看个人资料
答复:可以的。适合你从显存->显存的复制。
不过这一般用不到,因为你往往不需要直接这样做,在下一个kernel之类的地方,读取/处理后,顺便写入到另外一个地方即可。因为你要考虑啥时候需要D->D的复制,往往是为了保存原缓冲区,防止被破坏,这样新kernel可以直接在另外一个副本上操作了,但是这实际上往往直接修改kernel,写入另外一个地方即可。从而节省了这个流程。
这个和我们CUDA夏令营时候的"矩阵转置", 虽然课堂上讲了,但是实际上从来几乎不用用到一个道理,因为后者最常见的出现往往是被集成到另外一个kernel的内部。而不需要单独的这个过程。此外,D->D的传输,之前的卡(我不确定20/30系列+的情况),会自动生成一个隐形的kernel,通过该隐形的kernel,进行显存里头的复制。(而不是通过硬件的Copy Engine (DMA Engine)),所以这样的话,你自己衡量代价。因为这只是一个纯复制的kernel,而你往往可以写成读取+处理+写入的,后者更加高效。

如同可以再给前任打电话的,但是一般情况下无意义。