blob: 3183b3450d0399c3459d0a8430a454d92b89557a [file] [log] [blame]
Benoit Jacoba0ba3ac2019-04-08 12:00:37 -04001#include <iostream>
2
3#include "ruy.h"
4
5int main() {
6 ruy::Context context;
7
8 {
9 const float lhs_data[] = {1.0, 2.0, 3.0, 4.0};
10 const float rhs_data[] = {1.0, 2.0, 3.0, 4.0};
11 float dst_data[4];
12
13 ruy::Matrix<float> lhs;
14 ruy::MakeSimpleLayout(2, 2, ruy::Order::kRowMajor, &lhs.layout);
Sean Silvac43c0d32019-04-10 18:15:00 -040015 lhs.data = lhs_data;
Benoit Jacoba0ba3ac2019-04-08 12:00:37 -040016 ruy::Matrix<float> rhs;
17 ruy::MakeSimpleLayout(2, 2, ruy::Order::kColMajor, &rhs.layout);
Sean Silvac43c0d32019-04-10 18:15:00 -040018 rhs.data = rhs_data;
Benoit Jacoba0ba3ac2019-04-08 12:00:37 -040019 ruy::Matrix<float> dst;
20 ruy::MakeSimpleLayout(2, 2, ruy::Order::kColMajor, &dst.layout);
Sean Silvac43c0d32019-04-10 18:15:00 -040021 dst.data = dst_data;
Benoit Jacoba0ba3ac2019-04-08 12:00:37 -040022
23 ruy::BasicSpec<float, float> spec;
24 ruy::Mul<ruy::kAllPaths>(lhs, rhs, spec, &context, &dst);
25
26 std::cout << "Float example:\n";
27 std::cout << "LHS:\n" << lhs;
28 std::cout << "RHS:\n" << rhs;
29 std::cout << "Result:\n" << dst << "\n";
30 }
31
32 {
33 const std::uint8_t lhs_data[] = {1, 2, 3, 4};
34 const std::uint8_t rhs_data[] = {1, 2, 3, 4};
35 std::uint8_t dst_data[4];
36
37 ruy::Matrix<std::uint8_t> lhs;
38 ruy::MakeSimpleLayout(2, 2, ruy::Order::kRowMajor, &lhs.layout);
Sean Silvac43c0d32019-04-10 18:15:00 -040039 lhs.data = lhs_data;
Benoit Jacoba0ba3ac2019-04-08 12:00:37 -040040 ruy::Matrix<std::uint8_t> rhs;
41 ruy::MakeSimpleLayout(2, 2, ruy::Order::kColMajor, &rhs.layout);
Sean Silvac43c0d32019-04-10 18:15:00 -040042 rhs.data = rhs_data;
Benoit Jacoba0ba3ac2019-04-08 12:00:37 -040043 ruy::Matrix<std::uint8_t> dst;
44 ruy::MakeSimpleLayout(2, 2, ruy::Order::kColMajor, &dst.layout);
Sean Silvac43c0d32019-04-10 18:15:00 -040045 dst.data = dst_data;
Benoit Jacoba0ba3ac2019-04-08 12:00:37 -040046
47 ruy::BasicSpec<std::int32_t, std::uint8_t> spec;
48 spec.multiplier_fixedpoint = 1 << 30;
49 ruy::Mul<ruy::kAllPaths>(lhs, rhs, spec, &context, &dst);
50
51 std::cout << "Quantized example (note the quantized multiplier 2^30 means "
52 "one half)\n";
53 std::cout << "LHS:\n" << lhs;
54 std::cout << "RHS:\n" << rhs;
55 std::cout << "Result:\n" << dst << "\n";
56 }
57}