ruCCL 0.21.1

Ruda collective communication algorithms and orchestration.
Documentation
use std::error::Error;

pub trait RankDevice<T>: Clone + Send + Sync + 'static {
    type Buffer: Clone + Send + Sync + 'static;
    type Kernel: Clone + Send + Sync + 'static;
    type ReductionLaunch;
    type Error: Error + Send + Sync + 'static;

    const ELEMENT_SIZE: usize;

    fn buffer_len(&self, buffer: &Self::Buffer) -> usize;

    fn buffer_bytes(&self, buffer: &Self::Buffer) -> usize;

    fn encode(values: &[T]) -> Vec<u8>;

    fn decode(bytes: &[u8]) -> Result<Vec<T>, Self::Error>;

    fn alloc(&self, length: usize) -> Result<Self::Buffer, Self::Error>;

    fn copy_to_device(&self, buffer: &Self::Buffer, values: &[T]) -> Result<(), Self::Error>;

    fn copy_from_device(&self, buffer: &Self::Buffer) -> Result<Vec<T>, Self::Error>;

    fn copy_from_device_at(
        &self,
        buffer: &Self::Buffer,
        element_offset: usize,
        length: usize,
    ) -> Result<Vec<T>, Self::Error>;

    fn copy_bytes_to_device_at(
        &self,
        buffer: &Self::Buffer,
        element_offset: usize,
        values: &[u8],
    ) -> Result<(), Self::Error>;

    fn copy_bytes_from_device_at(
        &self,
        buffer: &Self::Buffer,
        element_offset: usize,
        length: usize,
    ) -> Result<Vec<u8>, Self::Error>;

    fn prepare_reduction(
        &self,
        length: usize,
        destination_offset: usize,
    ) -> Result<Self::ReductionLaunch, Self::Error>;

    fn launch_reduction(
        &self,
        kernel: &Self::Kernel,
        launch: &Self::ReductionLaunch,
        source: &Self::Buffer,
        destination: &Self::Buffer,
    ) -> Result<(), Self::Error>;
}