考虑以下情况:
//thread 0 on device 0:
cudaMemcpyAsync(Dst0, Src0, ..., stream0);//stream0 is on Device 0;
...
//thread 1 on device 1:
cudaMemcpyAsync(Dst1, Src1, ..., stream1);//stream1 is on Device 1;
两个memcpy操作是否可以同时进行,并获得双倍的主机设备带宽(只要主机内存带宽足够)?如果答案是肯定的,那么这种并发性是否有上限?
我计划为单个计算节点中的许多(6-8)GPU编写一些程序,因此这对性能非常关键。
在任何给定时间,每个方向,只有一个cudaMemcpy
操作可以通过PCIE链路传输数据。当然,其他操作也可以排队,但只有一个操作可以实际使用该链接。
一些CUDA GPU有一个DMA引擎,另一些有两个。那些有两个的可以同时在两个方向上传输数据。这就是数据传输中并发性的限制:每个方向一个(假设有双复制引擎)。
假设数据传输不是很小,那么在每次传输的持续时间内,PCIE总线将被充分利用(在那个方向上)。