CUDA重叠数据传输和内核执行,流的隐式同步

时间:2012-12-30 01:30:04

标签: cuda

  1. 阅读CUDA"数据传输和内核执行的重叠"在" CUDA C编程指南"中,我有一个问题:数据传输到底是指什么?它是否包含cudaMemsetAsynccudaMemcpyAsynccudaMemsetcudaMemcpy。当然,为memcpy分配的内存是固定的。

  2. 在隐式同步(流)部分中,该书说明了设备内存集"可以序列化流。那么,它是指cudaMemsetAsynccudaMemcpyAsynccudaMemcpycudaMemcpy吗?我不确定。

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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