diff --git a/cpp/src/barrier/sparse_cholesky.cuh b/cpp/src/barrier/sparse_cholesky.cuh index 01045847d1..4b6bb0adf2 100644 --- a/cpp/src/barrier/sparse_cholesky.cuh +++ b/cpp/src/barrier/sparse_cholesky.cuh @@ -483,6 +483,8 @@ class sparse_cholesky_cudss_t : public sparse_cholesky_base_t { status = cudssExecute(handle, CUDSS_PHASE_REORDERING, solverConfig, solverData, A, cudss_x, cudss_b); if (settings_.concurrent_halt != nullptr && *settings_.concurrent_halt == 1) { + RAFT_CUDA_TRY(cudaStreamSynchronize(stream)); + handle_ptr_->get_stream().synchronize(); return CONCURRENT_HALT_RETURN; } if (status != CUDSS_STATUS_SUCCESS) { @@ -499,6 +501,8 @@ class sparse_cholesky_cudss_t : public sparse_cholesky_base_t { status = cudssExecute( handle, CUDSS_PHASE_SYMBOLIC_FACTORIZATION, solverConfig, solverData, A, cudss_x, cudss_b); if (settings_.concurrent_halt != nullptr && *settings_.concurrent_halt == 1) { + RAFT_CUDA_TRY(cudaStreamSynchronize(stream)); + handle_ptr_->get_stream().synchronize(); return CONCURRENT_HALT_RETURN; } if (status != CUDSS_STATUS_SUCCESS) { @@ -556,6 +560,8 @@ class sparse_cholesky_cudss_t : public sparse_cholesky_base_t { status = cudssExecute( handle, CUDSS_PHASE_FACTORIZATION, solverConfig, solverData, A, cudss_x, cudss_b); if (settings_.concurrent_halt != nullptr && *settings_.concurrent_halt == 1) { + RAFT_CUDA_TRY(cudaStreamSynchronize(stream)); + handle_ptr_->get_stream().synchronize(); return CONCURRENT_HALT_RETURN; } if (status != CUDSS_STATUS_SUCCESS) { @@ -572,6 +578,8 @@ class sparse_cholesky_cudss_t : public sparse_cholesky_base_t { f_t numeric_time = toc(start_numeric); if (settings_.concurrent_halt != nullptr && *settings_.concurrent_halt == 1) { + RAFT_CUDA_TRY(cudaStreamSynchronize(stream)); + handle_ptr_->get_stream().synchronize(); return CONCURRENT_HALT_RETURN; } @@ -694,15 +702,22 @@ class sparse_cholesky_cudss_t : public sparse_cholesky_base_t { return CONCURRENT_HALT_RETURN; } f_t start_analysis = tic(); - CUDSS_CALL_AND_CHECK( - cudssExecute(handle, CUDSS_PHASE_REORDERING, solverConfig, solverData, A, cudss_x, cudss_b), - status, - "cudssExecute for reordering"); - - f_t reorder_time = toc(start_analysis); + status = + cudssExecute(handle, CUDSS_PHASE_REORDERING, solverConfig, solverData, A, cudss_x, cudss_b); if (settings_.concurrent_halt != nullptr && *settings_.concurrent_halt == 1) { + RAFT_CUDA_TRY(cudaStreamSynchronize(stream)); + handle_ptr_->get_stream().synchronize(); return CONCURRENT_HALT_RETURN; } + if (status != CUDSS_STATUS_SUCCESS) { + settings_.log.printf( + "FAILED: CUDSS call ended unsuccessfully with status = %d, details: cuDSSExecute for " + "reordering\n", + status); + return -1; + } + + f_t reorder_time = toc(start_analysis); f_t start_symbolic = tic(); @@ -767,6 +782,8 @@ class sparse_cholesky_cudss_t : public sparse_cholesky_base_t { f_t numeric_time = toc(start_numeric); if (settings_.concurrent_halt != nullptr && *settings_.concurrent_halt == 1) { + RAFT_CUDA_TRY(cudaStreamSynchronize(stream)); + handle_ptr_->get_stream().synchronize(); return CONCURRENT_HALT_RETURN; } @@ -832,6 +849,8 @@ class sparse_cholesky_cudss_t : public sparse_cholesky_base_t { status = cudssExecute(handle, CUDSS_PHASE_SOLVE, solverConfig, solverData, A, cudss_x, cudss_b); if (settings_.concurrent_halt != nullptr && *settings_.concurrent_halt == 1) { + RAFT_CUDA_TRY(cudaStreamSynchronize(stream)); + handle_ptr_->get_stream().synchronize(); return CONCURRENT_HALT_RETURN; } if (status != CUDSS_STATUS_SUCCESS) {