decompose_test.cpp 7.13 KB
Newer Older
1
2
3
#include <migraphx/decompose.hpp>
#include <migraphx/pass_manager.hpp>
#include <basic_ops.hpp>
4
5
#include <migraphx/make_op.hpp>

6
7
#include <test.hpp>

Paul Fultz II's avatar
Paul Fultz II committed
8
void run_pass(migraphx::module& m) { migraphx::run_passes(m, {migraphx::decompose{}}); }
9
10
11

TEST_CASE(dot_add)
{
Paul Fultz II's avatar
Paul Fultz II committed
12
    migraphx::module m1;
13
    {
Paul Fultz II's avatar
Paul Fultz II committed
14
15
16
17
18
        auto x   = m1.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {2, 2}});
        auto y   = m1.add_parameter("y", migraphx::shape{migraphx::shape::float_type, {2, 2}});
        auto z   = m1.add_parameter("z", migraphx::shape{migraphx::shape::float_type, {2, 2}});
        auto dot = m1.add_instruction(migraphx::make_op("dot"), x, y, z);
        m1.add_instruction(migraphx::make_op("identity"), dot);
19
    }
Paul Fultz II's avatar
Paul Fultz II committed
20
21
    run_pass(m1);
    migraphx::module m2;
22
    {
Paul Fultz II's avatar
Paul Fultz II committed
23
24
25
26
27
28
        auto x   = m2.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {2, 2}});
        auto y   = m2.add_parameter("y", migraphx::shape{migraphx::shape::float_type, {2, 2}});
        auto z   = m2.add_parameter("z", migraphx::shape{migraphx::shape::float_type, {2, 2}});
        auto dot = m2.add_instruction(migraphx::make_op("dot", {{"alpha", 1}, {"beta", 0}}), x, y);
        auto add = m2.add_instruction(migraphx::make_op("add"), dot, z);
        m2.add_instruction(migraphx::make_op("identity"), add);
29
    }
Paul Fultz II's avatar
Paul Fultz II committed
30
    EXPECT(m1 == m2);
31
32
33
34
}

TEST_CASE(dot_add_beta_float)
{
Paul Fultz II's avatar
Paul Fultz II committed
35
    migraphx::module m1;
36
    {
Paul Fultz II's avatar
Paul Fultz II committed
37
38
39
40
41
42
        auto x = m1.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {2, 2}});
        auto y = m1.add_parameter("y", migraphx::shape{migraphx::shape::float_type, {2, 2}});
        auto z = m1.add_parameter("z", migraphx::shape{migraphx::shape::float_type, {2, 2}});
        auto dot =
            m1.add_instruction(migraphx::make_op("dot", {{"alpha", 1.0}, {"beta", 0.5}}), x, y, z);
        m1.add_instruction(migraphx::make_op("identity"), dot);
43
    }
Paul Fultz II's avatar
Paul Fultz II committed
44
45
    run_pass(m1);
    migraphx::module m2;
46
    {
Paul Fultz II's avatar
Paul Fultz II committed
47
48
49
50
51
52
53
        auto x   = m2.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {2, 2}});
        auto y   = m2.add_parameter("y", migraphx::shape{migraphx::shape::float_type, {2, 2}});
        auto z   = m2.add_parameter("z", migraphx::shape{migraphx::shape::float_type, {2, 2}});
        auto dot = m2.add_instruction(migraphx::make_op("dot", {{"alpha", 1}, {"beta", 0}}), x, y);
        auto beta =
            m2.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::float_type}, {0.5}});
        auto beta_broadcast = m2.add_instruction(
54
            migraphx::make_op("multibroadcast", {{"output_lens", {2, 2}}}), beta);
Paul Fultz II's avatar
Paul Fultz II committed
55
56
57
        auto mul = m2.add_instruction(migraphx::make_op("mul"), z, beta_broadcast);
        auto add = m2.add_instruction(migraphx::make_op("add"), dot, mul);
        m2.add_instruction(migraphx::make_op("identity"), add);
58
    }
Paul Fultz II's avatar
Paul Fultz II committed
59
    EXPECT(m1 == m2);
60
61
62
63
}

TEST_CASE(dot_add_beta_half)
{
Paul Fultz II's avatar
Paul Fultz II committed
64
    migraphx::module m1;
65
    {
Paul Fultz II's avatar
Paul Fultz II committed
66
67
68
69
70
71
        auto x = m1.add_parameter("x", migraphx::shape{migraphx::shape::half_type, {2, 2}});
        auto y = m1.add_parameter("y", migraphx::shape{migraphx::shape::half_type, {2, 2}});
        auto z = m1.add_parameter("z", migraphx::shape{migraphx::shape::half_type, {2, 2}});
        auto dot =
            m1.add_instruction(migraphx::make_op("dot", {{"alpha", 1.0}, {"beta", 0.5}}), x, y, z);
        m1.add_instruction(migraphx::make_op("identity"), dot);
72
    }
Paul Fultz II's avatar
Paul Fultz II committed
73
74
    run_pass(m1);
    migraphx::module m2;
75
    {
Paul Fultz II's avatar
Paul Fultz II committed
76
77
78
79
        auto x   = m2.add_parameter("x", migraphx::shape{migraphx::shape::half_type, {2, 2}});
        auto y   = m2.add_parameter("y", migraphx::shape{migraphx::shape::half_type, {2, 2}});
        auto z   = m2.add_parameter("z", migraphx::shape{migraphx::shape::half_type, {2, 2}});
        auto dot = m2.add_instruction(migraphx::make_op("dot", {{"alpha", 1}, {"beta", 0}}), x, y);
80
        auto beta =
Paul Fultz II's avatar
Paul Fultz II committed
81
82
            m2.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::half_type}, {0.5}});
        auto beta_broadcast = m2.add_instruction(
83
            migraphx::make_op("multibroadcast", {{"output_lens", {2, 2}}}), beta);
Paul Fultz II's avatar
Paul Fultz II committed
84
85
86
        auto mul = m2.add_instruction(migraphx::make_op("mul"), z, beta_broadcast);
        auto add = m2.add_instruction(migraphx::make_op("add"), dot, mul);
        m2.add_instruction(migraphx::make_op("identity"), add);
87
    }
Paul Fultz II's avatar
Paul Fultz II committed
88
    EXPECT(m1 == m2);
89
90
91
92
}

TEST_CASE(dot_add_beta_double)
{
Paul Fultz II's avatar
Paul Fultz II committed
93
    migraphx::module m1;
94
    {
Paul Fultz II's avatar
Paul Fultz II committed
95
96
97
98
99
100
        auto x = m1.add_parameter("x", migraphx::shape{migraphx::shape::double_type, {2, 2}});
        auto y = m1.add_parameter("y", migraphx::shape{migraphx::shape::double_type, {2, 2}});
        auto z = m1.add_parameter("z", migraphx::shape{migraphx::shape::double_type, {2, 2}});
        auto dot =
            m1.add_instruction(migraphx::make_op("dot", {{"alpha", 1.0}, {"beta", 0.5}}), x, y, z);
        m1.add_instruction(migraphx::make_op("identity"), dot);
101
    }
Paul Fultz II's avatar
Paul Fultz II committed
102
103
    run_pass(m1);
    migraphx::module m2;
104
    {
Paul Fultz II's avatar
Paul Fultz II committed
105
106
107
108
109
110
111
        auto x   = m2.add_parameter("x", migraphx::shape{migraphx::shape::double_type, {2, 2}});
        auto y   = m2.add_parameter("y", migraphx::shape{migraphx::shape::double_type, {2, 2}});
        auto z   = m2.add_parameter("z", migraphx::shape{migraphx::shape::double_type, {2, 2}});
        auto dot = m2.add_instruction(migraphx::make_op("dot", {{"alpha", 1}, {"beta", 0}}), x, y);
        auto beta =
            m2.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::double_type}, {0.5}});
        auto beta_broadcast = m2.add_instruction(
112
            migraphx::make_op("multibroadcast", {{"output_lens", {2, 2}}}), beta);
Paul Fultz II's avatar
Paul Fultz II committed
113
114
115
        auto mul = m2.add_instruction(migraphx::make_op("mul"), z, beta_broadcast);
        auto add = m2.add_instruction(migraphx::make_op("add"), dot, mul);
        m2.add_instruction(migraphx::make_op("identity"), add);
116
    }
Paul Fultz II's avatar
Paul Fultz II committed
117
    EXPECT(m1 == m2);
118
119
120
121
}

TEST_CASE(dot_add_beta_int)
{
Paul Fultz II's avatar
Paul Fultz II committed
122
    migraphx::module m1;
123
    {
Paul Fultz II's avatar
Paul Fultz II committed
124
125
126
127
128
129
        auto x = m1.add_parameter("x", migraphx::shape{migraphx::shape::int32_type, {2, 2}});
        auto y = m1.add_parameter("y", migraphx::shape{migraphx::shape::int32_type, {2, 2}});
        auto z = m1.add_parameter("z", migraphx::shape{migraphx::shape::int32_type, {2, 2}});
        auto dot =
            m1.add_instruction(migraphx::make_op("dot", {{"alpha", 1.0}, {"beta", 0.5}}), x, y, z);
        m1.add_instruction(migraphx::make_op("identity"), dot);
130
    }
Paul Fultz II's avatar
Paul Fultz II committed
131
    run_pass(m1);
132
133
134
135
136
137
138
139
140
141
142
143
144
145
    migraphx::module m2;
    {
        auto x   = m2.add_parameter("x", migraphx::shape{migraphx::shape::int32_type, {2, 2}});
        auto y   = m2.add_parameter("y", migraphx::shape{migraphx::shape::int32_type, {2, 2}});
        auto z   = m2.add_parameter("z", migraphx::shape{migraphx::shape::int32_type, {2, 2}});
        auto dot = m2.add_instruction(migraphx::make_op("dot", {{"alpha", 1}, {"beta", 0}}), x, y);
        auto beta =
            m2.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::int32_type}, {0.5}});
        auto beta_broadcast = m2.add_instruction(
            migraphx::make_op("multibroadcast", {{"output_lens", {2, 2}}}), beta);
        auto mul = m2.add_instruction(migraphx::make_op("mul"), z, beta_broadcast);
        auto add = m2.add_instruction(migraphx::make_op("add"), dot, mul);
        m2.add_instruction(migraphx::make_op("identity"), add);
    }
Paul Fultz II's avatar
Paul Fultz II committed
146
    EXPECT(m1 == m2);
147
148
149
}

int main(int argc, const char* argv[]) { test::run(argc, argv); }