cudaEventRecord将事件 ID 和流 ID 作为参数。运行时 API 参考并没有说明是否需要将流与当前设备关联 - 我无法测试是否是这种情况,因为我现在可以访问的任何系统上最多只有一个 GPU。
假设它必须是当前设备上的流:
- 如果它在另一台设备上获得流会发生什么?
假设它可以是任何设备上的流:
- 当它获得(当前设备的)默认流的 ID 时会发生什么?毕竟,所有设备的默认流都具有相同的(空)ID?
- 基于流的设备是否是最新的,行为是否有任何差异?
cudaEventRecord将事件 ID 和流 ID 作为参数。运行时 API 参考并没有说明是否需要将流与当前设备关联 - 我无法测试是否是这种情况,因为我现在可以访问的任何系统上最多只有一个 GPU。
假设它必须是当前设备上的流:
假设它可以是任何设备上的流:
结合@Talonmies 的回答和@RobertCrovella 在他的评论中链接到的CUDA C 编程指南的流和事件行为部分的信息。
流必须与当前设备相关联吗?
不,它可以是任何设备。但是,事件记录确实要求流和事件与同一设备相关联。
基于流的设备是否是最新的,行为是否有任何差异?
通常,不,但是...
当它获得(当前设备的)默认流的 ID 时会发生什么?
...默认流是该规则的一个例外。由于(每个设备自己的)默认流具有相同的 ID,因此将空 ID 传递给cudaEventRecord
意味着它将检查当前设置的设备以确定在哪个流上记录事件(并且这需要与事件关联的设备相同和)。