Problem
./src/gemm.c: In function ‘time_gpu’:
./src/gemm.c:232:9: warning: ‘cudaThreadSynchronize’ is deprecated [-Wdeprecated-declarations]
cudaThreadSynchronize();
^
In file included from /usr/local/cuda/include/cuda_runtime.h:96:0,
from include/darknet.h:11,
from ./src/utils.h:5,
from ./src/gemm.c:2:
/usr/local/cuda/include/cuda_runtime_api.h:957:57: note: declared here
extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaThreadSynchronize(v
^
查找知道 cudaThreadSynchronize()
在cuda10.0以后被弃用了,可以用 cudaDeviceSynchronize()
来代替。
Solution
将/src/gemm.c:232: cudaThreadSynchronize()
替换为cudaDeviceSynchronize()
。
Explain
cudaDeviceSynchronize() 会阻塞当前程序的执行,直到所有任务都处理完毕(这里的任务其实就是指的是所有的线程都已经执行完了kernel function)。
cudaThreadSynchronize()的功能和cudaDeviceSynchronize()基本上一样,这个函数在新版本的cuda中已经被“废弃”了,不推荐使用,如果程序中真的需要做同步操作,推荐使用cudaDeviceSynchronize()。
cudaStreamSynchronize()和上面的两个函数类似,这个函数带有一个参数,cuda流ID,它只阻塞那些cuda流ID等于参数中指定ID的那些cuda例程,对于那些流ID不等的例程,还是异步执行的。
Reference
错误 C4996 ‘cudaThreadSynchronize’: 被声明为已否决 darknet 问题解决