cudaEventSynchronize()的用法

请问为什么要使用下面的代码
cudaEventRecord(stop,0);
cudaEventSynchronize(stop);
cudaEventElapsedTime(&fEventTime,start,stop);
如果我去掉cudaEventSynchronize(),得到的是负数,是错的
cudaEventRecord()已经记录了stop中了,是不是cudaEventSynchronize()有重新获取了同步上面所有指令已完成后的时间戳覆盖了stop,但我如果去掉cudaEventRecord()直接调用cudaEventSynchronize()结果也不对
望解答

cudaEventRecord()只是在流里发布一个record某event的命令,此命令此时不一定立刻执行的。

所以你需要使用cudaEventSynchronize()/cudaStreamSynchronize()/cudaDeviceSynchronize(),确保record操作已经完成,再计算时间差。

这是您的问题1(为何要record后+同步)

关于您的问题2: 如果您去掉record, 只同步,因为没有下达过record的指令,自然也是错误的。

所以这2步操作是缺1不可的。

感谢午夜来访,周末愉快。