1use ug::Result;
2
3fn eval_add() -> Result<()> {
4 let kernel = ug::samples::ssa::simple_add(2)?;
5 println!("{kernel:?}");
6 let mut a = ug::interpreter::Buffer::I32(vec![0i32, 0]);
7 let mut b = ug::interpreter::Buffer::I32(vec![3i32, 4]);
8 let mut c = ug::interpreter::Buffer::I32(vec![1i32, 2]);
9 ug::interpreter::eval_ssa::<1>(&kernel, vec![&mut a, &mut b, &mut c], &[], 0)?;
10 println!("a: {a:?}\nb: {b:?}\nc: {c:?}");
11 Ok(())
12}
13
14fn eval_dotprod() -> Result<()> {
15 let kernel = ug::samples::ssa::simple_dotprod(2)?;
16 println!("{kernel:?}");
17 let mut a = ug::interpreter::Buffer::F32(vec![0f32]);
18 let mut b = ug::interpreter::Buffer::F32(vec![3f32, 4.5]);
19 let mut c = ug::interpreter::Buffer::F32(vec![1f32, 2.]);
20 ug::interpreter::eval_ssa::<1>(&kernel, vec![&mut a, &mut b, &mut c], &[], 0)?;
21 println!("a: {a:?}\nb: {b:?}\nc: {c:?}");
22 Ok(())
23}
24
25fn lower_add() -> Result<()> {
26 let kernel = ug::samples::simple_add(2)?;
27 let ssa_kernel = kernel.lower()?;
28 println!("{ssa_kernel:?}");
29 let mut c = ug::interpreter::Buffer::F32(vec![0f32, 0.]);
30 let mut b = ug::interpreter::Buffer::F32(vec![3f32, 4.]);
31 let mut a = ug::interpreter::Buffer::F32(vec![1f32, 2.]);
32 ug::interpreter::eval_ssa::<1>(&ssa_kernel, vec![&mut a, &mut b, &mut c], &[], 0)?;
33 println!("a: {a:?}\nb: {b:?}\nc: {c:?}");
34 Ok(())
35}
36
37fn softmax() -> Result<()> {
38 let kernel = ug::samples::op::softmax(2, 4)?;
39 println!("{kernel:?}");
40 let ssa_kernel = kernel.lower(&Default::default())?;
41 println!("{ssa_kernel:?}");
42 let mut a = ug::interpreter::Buffer::F32(vec![0., 1., 2., 3., 2., 1., 2., 1.]);
43 let mut b = ug::interpreter::Buffer::F32(vec![0f32; 8]);
44 ug::interpreter::eval_ssa::<1>(&ssa_kernel, vec![&mut a, &mut b], &[], 0)?;
45 println!("a: {a:?}\nb: {b:?}");
46 Ok(())
47}
48
49fn main() -> Result<()> {
50 eval_add()?;
51 eval_dotprod()?;
52 lower_add()?;
53 softmax()?;
54 Ok(())
55}