1use std::env;
9use std::process::exit;
10use std::time::Instant;
11use unmtx_gpu::*;
12
13fn create_matrix(n: usize, m: usize) -> Matrix
14{
15 let mut elems: Vec<f32> = vec![0.0f32; n * m];
16 for i in 0..n {
17 for j in 0..m {
18 elems[m * i + j] = (m * i + j) as f32;
19 }
20 }
21 Matrix::new_with_elems(n, m, elems.as_slice())
22}
23
24fn main()
25{
26 let args: Vec<String> = env::args().collect();
27 let n: usize = match args.get(1) {
28 Some(s) => {
29 match s.parse::<usize>() {
30 Ok(tmp_n) => tmp_n,
31 Err(err) => {
32 eprintln!("{}", err);
33 exit(1);
34 },
35 }
36 },
37 None => 100,
38 };
39 let m: usize = match args.get(2) {
40 Some(s) => {
41 match s.parse::<usize>() {
42 Ok(tmp_m) => tmp_m,
43 Err(err) => {
44 eprintln!("{}", err);
45 exit(1);
46 },
47 }
48 },
49 None => 100,
50 };
51 let l: usize = match args.get(3) {
52 Some(s) => {
53 match s.parse::<usize>() {
54 Ok(tmp_l) => tmp_l,
55 Err(err) => {
56 eprintln!("{}", err);
57 exit(1);
58 },
59 }
60 },
61 None => 100,
62 };
63 let frontend = match Frontend::new() {
64 Ok(tmp_frontend) => tmp_frontend,
65 Err(err) => {
66 eprintln!("{}", err);
67 exit(1);
68 },
69 };
70 println!("backend: {}", frontend.backend().name());
71 let a = create_matrix(n, l);
72 let b = create_matrix(l, m);
73 let now = Instant::now();
74 let c = a * b;
75 let duration = now.elapsed();
76 let elems = c.elems();
77 let sum = elems.iter().fold(0.0f32, |x, y| x + y);
78 println!("sum: {}", sum);
79 println!("time: {}.{:06}", duration.as_secs(), duration.as_micros() % 1000000);
80 match finalize_default_backend() {
81 Ok(()) => (),
82 Err(err) => {
83 eprintln!("{}", err);
84 exit(1);
85 },
86 }
87}