【发布时间】:2015-03-24 07:03:56
【问题描述】:
正如在回答这个问题的答案中指出的那样
What device number should I use (0 or 1), to copy P2P (GPU0->GPU1)?
源或目标 GPU 上的 cuda 流均可用于点对点复制。但是,这是我从分析中得到的,这有点令人困惑。
#include <cuda.h>
#include <cuda_runtime.h>
int main() {
cudaDeviceEnablePeerAccess(0, 1);
cudaDeviceEnablePeerAccess(1, 0);
// on device 0
cudaSetDevice(0);
float* data0;
cudaMalloc(&data0, 1024000);
// on device 1
cudaSetDevice(1);
cudaStream_t stream1;
cudaStreamCreate(&stream1);
float* data1;
cudaMalloc(&data1, 1024000);
cudaMemcpyAsync(data0, data1, 1024000, cudaMemcpyDefault, stream1);
cudaDeviceSynchronize();
cudaMemcpyAsync(data1, data0, 1024000, cudaMemcpyDefault, stream1);
cudaDeviceSynchronize();
}
问题是,
当我将设备 0 显式分配给设备 1 时,为什么要在设备 0 上执行复制作业?
【问题讨论】:
-
我当然可以提供帮助,但您似乎在这里问了 5 个不同的问题。标题中的问题很容易回答,但您似乎正在寻找有关该主题的论文。在一个 SO 问题中提出多个问题并不是一个好主意,它会使问题变得更加难以回答。如果您需要帮助,我建议您提出一个重点问题。你读过this question/answer 吗?
-
@RobertCrovella 感谢您的指出,我已经检查了您建议的链接,并完善了我的问题。
-
我同意之前的反馈。请考虑更新您的“问题”文本,以便将其表述为问题。