Skip to content

Commit

Permalink
Merge pull request #16854 from rapidsai/branch-24.10
Browse files Browse the repository at this point in the history
Forward-merge branch-24.10 into branch-24.12
  • Loading branch information
GPUtester authored Sep 19, 2024
2 parents 9509998 + 8e1345f commit 15e1377
Showing 1 changed file with 12 additions and 4 deletions.
16 changes: 12 additions & 4 deletions cpp/src/utilities/stream_pool.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,13 @@ struct cuda_event {
cuda_event() { CUDF_CUDA_TRY(cudaEventCreateWithFlags(&e_, cudaEventDisableTiming)); }
virtual ~cuda_event() { CUDF_ASSERT_CUDA_SUCCESS(cudaEventDestroy(e_)); }

// Moveable but not copyable.
cuda_event(const cuda_event&) = delete;
cuda_event& operator=(const cuda_event&) = delete;

cuda_event(cuda_event&&) = default;
cuda_event& operator=(cuda_event&&) = default;

operator cudaEvent_t() { return e_; }

private:
Expand All @@ -147,11 +154,12 @@ struct cuda_event {
*/
cudaEvent_t event_for_thread()
{
thread_local std::vector<std::unique_ptr<cuda_event>> thread_events(get_num_cuda_devices());
// The program may crash if this function is called from the main thread and user application
// subsequently calls cudaDeviceReset().
// As a workaround, here we intentionally disable RAII and leak cudaEvent_t.
thread_local std::vector<cuda_event*> thread_events(get_num_cuda_devices());
auto const device_id = get_current_cuda_device();
if (not thread_events[device_id.value()]) {
thread_events[device_id.value()] = std::make_unique<cuda_event>();
}
if (not thread_events[device_id.value()]) { thread_events[device_id.value()] = new cuda_event(); }
return *thread_events[device_id.value()];
}

Expand Down

0 comments on commit 15e1377

Please sign in to comment.