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