| 364 | } |
| 365 | |
| 366 | Result<std::shared_ptr<Device::SyncEvent>> CudaMemoryManager::MakeDeviceSyncEvent() { |
| 367 | ARROW_ASSIGN_OR_RAISE(auto context, cuda_device()->GetContext()); |
| 368 | ContextSaver set_temporary(reinterpret_cast<CUcontext>(context.get()->handle())); |
| 369 | |
| 370 | // TODO: event creation flags |
| 371 | CUevent ev; |
| 372 | CU_RETURN_NOT_OK("cuEventCreate", cuEventCreate(&ev, CU_EVENT_DEFAULT)); |
| 373 | |
| 374 | return std::shared_ptr<Device::SyncEvent>( |
| 375 | new CudaDevice::SyncEvent(context, new CUevent(ev), [](void* ev) { |
| 376 | auto typed_event = reinterpret_cast<CUevent*>(ev); |
| 377 | // DCHECK_OK still evaluates its argument in release mode |
| 378 | // but in debug mode it'll also throw if it fails |
| 379 | DCHECK_OK( |
| 380 | internal::StatusFromCuda(cuEventDestroy(*typed_event), "cuEventDestroy")); |
| 381 | delete typed_event; |
| 382 | })); |
| 383 | } |
| 384 | |
| 385 | Result<std::shared_ptr<Device::SyncEvent>> CudaMemoryManager::WrapDeviceSyncEvent( |
| 386 | void* sync_event, Device::SyncEvent::release_fn_t release_sync_event) { |
nothing calls this directly
no test coverage detected