asynchronous任务,在第一次查询任务状态后才开始执行?

提交一组asynchronous任务,然后用while(cudaEventQuery(stop)==cudaErrorNotReady)
{ counter ++ }
方式计时

若在提交任务之后、这段循环之前
加一些事让CPU做,貌似对counter最终取值几乎没有影响。
我试验了加这些任务
system(“pause”)
system(“copy XXXXX”)
以及循环做乘法并cout输出
都没影响
但是,如果在这些无聊任务之前加一句
cudaEventQuery(stop)
在玩这些任务之后
counter的输出就变成0了
这是否说明
asynchronous模式任务,在第一次查询任务状态后才开始执行?

参见CUDA自带的Samples,asyncAPI

LZ您好,您的测试很有意义,不过我觉得结论可能稍有偏差。

如果真的如您预计,需要查询后才开始执行,那么如果一直不查询,异步任务岂不是永远都不会执行了?这是不合理的。

那么为何会出现您的情况呢?我觉得可能是这些发布的任务不是立即执行的,会有一段时间延迟,具体机制和细节我不是很清楚,不过如果您Query之后,可能会强制让设备立即执行前面已经发布的任务,之后设备的执行时间和您CPU端的一些任务的时间是重合的,等CPU端运行结束之后,再次询问,就会立即得到完成的结果。

同时,如果您需要立即执行的话,是可以如此立即query一下的。

上述观点,供您参考讨论,祝您编码愉快~

其实基本不影响使用……先记下了……版主好细心:lol

:lol:lol:lol
有机会您在观察下横扫斑竹那87的探究细节的风格~

祝您好运~