ruda_runtime/runtime/
validation.rs1use ruda_core::backtrace::BackTrace;
2use ruda_core::ir::DeviceProperties;
3
4use crate::runtime::{
5 id::KernelId,
6 server::{RudaDim, LaunchError, ResourceLimitError},
7};
8
9pub fn validate_ruda_dim(
11 properties: &DeviceProperties,
12 kernel_id: &KernelId,
13) -> Result<(), LaunchError> {
14 let requested = kernel_id.ruda_dim;
15 let max: RudaDim = properties.hardware.max_ruda_dim.into();
16 if !max.can_contain(requested) {
17 Err(ResourceLimitError::RudaDim {
18 requested: requested.into(),
19 max: max.into(),
20 backtrace: BackTrace::capture(),
21 }
22 .into())
23 } else {
24 Ok(())
25 }
26}
27
28pub fn validate_units(
30 properties: &DeviceProperties,
31 kernel_id: &KernelId,
32) -> Result<(), LaunchError> {
33 let requested = kernel_id.ruda_dim.num_elems();
34 let max = properties.hardware.max_units_per_ruda;
35 if requested > max {
36 Err(ResourceLimitError::Units {
37 requested,
38 max,
39 backtrace: BackTrace::capture(),
40 }
41 .into())
42 } else {
43 Ok(())
44 }
45}