"...common/git@developer.sourcefind.cn:Wenxuan/LightX2V.git" did not exist on "3aa950811d3c0ccdfc9082fcd8fddc572cd6fd99"
normalize_ops_test.cpp 5.91 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
 * The MIT License (MIT)
 *
 * Copyright (c) 2015-2022 Advanced Micro Devices, Inc. All rights reserved.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
Shucai Xiao's avatar
Shucai Xiao committed
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <migraphx/normalize_ops.hpp>
#include <migraphx/dead_code_elimination.hpp>
#include <migraphx/pass_manager.hpp>
#include <migraphx/make_op.hpp>
#include <migraphx/functional.hpp>
#include <migraphx/op/normalize_attribute.hpp>
#include <basic_ops.hpp>
#include <test.hpp>

struct normalize_test_op
{
    std::vector<int64_t> axes = {};

    template <class Self, class F>
    static auto reflect(Self& self, F f)
    {
        return migraphx::pack(f(self.axes, "axes"));
    }

    migraphx::value attributes() const
    {
        migraphx::value normalize;
        normalize["axes"] = migraphx::value::array{migraphx::op::normalize_attribute::clip_max,
                                                   migraphx::op::normalize_attribute::clip_min};
        return {{"normalize_axes", normalize}};
    }

    std::string name() const { return "normalize_ops_test::test_op"; }
    migraphx::shape normalize_compute_shape(std::vector<migraphx::shape> inputs) const
    {
        return inputs[0];
    }
    migraphx::argument compute(migraphx::context&,
                               const migraphx::shape& output_shape,
                               const std::vector<migraphx::argument>&) const
    {
        return {output_shape};
    }
};

Paul Fultz II's avatar
Paul Fultz II committed
64
void run_pass(migraphx::module& m)
Shucai Xiao's avatar
Shucai Xiao committed
65
{
Paul Fultz II's avatar
Paul Fultz II committed
66
    migraphx::run_passes(m, {migraphx::normalize_ops{}, migraphx::dead_code_elimination{}});
Shucai Xiao's avatar
Shucai Xiao committed
67
68
}

Paul Fultz II's avatar
Paul Fultz II committed
69
migraphx::module create_gather(int64_t axis)
Shucai Xiao's avatar
Shucai Xiao committed
70
{
Paul Fultz II's avatar
Paul Fultz II committed
71
    migraphx::module m;
Shucai Xiao's avatar
Shucai Xiao committed
72
73
    migraphx::shape sd{migraphx::shape::float_type, {2, 3, 4}};
    migraphx::shape si{migraphx::shape::int64_type, {2, 3}};
Paul Fultz II's avatar
Paul Fultz II committed
74
75
76
77
    auto di = m.add_parameter("data", sd);
    auto ii = m.add_parameter("ind", si);
    auto r  = m.add_instruction(migraphx::make_op("gather", {{"axis", axis}}), di, ii);
    m.add_return({r});
Shucai Xiao's avatar
Shucai Xiao committed
78

Paul Fultz II's avatar
Paul Fultz II committed
79
    return m;
Shucai Xiao's avatar
Shucai Xiao committed
80
81
82
83
84
}

TEST_CASE(gather_test)
{

Paul Fultz II's avatar
Paul Fultz II committed
85
86
87
    auto m1 = create_gather(-3);
    auto m2 = create_gather(0);
    run_pass(m1);
Shucai Xiao's avatar
Shucai Xiao committed
88

Paul Fultz II's avatar
Paul Fultz II committed
89
    EXPECT(m1 == m2);
Shucai Xiao's avatar
Shucai Xiao committed
90
91
92
93
}

TEST_CASE(gather_test_1)
{
Paul Fultz II's avatar
Paul Fultz II committed
94
95
96
    auto m1 = create_gather(1);
    auto m2 = create_gather(1);
    run_pass(m1);
Shucai Xiao's avatar
Shucai Xiao committed
97

Paul Fultz II's avatar
Paul Fultz II committed
98
    EXPECT(m1 == m2);
Shucai Xiao's avatar
Shucai Xiao committed
99
100
}

kahmed10's avatar
kahmed10 committed
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
migraphx::module create_padded_op(const std::vector<size_t>& pad_vals)
{
    migraphx::module m;
    migraphx::shape s{migraphx::shape::float_type, {2, 3, 4, 5}};
    auto si = m.add_parameter("data", s);
    auto r  = m.add_instruction(migraphx::make_op("pooling", {{"padding", pad_vals}}), si);
    m.add_return({r});

    return m;
}

TEST_CASE(padding_attr_test)
{
    migraphx::module m1 = create_padded_op({0, 1});
    migraphx::module m2 = create_padded_op({0, 1, 0, 1});
    run_pass(m1);

    EXPECT(m1 == m2);
}

Paul Fultz II's avatar
Paul Fultz II committed
121
migraphx::module create_reduce_mean(const std::vector<int64_t>& axes)
Shucai Xiao's avatar
Shucai Xiao committed
122
{
Paul Fultz II's avatar
Paul Fultz II committed
123
    migraphx::module m;
Shucai Xiao's avatar
Shucai Xiao committed
124
    migraphx::shape s{migraphx::shape::float_type, {2, 3, 4, 5}};
Paul Fultz II's avatar
Paul Fultz II committed
125
126
127
    auto si = m.add_parameter("data", s);
    auto r  = m.add_instruction(migraphx::make_op("reduce_mean", {{"axes", axes}}), si);
    m.add_return({r});
Shucai Xiao's avatar
Shucai Xiao committed
128

Paul Fultz II's avatar
Paul Fultz II committed
129
    return m;
Shucai Xiao's avatar
Shucai Xiao committed
130
131
132
133
}

TEST_CASE(reduce_mean_test)
{
Paul Fultz II's avatar
Paul Fultz II committed
134
135
136
    migraphx::module m1 = create_reduce_mean({0, 1, -1});
    migraphx::module m2 = create_reduce_mean({0, 1, 3});
    run_pass(m1);
Shucai Xiao's avatar
Shucai Xiao committed
137

Paul Fultz II's avatar
Paul Fultz II committed
138
    EXPECT(m1 == m2);
Shucai Xiao's avatar
Shucai Xiao committed
139
140
141
142
}

TEST_CASE(reduce_mean_test_1)
{
Paul Fultz II's avatar
Paul Fultz II committed
143
144
145
    migraphx::module m1 = create_reduce_mean({0, 1, 2});
    migraphx::module m2 = create_reduce_mean({0, 1, 2});
    run_pass(m1);
Shucai Xiao's avatar
Shucai Xiao committed
146

Paul Fultz II's avatar
Paul Fultz II committed
147
    EXPECT(m1 == m2);
Shucai Xiao's avatar
Shucai Xiao committed
148
149
}

Paul Fultz II's avatar
Paul Fultz II committed
150
151
152
migraphx::module create_slice(const std::vector<int64_t>& axes,
                              const std::vector<int64_t>& starts,
                              const std::vector<int64_t>& ends)
Shucai Xiao's avatar
Shucai Xiao committed
153
{
Paul Fultz II's avatar
Paul Fultz II committed
154
    migraphx::module m;
Shucai Xiao's avatar
Shucai Xiao committed
155
    migraphx::shape s{migraphx::shape::float_type, {2, 3, 4, 5}};
Paul Fultz II's avatar
Paul Fultz II committed
156
157
    auto si = m.add_parameter("data", s);
    auto r  = m.add_instruction(
Shucai Xiao's avatar
Shucai Xiao committed
158
        migraphx::make_op("slice", {{"axes", axes}, {"starts", starts}, {"ends", ends}}), si);
Paul Fultz II's avatar
Paul Fultz II committed
159
    m.add_return({r});
Shucai Xiao's avatar
Shucai Xiao committed
160

Paul Fultz II's avatar
Paul Fultz II committed
161
    return m;
Shucai Xiao's avatar
Shucai Xiao committed
162
163
164
165
}

TEST_CASE(slice_test)
{
Paul Fultz II's avatar
Paul Fultz II committed
166
167
168
    migraphx::module m1 = create_slice({0, 1, -1}, {-5, 1, -3}, {2, 2, 8});
    migraphx::module m2 = create_slice({0, 1, 3}, {0, 1, 2}, {2, 2, 5});
    run_pass(m1);
Shucai Xiao's avatar
Shucai Xiao committed
169

Paul Fultz II's avatar
Paul Fultz II committed
170
    EXPECT(m1 == m2);
Shucai Xiao's avatar
Shucai Xiao committed
171
172
173
174
}

TEST_CASE(slice_test_1)
{
Paul Fultz II's avatar
Paul Fultz II committed
175
176
177
    migraphx::module m1 = create_slice({0, 1, 3}, {0, 1, -3}, {1, 2, 5});
    migraphx::module m2 = create_slice({0, 1, 3}, {0, 1, 2}, {1, 2, 5});
    run_pass(m1);
Shucai Xiao's avatar
Shucai Xiao committed
178

Paul Fultz II's avatar
Paul Fultz II committed
179
    EXPECT(m1 == m2);
Shucai Xiao's avatar
Shucai Xiao committed
180
181
}

Paul Fultz II's avatar
Paul Fultz II committed
182
migraphx::module create_test_op(const std::vector<int64_t>& axes)
Shucai Xiao's avatar
Shucai Xiao committed
183
{
Paul Fultz II's avatar
Paul Fultz II committed
184
    migraphx::module m;
Shucai Xiao's avatar
Shucai Xiao committed
185
    migraphx::shape sd{migraphx::shape::float_type, {2, 3, 4}};
Paul Fultz II's avatar
Paul Fultz II committed
186
187
188
    auto di = m.add_parameter("data", sd);
    auto r  = m.add_instruction(normalize_test_op{axes}, di);
    m.add_return({r});
Shucai Xiao's avatar
Shucai Xiao committed
189

Paul Fultz II's avatar
Paul Fultz II committed
190
    return m;
Shucai Xiao's avatar
Shucai Xiao committed
191
192
193
194
195
}

TEST_CASE(test_op)
{
    std::vector<int64_t> axes1 = {-4, 5};
Paul Fultz II's avatar
Paul Fultz II committed
196
    auto m1                    = create_test_op(axes1);
Shucai Xiao's avatar
Shucai Xiao committed
197
198

    std::vector<int64_t> axes2 = {1, 2};
Paul Fultz II's avatar
Paul Fultz II committed
199
    auto m2                    = create_test_op(axes2);
Shucai Xiao's avatar
Shucai Xiao committed
200

Paul Fultz II's avatar
Paul Fultz II committed
201
202
    run_pass(m1);
    EXPECT(m1 == m2);
Shucai Xiao's avatar
Shucai Xiao committed
203
204
205
}

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