use crate::error::Result;
pub trait Collective: Send {
fn rank(&self) -> usize;
fn world_size(&self) -> usize;
fn allreduce_sum_f64(&mut self, data: &mut [f64]) -> Result<()>;
fn allreduce_sum_i64(&mut self, data: &mut [i64]) -> Result<()>;
fn allreduce_max_f64(&mut self, data: &mut [f64]) -> Result<()>;
fn allgather_bytes(&mut self, local: &[u8]) -> Result<Vec<Vec<u8>>>;
}
#[derive(Debug, Default, Clone, Copy)]
pub struct LocalCollective;
impl Collective for LocalCollective {
fn rank(&self) -> usize {
0
}
fn world_size(&self) -> usize {
1
}
fn allreduce_sum_f64(&mut self, _data: &mut [f64]) -> Result<()> {
Ok(())
}
fn allreduce_sum_i64(&mut self, _data: &mut [i64]) -> Result<()> {
Ok(())
}
fn allreduce_max_f64(&mut self, _data: &mut [f64]) -> Result<()> {
Ok(())
}
fn allgather_bytes(&mut self, local: &[u8]) -> Result<Vec<Vec<u8>>> {
Ok(vec![local.to_vec()])
}
}