use anyhow::Result;
use cudarc::driver::{CudaEvent, DriverError, result as cuda_result, sys::CUresult};
use super::CompletionChecker;
pub struct CudaEventChecker {
event: CudaEvent,
}
impl CudaEventChecker {
pub fn new(event: CudaEvent) -> Self {
Self { event }
}
}
impl CompletionChecker for CudaEventChecker {
fn is_complete(&self) -> Result<bool> {
unsafe {
match cuda_result::event::query(self.event.cu_event()) {
Ok(()) => Ok(true), Err(DriverError(CUresult::CUDA_ERROR_NOT_READY)) => Ok(false),
Err(e) => Err(anyhow::anyhow!("CUDA event query failed: {:?}", e)),
}
}
}
}