如何直接在两个GPU之间复制cudaArray?
How to copy cudaArray between two GPUs directly?
假设我在 GPU1 中有一个 cudaArray,在 GPU2 中有另一个 cudaArray。
通过查看分析器,使用 cudaMemcpyDeviceToDevice 标志调用 cudaMemcpyArrayToArray 实际上会导致 GPU1 cudaArray 复制到主机内存,主机内存复制到 GPU2 cudaArray。
我尝试将 GPU1 cudaArray 复制到 GPU1 全局内存并调用 cudaMemcpyPeer 复制到 GPU2 全局内存,然后将其复制到 GPU2 cudaArray。这比通过主机内存要好,但仍然有很多冗余复制。
为什么没有 cudaMemcpyPeerArrayToArray?如何直接在两个 GPU 之间复制 cudaArray?
CUDA 数组有一个点对点 API。
使用 cudaMemcpy3DPeer 或
cudaMemcpy3DPeerAsync。这将使用系统上可用的点对点选项中的最佳设备到设备传输路径。
假设我在 GPU1 中有一个 cudaArray,在 GPU2 中有另一个 cudaArray。
通过查看分析器,使用 cudaMemcpyDeviceToDevice 标志调用 cudaMemcpyArrayToArray 实际上会导致 GPU1 cudaArray 复制到主机内存,主机内存复制到 GPU2 cudaArray。
我尝试将 GPU1 cudaArray 复制到 GPU1 全局内存并调用 cudaMemcpyPeer 复制到 GPU2 全局内存,然后将其复制到 GPU2 cudaArray。这比通过主机内存要好,但仍然有很多冗余复制。
为什么没有 cudaMemcpyPeerArrayToArray?如何直接在两个 GPU 之间复制 cudaArray?
CUDA 数组有一个点对点 API。
使用 cudaMemcpy3DPeer 或 cudaMemcpy3DPeerAsync。这将使用系统上可用的点对点选项中的最佳设备到设备传输路径。