pub const fn mbarrier_arrival_count(stages: u32) -> u32 {
stages * 2
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PipelineStages {
Double,
Triple,
Quad,
}
impl PipelineStages {
pub fn count(self) -> u32 {
match self {
PipelineStages::Double => 2,
PipelineStages::Triple => 3,
PipelineStages::Quad => 4,
}
}
}
pub mod macro_names {
pub const CP_ASYNC_CG_16: &str = "ATOMR_CP_ASYNC_CG_16";
pub const CP_ASYNC_CA_4: &str = "ATOMR_CP_ASYNC_CA_4";
pub const CP_ASYNC_COMMIT_GROUP: &str = "ATOMR_CP_ASYNC_COMMIT_GROUP";
pub const CP_ASYNC_WAIT_GROUP: &str = "ATOMR_CP_ASYNC_WAIT_GROUP";
pub const CP_ASYNC_BULK: &str = "ATOMR_CP_ASYNC_BULK";
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn arrival_counts_balanced() {
assert_eq!(mbarrier_arrival_count(2), 4);
assert_eq!(mbarrier_arrival_count(3), 6);
assert_eq!(mbarrier_arrival_count(4), 8);
assert_eq!(PipelineStages::Double.count(), 2);
assert_eq!(PipelineStages::Triple.count(), 3);
assert_eq!(PipelineStages::Quad.count(), 4);
}
}