流句柄为 NULL 的“cuWhateverAsync”调用普遍等同于“cuWhatever”调用吗?

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

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

cuMemcpy2D
cuMemcpy2DAsync
,“异步”变体采用流句柄 - 还有更多这样的变体。

调用 API 调用的“非异步”变体与使用 nullptr/

NULL
作为流句柄调用“异步”变体是否是“普遍”的情况?也就是说,人们可以放弃每次调用“非异步”变体并始终使用“异步”变体?
注意:我使用括号是因为“异步”调用不一定总是完全异步,而“非异步”调用有时在某种程度上是异步的。我只对两种调用的等效性感兴趣。

asynchronous cuda cuda-streams cuda-driver
1个回答
-1
投票
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.