使用 nullptr 流的异步调用普遍等同于非异步调用吗?

问题描述 投票:0回答:1

CUDA 驱动程序 API 有多个异步变体调用,例如

cuMemcpy2D
cuMemcpy2DAsync
,异步变体采用流句柄 - 还有更多。

调用 API 的同步变体与使用流句柄的 nullptr/

NULL
调用异步变体是一样的情况吗?也就是说,人们可以放弃每次调用同步变体并始终使用异步变体?
    

cuda cuda-driver
1个回答
0
投票
0

参数传递

hStream
并不等同于调用它们的非异步变体。
每个 API 调用都在 CUDA 流上执行。传递 

0

表示使用默认流。它与同步与同步问题正交。异步 API。

同步和异步 API 之间存在一些差异,但它们与特定流无关。

以下同步和异步 API 调用的描述来自于

Driver API 文档

同步

    对于从可分页主机内存到设备内存的传输,在启动复制之前会执行流同步。功能 一旦可分页缓冲区被复制到暂存区就会返回 内存用于DMA传输到设备内存,但DMA到最终 目的地可能尚未完成。
  1. 对于从固定主机内存到设备内存的传输,该功能与主机同步。
  2. 对于从设备到可分页或固定主机内存的传输,该函数仅在复制完成后返回。
  3. 对于从设备内存到设备内存的传输,不执行主机端同步。
  4. 对于从任何主机内存到任何主机内存的传输,该功能与主机完全同步。
  5. 异步

    对于设备内存和可分页主机内存之间的传输,该函数可能与主机同步。
  1. 对于从任何主机内存到任何主机内存的传输,该功能与主机完全同步。
  2. 如果必须首先将可分页内存暂存到固定内存,则驱动程序可以与流同步并将副本暂存到固定内存 记忆力。
  3. 对于所有其他传输,该函数应该是完全异步的。
© www.soinside.com 2019 - 2024. All rights reserved.