首先对这三个函数做一下解释:
-
cudaDeviceSynchronize()
等待所有线程都处理完成(kernel function处理完成)
用在cpu的c code中 -
cudaThreadSynchronize()
功能和cudaDeviceSynchronize()基本上一样,这个函数在新版本的cuda中已经被“废弃”了,不推荐使用,如果程序中真的需要做同步操作,推荐使用cudaDeviceSynchronize()。 -
cudaStreamSynchronize()
和上面的两个函数类似,这个函数带有一个参数,cuda流ID,它只阻塞那些cuda流ID等于参数中指定ID的那些cuda例程,对于那些流ID不等的例程,还是异步执行的。 -
syncthreads()
用在kernel function中,只在一个block中有效,等待本block中的所有threads计算完成,一般配合