use alloc::vec::Vec;
use burn_dispatch::DispatchDevice;
pub use burn_dispatch::backends::GroupError;
use crate::Device;
#[must_use = "group options do nothing until initialized"]
#[derive(Clone, Debug)]
pub struct GroupOptions {
devices: Vec<Device>,
}
impl GroupOptions {
pub fn init(self) -> Result<Device, GroupError> {
let members = self
.devices
.iter()
.map(|device| device.as_dispatch().clone())
.collect();
Ok(Device::new(DispatchDevice::group(members)?))
}
}
impl Device {
pub fn group_options(devices: &[Device]) -> GroupOptions {
GroupOptions {
devices: devices.to_vec(),
}
}
}