vyre 0.4.0

GPU compute intermediate representation with a standard operation library
Documentation
use crate::ir::{BufferDecl, DataType, Expr, Node, Program};
pub use super::float::f32_mul::F32Mul;

pub(crate) fn binary_f32_program(compute: fn(Expr, Expr) -> Expr) -> Program {
    let idx = Expr::var("idx");
    Program::new(
        vec![
            BufferDecl::read("a", 0, DataType::F32),
            BufferDecl::read("b", 1, DataType::F32),
            BufferDecl::output("out", 2, DataType::F32),
        ],
        crate::ops::primitive::WORKGROUP_SIZE,
        vec![
            Node::let_bind("idx", Expr::gid_x()),
            Node::if_then(
                Expr::lt(idx.clone(), Expr::buf_len("out")),
                vec![Node::store(
                    "out",
                    idx.clone(),
                    compute(Expr::load("a", idx.clone()), Expr::load("b", idx)),
                )],
            ),
        ],
    )
}