未验证 提交 d8b6cf2b 编写于 作者: L liuwei1031 提交者: GitHub

fix sporadically hang issue on windows(#21201)

cudaStreamSynchronize randomly hang when used in multi-thread environment, replace it with cudaStreamQuery API on windows
上级 3fe63d67
......@@ -314,14 +314,23 @@ CUDADeviceContext::~CUDADeviceContext() {
Place CUDADeviceContext::GetPlace() const { return place_; }
void CUDADeviceContext::Wait() const {
cudaError_t e_sync = cudaStreamSynchronize(stream_);
if (e_sync != 0) {
cudaError_t e_sync = cudaSuccess;
#if !defined(_WIN32)
e_sync = cudaStreamSynchronize(stream_);
#else
while (e_sync = cudaStreamQuery(stream_)) {
if (e_sync == cudaErrorNotReady) continue;
break;
}
#endif
if (cudaSuccess != e_sync) {
LOG(FATAL) << "cudaStreamSynchronize " << cudaGetErrorString(e_sync)
<< " errno: " << e_sync;
}
cudaError_t e_get = cudaGetLastError();
if (e_get != 0) {
if (cudaSuccess != e_get) {
LOG(FATAL) << "cudaGetLastError " << cudaGetErrorString(e_get)
<< " errno: " << e_get;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册