【问题标题】:How many cudaMemcpyAsync operations can be done concurrently?可以同时完成多少个 cudaMemcpyAsync 操作?
【发布时间】:2013-12-08 02:35:06
【问题描述】:

考虑以下情况:

//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 编写一些程序,因此这对性能非常关键。

【问题讨论】:

    标签: cuda gpu cuda-streams


    【解决方案1】:

    实际上只有一个cudaMemcpy 操作可以在任何给定时间、每个方向上通过 PCIE 链路传输数据。其他操作当然可以排队,但只有一个可以实际使用链接。

    一些 CUDA GPU 有一个 DMA 引擎,其他有 2 个。有两个的那些可以同时双向传输数据。这就是数据传输中并发的限制:每个方向一个(假设双复制引擎)。

    假设数据传输不小,那么在每次传输期间,PCIE 总线将被充分利用(在那个方向上)。

    【讨论】:

    • 你能评论一下问题海报的最后一部分吗? I plan to write some program for many (6-8) GPUs in a single compute node, so that will be quite critical for performance我想知道,因为在不久的将来会尝试类似的事情,或者链接到任何已经分析过这个的论文?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    相关资源
    最近更新 更多