【问题标题】:CUDA overlap of data transfer and kernel execution, implicit synchronization for streams数据传输和内核执行的 CUDA 重叠,流的隐式同步
【发布时间】:2012-12-14 18:44:59
【问题描述】:
  1. 看完《CUDA C编程指南》中CUDA的“数据传输和内核执行的重叠”部分,我有个疑问:数据传输到底指的是什么?是否包括cudaMemsetAsynccudaMemcpyAsynccudaMemsetcudaMemcpy。当然,分配给 memcpy 的内存是固定的。

  2. 在隐式同步(流)部分,书中说“设备内存集”可以序列化流。那么,它是指cudaMemsetAsynccudaMemcpyAsynccudaMemcpycudaMemcpy 吗?我不知道。

【问题讨论】:

    标签: cuda


    【解决方案1】:

    任何以Async 结尾的函数调用都有一个流参数。此外,CUDA 工具包提供的一些库也有设置流的选项。通过使用它,您可以同时运行多个流。

    这意味着,除非您专门创建和设置流,否则您将使用默认流。例如,没有默认的 data transferkernel execution 流。您必须创建两个(或更多)流,并为它们分配一个选择的任务。

    一个常见的用例是拥有编程指南中提到的两个流。请记住,这仅在您启动多个内核时才有用。在计算当前内核的结果时,您可以获得下一个(独立)内核或当前内核的下一次迭代所需的数据。这可以最大限度地提高计算和带宽能力。

    对于您提到的函数调用,cudaMemcpycudaMemcpyAsync 是唯一执行数据传输的函数。我不认为cudaMemsetcudaMemsetAsync 可以称为数据传输。

    cudaMempyAsynccudaMemsetAsync 都可以与流一起使用,而 cudaMemsetcudaMemcpy 是不使用流的阻塞调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 2020-07-30
      • 2017-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多