use ruda_core::backtrace::BackTrace;
use ruda_core::ir::DeviceProperties;
use crate::runtime::{
id::KernelId,
server::{RudaDim, LaunchError, ResourceLimitError},
};
pub fn validate_ruda_dim(
properties: &DeviceProperties,
kernel_id: &KernelId,
) -> Result<(), LaunchError> {
let requested = kernel_id.ruda_dim;
let max: RudaDim = properties.hardware.max_ruda_dim.into();
if !max.can_contain(requested) {
Err(ResourceLimitError::RudaDim {
requested: requested.into(),
max: max.into(),
backtrace: BackTrace::capture(),
}
.into())
} else {
Ok(())
}
}
pub fn validate_units(
properties: &DeviceProperties,
kernel_id: &KernelId,
) -> Result<(), LaunchError> {
let requested = kernel_id.ruda_dim.num_elems();
let max = properties.hardware.max_units_per_ruda;
if requested > max {
Err(ResourceLimitError::Units {
requested,
max,
backtrace: BackTrace::capture(),
}
.into())
} else {
Ok(())
}
}