mod per_actor;
mod pool;
mod single;
pub use per_actor::PerActorAllocator;
pub use pool::PooledAllocator;
pub use single::SingleStreamAllocator;
use std::sync::Arc;
#[derive(Debug, Clone, Copy)]
pub struct ActorHints {
pub priority: Priority,
pub workload: WorkloadKind,
}
impl Default for ActorHints {
fn default() -> Self {
Self {
priority: Priority::Normal,
workload: WorkloadKind::ShortLatencyBound,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Priority {
Low,
Normal,
High,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum WorkloadKind {
ShortLatencyBound,
LongThroughputBound,
}
pub trait StreamAllocator: Send + Sync {
fn acquire(&self, hints: ActorHints) -> Arc<cudarc::driver::CudaStream>;
fn release(&self, _stream: Arc<cudarc::driver::CudaStream>) {}
}