ruda-kernel 0.1.4

Ruda Rust kernel DSL and device tensor operations.
Documentation
use alloc::{boxed::Box, string::String, vec, vec::Vec};
use ruda_core::{ir::Processor, launch::ExecutionMode};
use ruda_compiler::cpp::shared::{CppCompiler, DialectProcessors};
use super::super::post_processing::{checked_io::CheckedIoProcessor, saturating::SaturatingArithmeticProcessor};

mod cuda;
mod hip;
use cuda::CudaMmaProcessor;
use hip::HipMmaProcessor;

pub type CudaCompiler<M> = CppCompiler<ruda_compiler::cpp::cuda::CudaDialect<M>, CudaProcessors>;
pub type HipCompiler<M> = CppCompiler<ruda_compiler::cpp::hip::HipDialect<M>, HipProcessors>;
#[cfg(feature = "lowering-metal")]
pub type MslCompiler = CppCompiler<ruda_compiler::cpp::metal::MslDialect, MetalProcessors>;

#[derive(Clone, Copy, Debug, Default)]
pub struct CudaProcessors;

impl DialectProcessors for CudaProcessors {
    fn checked_io(mode: ExecutionMode, kernel_name: String) -> Box<dyn Processor> {
        Box::new(CheckedIoProcessor::new(mode, kernel_name))
    }

    fn processors() -> Vec<Box<dyn Processor>> {
        vec![
            Box::new(CudaMmaProcessor),
            Box::new(SaturatingArithmeticProcessor::new(false)),
        ]
    }
}

#[derive(Clone, Copy, Debug, Default)]
pub struct HipProcessors;

impl DialectProcessors for HipProcessors {
    fn checked_io(mode: ExecutionMode, kernel_name: String) -> Box<dyn Processor> {
        Box::new(CheckedIoProcessor::new(mode, kernel_name))
    }

    fn processors() -> Vec<Box<dyn Processor>> {
        vec![
            Box::new(HipMmaProcessor),
            Box::new(SaturatingArithmeticProcessor::new(true)),
        ]
    }
}

#[cfg(feature = "lowering-metal")]
#[derive(Clone, Copy, Debug, Default)]
pub struct MetalProcessors;

#[cfg(feature = "lowering-metal")]
impl DialectProcessors for MetalProcessors {
    fn checked_io(mode: ExecutionMode, kernel_name: String) -> Box<dyn Processor> {
        Box::new(CheckedIoProcessor::new(mode, kernel_name))
    }

    fn processors() -> Vec<Box<dyn Processor>> {
        Vec::new()
    }
}

#[cfg(feature = "lowering-metal")]
pub mod metal;