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

CUDA数据传输和内核执行的重叠,流的隐式同步,cuda,Cuda,在阅读了《CUDA C编程指南》中CUDA的“数据传输和内核执行的重叠”部分后,我有一个问题:数据传输到底指的是什么?它是否包括cudaMemsetAsync,cudaMemcpyAsync,cudaMemset,cudaMemcpy。当然,分配给memcpy的内存是固定的 在隐式同步(streams)部分,书中说“设备内存集”可以序列化流。那么,它是指cudaMemsetAsync,cudaMemcpyAsync,cudaMemcpy,cudaMemcpy?我不确定 任何末尾带有Async的函

在阅读了《CUDA C编程指南》中CUDA的“数据传输和内核执行的重叠”部分后,我有一个问题:数据传输到底指的是什么?它是否包括
cudaMemsetAsync
cudaMemcpyAsync
cudaMemset
cudaMemcpy
。当然,分配给memcpy的内存是固定的

  • 在隐式同步(streams)部分,书中说“设备内存集”可以序列化流。那么,它是指
    cudaMemsetAsync
    cudaMemcpyAsync
    cudaMemcpy
    cudaMemcpy
    ?我不确定


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

    这意味着,除非您专门创建和设置流,否则您将使用defualt流。例如,没有默认的
    数据传输
    内核执行
    流。您必须创建两个(或更多)流,并为它们分配一个可供选择的任务

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

    对于您提到的函数调用,
    cudaMemcpy
    cudaMemcpyAsync
    是唯一执行数据传输的函数。我不认为
    cudaMemset
    cudaMemsetAsync
    可以被称为数据传输

    cudaMempyAsync
    cudaMemsetAsync
    都可以与流一起使用,而
    cudaMemset
    cudaMemcpy
    则阻止不使用流的调用