Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
gaoqiong
MIGraphX
Commits
2fc6b715
"examples/multiple-choice/run_multiple_choice.py" did not exist on "50e15c825cc6cb488561aa911dc81deb765d3ad7"
Commit
2fc6b715
authored
Apr 14, 2023
by
Paul
Browse files
Merge
parents
5967d68d
118e05c7
Changes
177
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
460 additions
and
70 deletions
+460
-70
test/simplify_qdq_test.cpp
test/simplify_qdq_test.cpp
+15
-10
test/simplify_reshapes_test.cpp
test/simplify_reshapes_test.cpp
+40
-0
test/split_single_dyn_dim_test.cpp
test/split_single_dyn_dim_test.cpp
+160
-0
test/targets.cpp
test/targets.cpp
+4
-2
test/verify/main.cpp
test/verify/main.cpp
+8
-1
test/verify/run_verify.cpp
test/verify/run_verify.cpp
+24
-16
test/verify/run_verify.hpp
test/verify/run_verify.hpp
+7
-3
test/verify/test_add_conv_constant.cpp
test/verify/test_add_conv_constant.cpp
+45
-0
test/verify/test_concat_axis_2.cpp
test/verify/test_concat_axis_2.cpp
+6
-7
test/verify/test_layernorm.cpp
test/verify/test_layernorm.cpp
+15
-4
test/verify/test_quantizelinear_int32.cpp
test/verify/test_quantizelinear_int32.cpp
+7
-4
test/verify/test_reduce_op_large.cpp
test/verify/test_reduce_op_large.cpp
+14
-1
test/verify/test_select_module_add.cpp
test/verify/test_select_module_add.cpp
+10
-4
test/verify/test_split_single_dyn_dim.cpp
test/verify/test_split_single_dyn_dim.cpp
+56
-0
test/verify/verify_program.hpp
test/verify/verify_program.hpp
+8
-4
tools/accuracy/accuracy_checker.py
tools/accuracy/accuracy_checker.py
+41
-13
tools/api/api.cpp
tools/api/api.cpp
+0
-1
No files found.
test/simplify_qdq_test.cpp
View file @
2fc6b715
...
@@ -23,7 +23,7 @@
...
@@ -23,7 +23,7 @@
*/
*/
#include <migraphx/simplify_qdq.hpp>
#include <migraphx/simplify_qdq.hpp>
#include <migraphx/program.hpp>
#include <migraphx/program.hpp>
#include <migraphx/re
f/
target.hpp>
#include <migraphx/re
gister_
target.hpp>
#include <migraphx/instruction.hpp>
#include <migraphx/instruction.hpp>
#include <test.hpp>
#include <test.hpp>
#include <migraphx/make_op.hpp>
#include <migraphx/make_op.hpp>
...
@@ -402,9 +402,10 @@ TEST_CASE(conv_bias_add)
...
@@ -402,9 +402,10 @@ TEST_CASE(conv_bias_add)
auto
bias
=
m1
.
add_parameter
(
"bias"
,
s6
);
auto
bias
=
m1
.
add_parameter
(
"bias"
,
s6
);
auto
scale
=
m1
.
add_literal
(
0.5
f
);
auto
scale
=
m1
.
add_literal
(
0.5
f
);
auto
zero
=
m1
.
add_literal
(
std
::
int8_t
{
0
});
auto
zero
=
m1
.
add_literal
(
std
::
int8_t
{
0
});
auto
zero32
=
m1
.
add_literal
(
std
::
int32_t
{
0
});
auto
d1
=
add_quantize_op
(
m1
,
"dequantizelinear"
,
weights
,
scale
,
zero
);
auto
d1
=
add_quantize_op
(
m1
,
"dequantizelinear"
,
weights
,
scale
,
zero
);
auto
d2
=
add_quantize_op
(
m1
,
"dequantizelinear"
,
bias
,
scale
,
zero
);
auto
d2
=
add_quantize_op
(
m1
,
"dequantizelinear"
,
bias
,
scale
,
zero
32
);
auto
q1
=
add_quantize_op
(
m1
,
"quantizelinear"
,
input
,
scale
,
zero
);
auto
q1
=
add_quantize_op
(
m1
,
"quantizelinear"
,
input
,
scale
,
zero
);
auto
d5
=
add_quantize_op
(
m1
,
"dequantizelinear"
,
q1
,
scale
,
zero
);
auto
d5
=
add_quantize_op
(
m1
,
"dequantizelinear"
,
q1
,
scale
,
zero
);
auto
c1
=
m1
.
add_instruction
(
migraphx
::
make_op
(
"convolution"
,
auto
c1
=
m1
.
add_instruction
(
migraphx
::
make_op
(
"convolution"
,
...
@@ -428,9 +429,10 @@ TEST_CASE(conv_bias_add)
...
@@ -428,9 +429,10 @@ TEST_CASE(conv_bias_add)
auto
bias
=
m2
.
add_parameter
(
"bias"
,
s6
);
auto
bias
=
m2
.
add_parameter
(
"bias"
,
s6
);
auto
scale
=
m2
.
add_literal
(
0.5
f
);
auto
scale
=
m2
.
add_literal
(
0.5
f
);
auto
zero
=
m2
.
add_literal
(
std
::
int8_t
{
0
});
auto
zero
=
m2
.
add_literal
(
std
::
int8_t
{
0
});
auto
zero32
=
m2
.
add_literal
(
std
::
int32_t
{
0
});
auto
scale1
=
m2
.
add_literal
(
0.25
f
);
auto
scale1
=
m2
.
add_literal
(
0.25
f
);
auto
d2
=
add_quantize_op
(
m2
,
"dequantizelinear"
,
bias
,
scale
,
zero
);
auto
d2
=
add_quantize_op
(
m2
,
"dequantizelinear"
,
bias
,
scale
,
zero
32
);
auto
q1
=
add_quantize_op
(
m2
,
"quantizelinear"
,
input
,
scale
,
zero
);
auto
q1
=
add_quantize_op
(
m2
,
"quantizelinear"
,
input
,
scale
,
zero
);
auto
c1
=
m2
.
add_instruction
(
migraphx
::
make_op
(
"quant_convolution"
,
auto
c1
=
m2
.
add_instruction
(
migraphx
::
make_op
(
"quant_convolution"
,
{{
"padding"
,
{
0
,
0
,
0
,
0
}},
{{
"padding"
,
{
0
,
0
,
0
,
0
}},
...
@@ -468,9 +470,10 @@ TEST_CASE(conv_pooling_dot)
...
@@ -468,9 +470,10 @@ TEST_CASE(conv_pooling_dot)
auto
input
=
m1
.
add_parameter
(
"input"
,
s7
);
auto
input
=
m1
.
add_parameter
(
"input"
,
s7
);
auto
scale
=
m1
.
add_literal
(
0.5
f
);
auto
scale
=
m1
.
add_literal
(
0.5
f
);
auto
zero
=
m1
.
add_literal
(
std
::
int8_t
{
0
});
auto
zero
=
m1
.
add_literal
(
std
::
int8_t
{
0
});
auto
zero32
=
m1
.
add_literal
(
std
::
int32_t
{
0
});
auto
d1
=
add_quantize_op
(
m1
,
"dequantizelinear"
,
weights
,
scale
,
zero
);
auto
d1
=
add_quantize_op
(
m1
,
"dequantizelinear"
,
weights
,
scale
,
zero
);
auto
d2
=
add_quantize_op
(
m1
,
"dequantizelinear"
,
bias
,
scale
,
zero
);
auto
d2
=
add_quantize_op
(
m1
,
"dequantizelinear"
,
bias
,
scale
,
zero
32
);
auto
d3
=
add_quantize_op
(
m1
,
"dequantizelinear"
,
ab
,
scale
,
zero
);
auto
d3
=
add_quantize_op
(
m1
,
"dequantizelinear"
,
ab
,
scale
,
zero
);
auto
d4
=
add_quantize_op
(
m1
,
"dequantizelinear"
,
db
,
scale
,
zero
);
auto
d4
=
add_quantize_op
(
m1
,
"dequantizelinear"
,
db
,
scale
,
zero
);
auto
q1
=
add_quantize_op
(
m1
,
"quantizelinear"
,
input
,
scale
,
zero
);
auto
q1
=
add_quantize_op
(
m1
,
"quantizelinear"
,
input
,
scale
,
zero
);
...
@@ -515,10 +518,11 @@ TEST_CASE(conv_pooling_dot)
...
@@ -515,10 +518,11 @@ TEST_CASE(conv_pooling_dot)
auto
input
=
m2
.
add_parameter
(
"input"
,
s7
);
auto
input
=
m2
.
add_parameter
(
"input"
,
s7
);
auto
scale
=
m2
.
add_literal
(
0.5
f
);
auto
scale
=
m2
.
add_literal
(
0.5
f
);
auto
zero
=
m2
.
add_literal
(
std
::
int8_t
{
0
});
auto
zero
=
m2
.
add_literal
(
std
::
int8_t
{
0
});
auto
zero32
=
m2
.
add_literal
(
std
::
int32_t
{
0
});
auto
scale1
=
m2
.
add_literal
(
0.25
f
);
auto
scale1
=
m2
.
add_literal
(
0.25
f
);
auto
scale2
=
m2
.
add_literal
(
0.25
f
);
auto
scale2
=
m2
.
add_literal
(
0.25
f
);
auto
d2
=
add_quantize_op
(
m2
,
"dequantizelinear"
,
bias
,
scale
,
zero
);
auto
d2
=
add_quantize_op
(
m2
,
"dequantizelinear"
,
bias
,
scale
,
zero
32
);
auto
d3
=
add_quantize_op
(
m2
,
"dequantizelinear"
,
ab
,
scale
,
zero
);
auto
d3
=
add_quantize_op
(
m2
,
"dequantizelinear"
,
ab
,
scale
,
zero
);
auto
q1
=
add_quantize_op
(
m2
,
"quantizelinear"
,
input
,
scale
,
zero
);
auto
q1
=
add_quantize_op
(
m2
,
"quantizelinear"
,
input
,
scale
,
zero
);
auto
c1
=
m2
.
add_instruction
(
migraphx
::
make_op
(
"quant_convolution"
,
auto
c1
=
m2
.
add_instruction
(
migraphx
::
make_op
(
"quant_convolution"
,
...
@@ -572,9 +576,10 @@ TEST_CASE(mobilenet_snippet)
...
@@ -572,9 +576,10 @@ TEST_CASE(mobilenet_snippet)
auto
input
=
mm
.
add_parameter
(
"input"
,
s7
);
auto
input
=
mm
.
add_parameter
(
"input"
,
s7
);
auto
scale
=
mm
.
add_literal
(
0.5
f
);
auto
scale
=
mm
.
add_literal
(
0.5
f
);
auto
zero
=
mm
.
add_literal
(
std
::
int8_t
{
0
});
auto
zero
=
mm
.
add_literal
(
std
::
int8_t
{
0
});
auto
zero32
=
mm
.
add_literal
(
std
::
int32_t
{
0
});
auto
d1
=
add_quantize_op
(
mm
,
"dequantizelinear"
,
weights
,
scale
,
zero
);
auto
d1
=
add_quantize_op
(
mm
,
"dequantizelinear"
,
weights
,
scale
,
zero
);
auto
d2
=
add_quantize_op
(
mm
,
"dequantizelinear"
,
bias
,
scale
,
zero
);
auto
d2
=
add_quantize_op
(
mm
,
"dequantizelinear"
,
bias
,
scale
,
zero
32
);
auto
d3
=
add_quantize_op
(
mm
,
"dequantizelinear"
,
ab
,
scale
,
zero
);
auto
d3
=
add_quantize_op
(
mm
,
"dequantizelinear"
,
ab
,
scale
,
zero
);
auto
d4
=
add_quantize_op
(
mm
,
"dequantizelinear"
,
db
,
scale
,
zero
);
auto
d4
=
add_quantize_op
(
mm
,
"dequantizelinear"
,
db
,
scale
,
zero
);
auto
q1
=
add_quantize_op
(
mm
,
"quantizelinear"
,
input
,
scale
,
zero
);
auto
q1
=
add_quantize_op
(
mm
,
"quantizelinear"
,
input
,
scale
,
zero
);
...
@@ -686,8 +691,8 @@ TEST_CASE(conv_correctness)
...
@@ -686,8 +691,8 @@ TEST_CASE(conv_correctness)
auto
input
=
migraphx
::
argument
(
si
,
iv
.
data
());
auto
input
=
migraphx
::
argument
(
si
,
iv
.
data
());
std
::
vector
<
float
>
wv
(
sw
.
elements
(),
10
);
std
::
vector
<
float
>
wv
(
sw
.
elements
(),
10
);
auto
weights
=
migraphx
::
argument
(
sw
,
wv
.
data
());
auto
weights
=
migraphx
::
argument
(
sw
,
wv
.
data
());
p1
.
compile
(
migraphx
::
target
(
migraphx
::
ref
::
target
{}
));
p1
.
compile
(
migraphx
::
target
(
migraphx
::
make_
target
(
"ref"
)
));
p2
.
compile
(
migraphx
::
target
(
migraphx
::
ref
::
target
{}
));
p2
.
compile
(
migraphx
::
target
(
migraphx
::
make_
target
(
"ref"
)
));
auto
result1
=
p1
.
eval
({{
"input"
,
input
},
{
"weights"
,
weights
}}).
back
();
auto
result1
=
p1
.
eval
({{
"input"
,
input
},
{
"weights"
,
weights
}}).
back
();
std
::
vector
<
float
>
rv1
(
16
);
std
::
vector
<
float
>
rv1
(
16
);
...
@@ -736,8 +741,8 @@ TEST_CASE(dot_correctness)
...
@@ -736,8 +741,8 @@ TEST_CASE(dot_correctness)
auto
a
=
migraphx
::
argument
(
sh1
,
av
.
data
());
auto
a
=
migraphx
::
argument
(
sh1
,
av
.
data
());
std
::
vector
<
float
>
bv
(
sh2
.
elements
(),
10
);
std
::
vector
<
float
>
bv
(
sh2
.
elements
(),
10
);
auto
b
=
migraphx
::
argument
(
sh2
,
bv
.
data
());
auto
b
=
migraphx
::
argument
(
sh2
,
bv
.
data
());
p1
.
compile
(
migraphx
::
target
(
migraphx
::
ref
::
target
{}
));
p1
.
compile
(
migraphx
::
target
(
migraphx
::
make_
target
(
"ref"
)
));
p2
.
compile
(
migraphx
::
target
(
migraphx
::
ref
::
target
{}
));
p2
.
compile
(
migraphx
::
target
(
migraphx
::
make_
target
(
"ref"
)
));
auto
result1
=
p1
.
eval
({{
"a"
,
a
},
{
"b"
,
b
}}).
back
();
auto
result1
=
p1
.
eval
({{
"a"
,
a
},
{
"b"
,
b
}}).
back
();
std
::
vector
<
float
>
rv1
(
sh3
.
elements
());
std
::
vector
<
float
>
rv1
(
sh3
.
elements
());
...
...
test/simplify_reshapes_test.cpp
View file @
2fc6b715
...
@@ -1322,6 +1322,46 @@ TEST_CASE(transpose_slice)
...
@@ -1322,6 +1322,46 @@ TEST_CASE(transpose_slice)
EXPECT
(
m1
==
m2
);
EXPECT
(
m1
==
m2
);
}
}
TEST_CASE
(
transpose_slice_unsqueeze
)
{
migraphx
::
module
m1
;
{
auto
x
=
m1
.
add_parameter
(
"x"
,
{
migraphx
::
shape
::
float_type
,
{
4
,
1024
,
96
,
64
}});
auto
transpose1
=
m1
.
add_instruction
(
migraphx
::
make_op
(
"transpose"
,
{{
"permutation"
,
{
0
,
2
,
3
,
1
}}}),
x
);
auto
slice1
=
m1
.
add_instruction
(
migraphx
::
make_op
(
"slice"
,
{{
"axes"
,
{
1
}},
{
"starts"
,
{
0
}},
{
"ends"
,
{
8
}}}),
transpose1
);
auto
slice2
=
m1
.
add_instruction
(
migraphx
::
make_op
(
"slice"
,
{{
"axes"
,
{
1
}},
{
"starts"
,
{
16
}},
{
"ends"
,
{
24
}}}),
transpose1
);
auto
slice3
=
m1
.
add_instruction
(
migraphx
::
make_op
(
"slice"
,
{{
"axes"
,
{
1
}},
{
"starts"
,
{
32
}},
{
"ends"
,
{
40
}}}),
transpose1
);
m1
.
add_return
({
slice1
,
slice2
,
slice3
});
}
run_pass
(
m1
);
migraphx
::
module
m2
;
{
auto
x
=
m2
.
add_parameter
(
"x"
,
{
migraphx
::
shape
::
float_type
,
{
4
,
1024
,
96
,
64
}});
auto
unsq
=
m2
.
add_instruction
(
migraphx
::
make_op
(
"unsqueeze"
,
{{
"axes"
,
{
2
}},
{
"steps"
,
{
12
}}}),
x
);
auto
transpose
=
m2
.
add_instruction
(
migraphx
::
make_op
(
"transpose"
,
{{
"permutation"
,
{
2
,
0
,
3
,
4
,
1
}}}),
unsq
);
auto
slice1
=
m2
.
add_instruction
(
migraphx
::
make_op
(
"slice"
,
{{
"axes"
,
{
0
}},
{
"starts"
,
{
0
}},
{
"ends"
,
{
1
}}}),
transpose
);
auto
sq1
=
m2
.
add_instruction
(
migraphx
::
make_op
(
"squeeze"
,
{{
"axes"
,
{
0
}}}),
slice1
);
auto
slice2
=
m2
.
add_instruction
(
migraphx
::
make_op
(
"slice"
,
{{
"axes"
,
{
0
}},
{
"starts"
,
{
2
}},
{
"ends"
,
{
3
}}}),
transpose
);
auto
sq2
=
m2
.
add_instruction
(
migraphx
::
make_op
(
"squeeze"
,
{{
"axes"
,
{
0
}}}),
slice2
);
auto
slice3
=
m2
.
add_instruction
(
migraphx
::
make_op
(
"slice"
,
{{
"axes"
,
{
0
}},
{
"starts"
,
{
4
}},
{
"ends"
,
{
5
}}}),
transpose
);
auto
sq3
=
m2
.
add_instruction
(
migraphx
::
make_op
(
"squeeze"
,
{{
"axes"
,
{
0
}}}),
slice3
);
m2
.
add_return
({
sq1
,
sq2
,
sq3
});
}
EXPECT
(
m1
==
m2
);
}
TEST_CASE
(
transpose_slice_diff_perm
)
TEST_CASE
(
transpose_slice_diff_perm
)
{
{
migraphx
::
module
m1
;
migraphx
::
module
m1
;
...
...
test/split_single_dyn_dim_test.cpp
0 → 100644
View file @
2fc6b715
/*
* The MIT License (MIT)
*
* Copyright (c) 2015-2023 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.
*/
#include <migraphx/split_single_dyn_dim.hpp>
#include <migraphx/program.hpp>
#include <migraphx/dead_code_elimination.hpp>
#include <migraphx/pass_manager.hpp>
#include <migraphx/make_op.hpp>
#include <migraphx/serialize.hpp>
#include <test.hpp>
void
run_pass
(
migraphx
::
program
&
p
)
{
migraphx
::
run_passes
(
p
,
{
migraphx
::
split_single_dyn_dim
{},
migraphx
::
dead_code_elimination
{}});
}
TEST_CASE
(
dynamic_batch
)
{
// Slightly different from ref_ops_test in that the literal is copied over the submodules.
// A different compiler pass will pull the literals from the submodules to the main module.
migraphx
::
program
p0
;
{
auto
*
mm0
=
p0
.
get_main_module
();
// create batch submodules
auto
create_submodule
=
[
&
](
std
::
size_t
batch_size
,
const
std
::
string
&
module_name
)
{
auto
*
submod
=
p0
.
create_module
(
module_name
);
migraphx
::
shape
sm_shape
{
migraphx
::
shape
::
float_type
,
{
batch_size
,
4
}};
auto
sm_input
=
submod
->
add_parameter
(
"data"
,
sm_shape
);
migraphx
::
shape
lit_s
{
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
}}};
auto
literal_ins
=
submod
->
add_literal
(
migraphx
::
literal
{
lit_s
,
{
6
}});
auto
broadcast_lit
=
submod
->
add_instruction
(
migraphx
::
make_op
(
"multibroadcast"
),
literal_ins
,
sm_input
);
auto
add_ins
=
submod
->
add_instruction
(
migraphx
::
make_op
(
"add"
),
sm_input
,
broadcast_lit
);
submod
->
add_return
({
add_ins
});
return
submod
;
};
auto
*
dim1
=
create_submodule
(
1
,
"dim_1"
);
auto
*
dim2
=
create_submodule
(
2
,
"dim_2"
);
auto
*
dim3
=
create_submodule
(
3
,
"dim_3"
);
auto
*
dim4
=
create_submodule
(
4
,
"dim_4"
);
migraphx
::
shape
s
{
migraphx
::
shape
::
float_type
,
{{
1
,
4
},
{
4
,
4
}}};
auto
input0
=
mm0
->
add_parameter
(
"data"
,
s
);
std
::
vector
<
migraphx
::
shape
>
sub_shapes
=
{};
sub_shapes
.
push_back
(
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{{
1
,
4
},
{
4
,
4
}}});
migraphx
::
shape
out_attr
=
migraphx
::
shape
{
sub_shapes
};
auto
sm_ins
=
mm0
->
add_instruction
(
migraphx
::
make_op
(
"select_module"
,
{{
"output_dyn_shapes"
,
migraphx
::
to_value
(
out_attr
)}}),
{
input0
},
{
dim1
,
dim2
,
dim3
,
dim4
});
auto
ret
=
mm0
->
add_instruction
(
migraphx
::
make_op
(
"get_tuple_elem"
,
{{
"index"
,
0
}}),
sm_ins
);
mm0
->
add_return
({
ret
});
}
migraphx
::
program
p1
;
{
auto
*
mm1
=
p1
.
get_main_module
();
migraphx
::
shape
s
{
migraphx
::
shape
::
float_type
,
{{
1
,
4
},
{
4
,
4
}}};
auto
input1
=
mm1
->
add_parameter
(
"data"
,
s
);
migraphx
::
shape
lit_s
{
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
}}};
auto
literal_ins
=
mm1
->
add_literal
(
migraphx
::
literal
{
lit_s
,
{
6
}});
auto
broadcast_lit
=
mm1
->
add_instruction
(
migraphx
::
make_op
(
"multibroadcast"
),
literal_ins
,
input1
);
auto
add_ins
=
mm1
->
add_instruction
(
migraphx
::
make_op
(
"add"
),
input1
,
broadcast_lit
);
mm1
->
add_return
({
add_ins
});
}
run_pass
(
p1
);
EXPECT
(
p0
==
p1
);
}
TEST_CASE
(
multiple_outputs
)
{
migraphx
::
program
p0
;
{
auto
*
mm0
=
p0
.
get_main_module
();
// create batch submodules
auto
create_submodule
=
[
&
](
std
::
size_t
batch_size
,
const
std
::
string
&
module_name
)
{
auto
*
submod
=
p0
.
create_module
(
module_name
);
migraphx
::
shape
sm_shape
{
migraphx
::
shape
::
float_type
,
{
batch_size
,
4
}};
auto
sm_input
=
submod
->
add_parameter
(
"data"
,
sm_shape
);
migraphx
::
shape
lit_s
{
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
}}};
auto
literal_ins
=
submod
->
add_literal
(
migraphx
::
literal
{
lit_s
,
{
6
}});
auto
broadcast_lit
=
submod
->
add_instruction
(
migraphx
::
make_op
(
"multibroadcast"
),
literal_ins
,
sm_input
);
auto
add0_ins
=
submod
->
add_instruction
(
migraphx
::
make_op
(
"add"
),
sm_input
,
broadcast_lit
);
auto
add1_ins
=
submod
->
add_instruction
(
migraphx
::
make_op
(
"add"
),
sm_input
,
sm_input
);
submod
->
add_return
({
add0_ins
,
add1_ins
});
return
submod
;
};
auto
*
dim1
=
create_submodule
(
1
,
"dim_1"
);
auto
*
dim2
=
create_submodule
(
2
,
"dim_2"
);
auto
*
dim3
=
create_submodule
(
3
,
"dim_3"
);
auto
*
dim4
=
create_submodule
(
4
,
"dim_4"
);
migraphx
::
shape
s
{
migraphx
::
shape
::
float_type
,
{{
1
,
4
},
{
4
,
4
}}};
auto
input0
=
mm0
->
add_parameter
(
"data"
,
s
);
std
::
vector
<
migraphx
::
shape
>
sub_shapes
=
{};
migraphx
::
shape
tmp_s
{
migraphx
::
shape
::
float_type
,
{{
1
,
4
},
{
4
,
4
}}};
sub_shapes
.
push_back
(
tmp_s
);
sub_shapes
.
push_back
(
tmp_s
);
migraphx
::
shape
out_attr
=
migraphx
::
shape
{
sub_shapes
};
auto
sm_ins
=
mm0
->
add_instruction
(
migraphx
::
make_op
(
"select_module"
,
{{
"output_dyn_shapes"
,
migraphx
::
to_value
(
out_attr
)}}),
{
input0
},
{
dim1
,
dim2
,
dim3
,
dim4
});
auto
ret0
=
mm0
->
add_instruction
(
migraphx
::
make_op
(
"get_tuple_elem"
,
{{
"index"
,
0
}}),
sm_ins
);
auto
ret1
=
mm0
->
add_instruction
(
migraphx
::
make_op
(
"get_tuple_elem"
,
{{
"index"
,
1
}}),
sm_ins
);
mm0
->
add_return
({
ret0
,
ret1
});
}
migraphx
::
program
p1
;
{
auto
*
mm1
=
p1
.
get_main_module
();
migraphx
::
shape
s
{
migraphx
::
shape
::
float_type
,
{{
1
,
4
},
{
4
,
4
}}};
auto
input1
=
mm1
->
add_parameter
(
"data"
,
s
);
migraphx
::
shape
lit_s
{
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
}}};
auto
literal_ins
=
mm1
->
add_literal
(
migraphx
::
literal
{
lit_s
,
{
6
}});
auto
broadcast_lit
=
mm1
->
add_instruction
(
migraphx
::
make_op
(
"multibroadcast"
),
literal_ins
,
input1
);
auto
add0_ins
=
mm1
->
add_instruction
(
migraphx
::
make_op
(
"add"
),
input1
,
broadcast_lit
);
auto
add1_ins
=
mm1
->
add_instruction
(
migraphx
::
make_op
(
"add"
),
input1
,
input1
);
mm1
->
add_return
({
add0_ins
,
add1_ins
});
}
run_pass
(
p1
);
EXPECT
(
p0
==
p1
);
}
int
main
(
int
argc
,
const
char
*
argv
[])
{
test
::
run
(
argc
,
argv
);
}
test/targets.cpp
View file @
2fc6b715
...
@@ -22,7 +22,6 @@
...
@@ -22,7 +22,6 @@
* THE SOFTWARE.
* THE SOFTWARE.
*/
*/
#include <migraphx/register_target.hpp>
#include <migraphx/register_target.hpp>
#include <migraphx/ref/target.hpp>
#include <migraphx/target.hpp>
#include <migraphx/target.hpp>
#include "test.hpp"
#include "test.hpp"
...
@@ -43,7 +42,10 @@ TEST_CASE(make_invalid_target)
...
@@ -43,7 +42,10 @@ TEST_CASE(make_invalid_target)
TEST_CASE
(
targets
)
TEST_CASE
(
targets
)
{
{
auto
ts
=
migraphx
::
get_targets
();
auto
ts
=
migraphx
::
get_targets
();
EXPECT
(
ts
.
size
()
>
0
);
EXPECT
(
ts
.
size
()
==
0
);
auto
ref_t
=
migraphx
::
make_target
(
"ref"
);
ts
=
migraphx
::
get_targets
();
EXPECT
(
ts
.
size
()
==
1
);
}
}
int
main
(
int
argc
,
const
char
*
argv
[])
{
test
::
run
(
argc
,
argv
);
}
int
main
(
int
argc
,
const
char
*
argv
[])
{
test
::
run
(
argc
,
argv
);
}
test/verify/main.cpp
View file @
2fc6b715
...
@@ -67,7 +67,14 @@ int main(int argc, const char* argv[])
...
@@ -67,7 +67,14 @@ int main(int argc, const char* argv[])
{
{
run_verify
rv
;
run_verify
rv
;
rv
.
add_validation_for
(
"gpu"
,
&
validate_gpu
);
rv
.
add_validation_for
(
"gpu"
,
&
validate_gpu
);
rv
.
disable_test_for
(
"cpu"
,
{
"test_if_lp"
,
"test_if_param"
,
"test_if_literal"
});
rv
.
disable_test_for
(
"cpu"
,
{
"test_if_lp"
,
"test_if_param"
,
"test_if_literal"
,
"test_select_module_add"
,
"test_select_module_reduce"
,
"test_select_module_conv"
,
"test_split_single_dyn_dim"
});
rv
.
disable_test_for
(
"gpu"
,
{
"test_conv_bn_add"
});
rv
.
disable_test_for
(
"gpu"
,
{
"test_conv_bn_add"
});
rv
.
run
(
argc
,
argv
);
rv
.
run
(
argc
,
argv
);
}
}
test/verify/run_verify.cpp
View file @
2fc6b715
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
#include "verify_program.hpp"
#include "verify_program.hpp"
#include "test.hpp"
#include "test.hpp"
#include <migraphx/env.hpp>
#include <migraphx/env.hpp>
#include <migraphx/re
f/
target.hpp>
#include <migraphx/re
gister_
target.hpp>
#include <migraphx/ranges.hpp>
#include <migraphx/ranges.hpp>
#include <migraphx/generate.hpp>
#include <migraphx/generate.hpp>
#include <migraphx/load_save.hpp>
#include <migraphx/load_save.hpp>
...
@@ -67,15 +67,17 @@ inline void verify_load_save(const migraphx::program& p)
...
@@ -67,15 +67,17 @@ inline void verify_load_save(const migraphx::program& p)
EXPECT
(
p
==
loaded
);
EXPECT
(
p
==
loaded
);
}
}
inline
void
compile_check
(
migraphx
::
program
&
p
,
const
migraphx
::
target
&
t
,
bool
show_trace
=
false
)
inline
void
compile_check
(
migraphx
::
program
&
p
,
const
migraphx
::
target
&
t
,
migraphx
::
compile_options
c_opts
,
bool
show_trace
=
false
)
{
{
auto
name
=
t
.
name
();
auto
name
=
t
.
name
();
auto
shapes
=
p
.
get_output_shapes
();
auto
shapes
=
p
.
get_output_shapes
();
std
::
stringstream
ss
;
std
::
stringstream
ss
;
migraphx
::
compile_options
options
;
if
(
show_trace
)
if
(
show_trace
)
opt
ion
s
.
trace
=
migraphx
::
tracer
{
std
::
cout
};
c_
opts
.
trace
=
migraphx
::
tracer
{
std
::
cout
};
p
.
compile
(
t
,
opt
ion
s
);
p
.
compile
(
t
,
c_
opts
);
if
(
shapes
.
size
()
!=
p
.
get_output_shapes
().
size
())
if
(
shapes
.
size
()
!=
p
.
get_output_shapes
().
size
())
{
{
std
::
cout
<<
ss
.
str
()
<<
std
::
endl
;
std
::
cout
<<
ss
.
str
()
<<
std
::
endl
;
...
@@ -115,19 +117,23 @@ void run_verify::validate(const migraphx::target& t,
...
@@ -115,19 +117,23 @@ void run_verify::validate(const migraphx::target& t,
}
}
std
::
vector
<
migraphx
::
argument
>
run_verify
::
run_ref
(
migraphx
::
program
p
,
std
::
vector
<
migraphx
::
argument
>
run_verify
::
run_ref
(
migraphx
::
program
p
,
migraphx
::
parameter_map
inputs
)
const
migraphx
::
parameter_map
inputs
,
const
migraphx
::
compile_options
&
c_opts
)
const
{
{
migraphx
::
ref
::
target
t
{}
;
migraphx
::
target
t
=
migraphx
::
make_target
(
"ref"
)
;
auto_print
pp
{
p
,
t
.
name
()};
auto_print
pp
{
p
,
t
.
name
()};
compile_check
(
p
,
t
);
compile_check
(
p
,
t
,
c_opts
);
return
p
.
eval
(
std
::
move
(
inputs
));
return
p
.
eval
(
std
::
move
(
inputs
));
}
}
std
::
pair
<
migraphx
::
program
,
std
::
vector
<
migraphx
::
argument
>>
run_verify
::
run_target
(
std
::
pair
<
migraphx
::
program
,
std
::
vector
<
migraphx
::
argument
>>
const
migraphx
::
target
&
t
,
migraphx
::
program
p
,
const
migraphx
::
parameter_map
&
inputs
)
const
run_verify
::
run_target
(
const
migraphx
::
target
&
t
,
migraphx
::
program
p
,
const
migraphx
::
parameter_map
&
inputs
,
const
migraphx
::
compile_options
&
c_opts
)
const
{
{
auto_print
pp
{
p
,
t
.
name
()};
auto_print
pp
{
p
,
t
.
name
()};
auto
trace_target
=
migraphx
::
string_value_of
(
MIGRAPHX_TRACE_TEST_COMPILE
{});
auto
trace_target
=
migraphx
::
string_value_of
(
MIGRAPHX_TRACE_TEST_COMPILE
{});
compile_check
(
p
,
t
,
(
trace_target
==
t
.
name
()));
compile_check
(
p
,
t
,
c_opts
,
(
trace_target
==
t
.
name
()));
migraphx
::
parameter_map
m
;
migraphx
::
parameter_map
m
;
for
(
auto
&&
input
:
inputs
)
for
(
auto
&&
input
:
inputs
)
{
{
...
@@ -157,7 +163,9 @@ auto get_hash(const T& x)
...
@@ -157,7 +163,9 @@ auto get_hash(const T& x)
return
std
::
hash
<
T
>
{}(
x
);
return
std
::
hash
<
T
>
{}(
x
);
}
}
void
run_verify
::
verify
(
const
std
::
string
&
name
,
const
migraphx
::
program
&
p
)
const
void
run_verify
::
verify
(
const
std
::
string
&
name
,
const
migraphx
::
program
&
p
,
const
migraphx
::
compile_options
&
c_opts
)
const
{
{
using
result_future
=
using
result_future
=
std
::
future
<
std
::
pair
<
migraphx
::
program
,
std
::
vector
<
migraphx
::
argument
>>>
;
std
::
future
<
std
::
pair
<
migraphx
::
program
,
std
::
vector
<
migraphx
::
argument
>>>
;
...
@@ -197,13 +205,13 @@ void run_verify::verify(const std::string& name, const migraphx::program& p) con
...
@@ -197,13 +205,13 @@ void run_verify::verify(const std::string& name, const migraphx::program& p) con
}
}
}
}
auto
gold_f
=
detach_async
([
=
]
{
return
run_ref
(
p
,
m
);
});
auto
gold_f
=
detach_async
([
=
]
{
return
run_ref
(
p
,
m
,
c_opts
);
});
for
(
const
auto
&
tname
:
target_names
)
for
(
const
auto
&
tname
:
target_names
)
{
{
target_info
ti
=
get_target_info
(
tname
);
target_info
ti
=
get_target_info
(
tname
);
auto
t
=
migraphx
::
make_target
(
tname
);
auto
t
=
migraphx
::
make_target
(
tname
);
results
.
emplace_back
(
tname
,
results
.
emplace_back
(
detach_async
([
=
]
{
return
run_target
(
t
,
p
,
m
);
},
ti
.
parallel
));
tname
,
detach_async
([
=
]
{
return
run_target
(
t
,
p
,
m
,
c_opts
);
},
ti
.
parallel
));
}
}
assert
(
gold_f
.
valid
());
assert
(
gold_f
.
valid
());
...
@@ -244,7 +252,7 @@ void run_verify::run(int argc, const char* argv[]) const
...
@@ -244,7 +252,7 @@ void run_verify::run(int argc, const char* argv[]) const
for
(
auto
&&
p
:
get_programs
())
for
(
auto
&&
p
:
get_programs
())
{
{
labels
[
p
.
section
].
push_back
(
p
.
name
);
labels
[
p
.
section
].
push_back
(
p
.
name
);
test
::
add_test_case
(
p
.
name
,
[
=
]
{
verify
(
p
.
name
,
p
.
get_program
());
});
test
::
add_test_case
(
p
.
name
,
[
=
]
{
verify
(
p
.
name
,
p
.
get_program
()
,
p
.
compile_options
);
});
}
}
test
::
driver
d
{};
test
::
driver
d
{};
d
.
get_case_names
=
[
&
](
const
std
::
string
&
name
)
->
std
::
vector
<
std
::
string
>
{
d
.
get_case_names
=
[
&
](
const
std
::
string
&
name
)
->
std
::
vector
<
std
::
string
>
{
...
...
test/verify/run_verify.hpp
View file @
2fc6b715
...
@@ -40,15 +40,19 @@ struct target_info
...
@@ -40,15 +40,19 @@ struct target_info
struct
run_verify
struct
run_verify
{
{
std
::
vector
<
migraphx
::
argument
>
run_ref
(
migraphx
::
program
p
,
std
::
vector
<
migraphx
::
argument
>
run_ref
(
migraphx
::
program
p
,
migraphx
::
parameter_map
inputs
)
const
;
migraphx
::
parameter_map
inputs
,
const
migraphx
::
compile_options
&
c_opts
)
const
;
std
::
pair
<
migraphx
::
program
,
std
::
vector
<
migraphx
::
argument
>>
std
::
pair
<
migraphx
::
program
,
std
::
vector
<
migraphx
::
argument
>>
run_target
(
const
migraphx
::
target
&
t
,
run_target
(
const
migraphx
::
target
&
t
,
migraphx
::
program
p
,
migraphx
::
program
p
,
const
migraphx
::
parameter_map
&
inputs
)
const
;
const
migraphx
::
parameter_map
&
inputs
,
const
migraphx
::
compile_options
&
c_opts
)
const
;
void
validate
(
const
migraphx
::
target
&
t
,
void
validate
(
const
migraphx
::
target
&
t
,
const
migraphx
::
program
&
p
,
const
migraphx
::
program
&
p
,
const
migraphx
::
parameter_map
&
m
)
const
;
const
migraphx
::
parameter_map
&
m
)
const
;
void
verify
(
const
std
::
string
&
name
,
const
migraphx
::
program
&
p
)
const
;
void
verify
(
const
std
::
string
&
name
,
const
migraphx
::
program
&
p
,
const
migraphx
::
compile_options
&
c_opts
)
const
;
void
run
(
int
argc
,
const
char
*
argv
[])
const
;
void
run
(
int
argc
,
const
char
*
argv
[])
const
;
target_info
get_target_info
(
const
std
::
string
&
name
)
const
;
target_info
get_target_info
(
const
std
::
string
&
name
)
const
;
...
...
test/verify/test_add_conv_constant.cpp
0 → 100644
View file @
2fc6b715
/*
* 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.
*/
#include "verify_program.hpp"
#include <migraphx/program.hpp>
#include <migraphx/generate.hpp>
#include <migraphx/make_op.hpp>
struct
test_add_conv_constant
:
verify_program
<
test_add_conv_constant
>
{
migraphx
::
program
create_program
()
const
{
migraphx
::
program
p
;
auto
*
mm
=
p
.
get_main_module
();
migraphx
::
shape
s
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
32
,
32
}};
migraphx
::
shape
ws
{
migraphx
::
shape
::
float_type
,
{
4
,
3
,
3
,
3
}};
auto
x
=
mm
->
add_parameter
(
"x"
,
s
);
auto
c
=
mm
->
add_literal
(
migraphx
::
generate_literal
(
s
,
1
));
auto
w
=
mm
->
add_literal
(
migraphx
::
generate_literal
(
ws
,
2
));
auto
sum
=
mm
->
add_instruction
(
migraphx
::
make_op
(
"add"
),
c
,
x
);
mm
->
add_instruction
(
migraphx
::
make_op
(
"convolution"
),
sum
,
w
);
return
p
;
}
};
test/verify/test_concat_axis_2.cpp
View file @
2fc6b715
...
@@ -33,13 +33,12 @@ struct test_concat_axis_2 : verify_program<test_concat_axis_2>
...
@@ -33,13 +33,12 @@ struct test_concat_axis_2 : verify_program<test_concat_axis_2>
{
{
migraphx
::
program
p
;
migraphx
::
program
p
;
auto
*
mm
=
p
.
get_main_module
();
auto
*
mm
=
p
.
get_main_module
();
migraphx
::
shape
s0
{
migraphx
::
shape
::
int32_type
,
{
3
,
2
,
1
}};
migraphx
::
shape
s
{
migraphx
::
shape
::
int32_type
,
{
3
,
2
,
1
}};
migraphx
::
shape
s1
{
migraphx
::
shape
::
int32_type
,
{
3
,
2
,
1
}};
auto
x0
=
mm
->
add_parameter
(
"x0"
,
s
);
migraphx
::
shape
s2
{
migraphx
::
shape
::
int32_type
,
{
3
,
2
,
1
}};
auto
x1
=
mm
->
add_parameter
(
"x1"
,
s
);
auto
l0
=
mm
->
add_parameter
(
"x"
,
s0
);
auto
x2
=
mm
->
add_parameter
(
"x2"
,
s
);
auto
l1
=
mm
->
add_parameter
(
"y"
,
s1
);
auto
x3
=
mm
->
add_parameter
(
"x3"
,
s
);
auto
l2
=
mm
->
add_parameter
(
"z"
,
s2
);
mm
->
add_instruction
(
migraphx
::
make_op
(
"concat"
,
{{
"axis"
,
2
}}),
x0
,
x1
,
x2
,
x3
);
mm
->
add_instruction
(
migraphx
::
make_op
(
"concat"
,
{{
"axis"
,
2
}}),
l0
,
l1
,
l2
);
return
p
;
return
p
;
}
}
};
};
test/verify/test_layernorm.cpp
View file @
2fc6b715
...
@@ -28,8 +28,6 @@
...
@@ -28,8 +28,6 @@
#include <migraphx/generate.hpp>
#include <migraphx/generate.hpp>
#include <migraphx/make_op.hpp>
#include <migraphx/make_op.hpp>
#include <migraphx/op/reduce_mean.hpp>
migraphx
::
instruction_ref
add_layernorm
(
migraphx
::
module
&
m
,
migraphx
::
instruction_ref
add_layernorm
(
migraphx
::
module
&
m
,
migraphx
::
instruction_ref
x
,
migraphx
::
instruction_ref
x
,
std
::
vector
<
size_t
>
dims
,
std
::
vector
<
size_t
>
dims
,
...
@@ -42,14 +40,14 @@ migraphx::instruction_ref add_layernorm(migraphx::module& m,
...
@@ -42,14 +40,14 @@ migraphx::instruction_ref add_layernorm(migraphx::module& m,
auto
epsilon
=
m
.
add_literal
(
migraphx
::
literal
{
migraphx
::
shape
{
mgx_type
},
{
eps
}});
auto
epsilon
=
m
.
add_literal
(
migraphx
::
literal
{
migraphx
::
shape
{
mgx_type
},
{
eps
}});
auto
exponent
=
m
.
add_literal
(
migraphx
::
literal
{
migraphx
::
shape
{
mgx_type
},
{
2.0
f
}});
auto
exponent
=
m
.
add_literal
(
migraphx
::
literal
{
migraphx
::
shape
{
mgx_type
},
{
2.0
f
}});
auto
mean
=
m
.
add_instruction
(
migraphx
::
op
::
reduce_mean
({
2
}),
x
);
auto
mean
=
m
.
add_instruction
(
migraphx
::
make_op
(
"
reduce_mean
"
,
{{
"axes"
,
{
2
}}
}),
x
);
auto
mean_mbcast
=
auto
mean_mbcast
=
m
.
add_instruction
(
migraphx
::
make_op
(
"multibroadcast"
,
{{
"out_lens"
,
dims
}}),
mean
);
m
.
add_instruction
(
migraphx
::
make_op
(
"multibroadcast"
,
{{
"out_lens"
,
dims
}}),
mean
);
auto
sub
=
m
.
add_instruction
(
migraphx
::
make_op
(
"sub"
),
x
,
mean_mbcast
);
auto
sub
=
m
.
add_instruction
(
migraphx
::
make_op
(
"sub"
),
x
,
mean_mbcast
);
auto
exponent_mbcast
=
auto
exponent_mbcast
=
m
.
add_instruction
(
migraphx
::
make_op
(
"multibroadcast"
,
{{
"out_lens"
,
dims
}}),
exponent
);
m
.
add_instruction
(
migraphx
::
make_op
(
"multibroadcast"
,
{{
"out_lens"
,
dims
}}),
exponent
);
auto
pow
=
m
.
add_instruction
(
migraphx
::
make_op
(
"pow"
),
sub
,
exponent_mbcast
);
auto
pow
=
m
.
add_instruction
(
migraphx
::
make_op
(
"pow"
),
sub
,
exponent_mbcast
);
auto
var
=
m
.
add_instruction
(
migraphx
::
op
::
reduce_mean
({
2
}),
pow
);
auto
var
=
m
.
add_instruction
(
migraphx
::
make_op
(
"
reduce_mean
"
,
{{
"axes"
,
{
2
}}
}),
pow
);
auto
epsilon_mbcast
=
m
.
add_instruction
(
auto
epsilon_mbcast
=
m
.
add_instruction
(
migraphx
::
make_op
(
"multibroadcast"
,
{{
"out_lens"
,
{
1
,
dims
.
at
(
1
),
1
}}}),
epsilon
);
migraphx
::
make_op
(
"multibroadcast"
,
{{
"out_lens"
,
{
1
,
dims
.
at
(
1
),
1
}}}),
epsilon
);
auto
add_epsilon
=
m
.
add_instruction
(
migraphx
::
make_op
(
"add"
),
var
,
epsilon_mbcast
);
auto
add_epsilon
=
m
.
add_instruction
(
migraphx
::
make_op
(
"add"
),
var
,
epsilon_mbcast
);
...
@@ -91,6 +89,19 @@ struct test_layernorm2 : verify_program<test_layernorm2>
...
@@ -91,6 +89,19 @@ struct test_layernorm2 : verify_program<test_layernorm2>
}
}
};
};
struct
test_layernorm_large
:
verify_program
<
test_layernorm_large
>
{
migraphx
::
program
create_program
()
const
{
migraphx
::
program
p
;
auto
*
mm
=
p
.
get_main_module
();
std
::
vector
<
size_t
>
dims
=
{
1
,
32
,
262144
};
auto
x
=
mm
->
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
dims
});
add_layernorm
(
*
mm
,
x
,
dims
);
return
p
;
}
};
struct
test_layernorm_fp16
:
verify_program
<
test_layernorm_fp16
>
struct
test_layernorm_fp16
:
verify_program
<
test_layernorm_fp16
>
{
{
migraphx
::
program
create_program
()
const
migraphx
::
program
create_program
()
const
...
...
test/verify/test_quantizelinear_int32.cpp
View file @
2fc6b715
...
@@ -37,10 +37,13 @@ struct test_quantizelinear_int32 : verify_program<test_quantizelinear_int32>
...
@@ -37,10 +37,13 @@ struct test_quantizelinear_int32 : verify_program<test_quantizelinear_int32>
migraphx
::
shape
sx
{
migraphx
::
shape
::
int32_type
,
{
2
,
2
,
2
}};
migraphx
::
shape
sx
{
migraphx
::
shape
::
int32_type
,
{
2
,
2
,
2
}};
migraphx
::
shape
ss
{
migraphx
::
shape
::
float_type
,
{
2
,
2
,
2
}};
migraphx
::
shape
ss
{
migraphx
::
shape
::
float_type
,
{
2
,
2
,
2
}};
migraphx
::
shape
sz
{
migraphx
::
shape
::
int8_type
,
{
2
,
2
,
2
}};
migraphx
::
shape
sz
{
migraphx
::
shape
::
int8_type
,
{
2
,
2
,
2
}};
auto
input1
=
mm
->
add_parameter
(
"x"
,
sx
);
auto
input1
=
mm
->
add_parameter
(
"x"
,
sx
);
auto
input2
=
mm
->
add_parameter
(
"y_scale"
,
ss
);
auto
input2
=
mm
->
add_parameter
(
"y_scale"
,
ss
);
auto
input3
=
mm
->
add_parameter
(
"y_zero_point"
,
sz
);
auto
input3
=
mm
->
add_parameter
(
"y_zero_point"
,
sz
);
auto
r
=
mm
->
add_instruction
(
migraphx
::
make_op
(
"quantizelinear"
),
input1
,
input2
,
input3
);
auto
input1_float
=
mm
->
add_instruction
(
migraphx
::
make_op
(
"convert"
,
{{
"target_type"
,
migraphx
::
shape
::
float_type
}}),
input1
);
auto
r
=
mm
->
add_instruction
(
migraphx
::
make_op
(
"quantizelinear"
),
input1_float
,
input2
,
input3
);
mm
->
add_return
({
r
});
mm
->
add_return
({
r
});
return
p
;
return
p
;
};
};
...
...
test/verify/test_reduce_op_large.cpp
View file @
2fc6b715
...
@@ -77,7 +77,7 @@ struct test_reduce_mean_2 : verify_program<test_reduce_mean_2>
...
@@ -77,7 +77,7 @@ struct test_reduce_mean_2 : verify_program<test_reduce_mean_2>
};
};
};
};
struct
test_large_reduce_mean
:
verify_program
<
test_large_reduce_mean
>
struct
test_large_reduce_mean
1
:
verify_program
<
test_large_reduce_mean
1
>
{
{
migraphx
::
program
create_program
()
const
migraphx
::
program
create_program
()
const
{
{
...
@@ -89,3 +89,16 @@ struct test_large_reduce_mean : verify_program<test_large_reduce_mean>
...
@@ -89,3 +89,16 @@ struct test_large_reduce_mean : verify_program<test_large_reduce_mean>
return
p
;
return
p
;
};
};
};
};
struct
test_large_reduce_mean2
:
verify_program
<
test_large_reduce_mean2
>
{
migraphx
::
program
create_program
()
const
{
migraphx
::
program
p
;
auto
*
mm
=
p
.
get_main_module
();
migraphx
::
shape
s
{
migraphx
::
shape
::
float_type
,
{
1
,
32
,
262144
}};
auto
x
=
mm
->
add_parameter
(
"x"
,
s
);
mm
->
add_instruction
(
migraphx
::
op
::
reduce_mean
{{
2
}},
x
);
return
p
;
};
};
test/verify/test_select_module_add.cpp
View file @
2fc6b715
...
@@ -43,9 +43,11 @@ struct test_select_module_add : verify_program<test_select_module_add>
...
@@ -43,9 +43,11 @@ struct test_select_module_add : verify_program<test_select_module_add>
auto
sm_input
=
submod
->
add_parameter
(
"data"
,
sm_shape
);
auto
sm_input
=
submod
->
add_parameter
(
"data"
,
sm_shape
);
auto
broadcast_lit
=
auto
broadcast_lit
=
submod
->
add_instruction
(
migraphx
::
make_op
(
"multibroadcast"
),
literal_ins
,
sm_input
);
submod
->
add_instruction
(
migraphx
::
make_op
(
"multibroadcast"
),
literal_ins
,
sm_input
);
auto
add_ins
=
auto
add_ins
0
=
submod
->
add_instruction
(
migraphx
::
make_op
(
"add"
),
sm_input
,
broadcast_lit
);
submod
->
add_instruction
(
migraphx
::
make_op
(
"add"
),
sm_input
,
broadcast_lit
);
submod
->
add_return
({
add_ins
});
auto
add_ins1
=
submod
->
add_instruction
(
migraphx
::
make_op
(
"add"
),
add_ins0
,
broadcast_lit
);
submod
->
add_return
({
add_ins0
,
add_ins1
});
return
submod
;
return
submod
;
};
};
auto
*
batch1
=
create_submodule
(
1
,
"batch_1"
);
auto
*
batch1
=
create_submodule
(
1
,
"batch_1"
);
...
@@ -57,14 +59,18 @@ struct test_select_module_add : verify_program<test_select_module_add>
...
@@ -57,14 +59,18 @@ struct test_select_module_add : verify_program<test_select_module_add>
auto
input
=
mm
->
add_parameter
(
"data"
,
s
);
auto
input
=
mm
->
add_parameter
(
"data"
,
s
);
std
::
vector
<
migraphx
::
shape
>
sub_shapes
=
{};
std
::
vector
<
migraphx
::
shape
>
sub_shapes
=
{};
sub_shapes
.
push_back
(
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{{
1
,
4
},
{
4
,
4
}}});
sub_shapes
.
push_back
(
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{{
1
,
4
},
{
4
,
4
}}});
sub_shapes
.
push_back
(
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{{
1
,
4
},
{
4
,
4
}}});
migraphx
::
shape
out_attr
=
migraphx
::
shape
{
sub_shapes
};
migraphx
::
shape
out_attr
=
migraphx
::
shape
{
sub_shapes
};
auto
sm_ins
=
mm
->
add_instruction
(
auto
sm_ins
=
mm
->
add_instruction
(
migraphx
::
make_op
(
"select_module"
,
migraphx
::
make_op
(
"select_module"
,
{{
"output_dyn_shapes"
,
migraphx
::
to_value
(
out_attr
)}}),
{{
"output_dyn_shapes"
,
migraphx
::
to_value
(
out_attr
)}}),
{
input
},
{
input
},
{
batch1
,
batch2
,
batch3
,
batch4
});
{
batch1
,
batch2
,
batch3
,
batch4
});
auto
ret
=
mm
->
add_instruction
(
migraphx
::
make_op
(
"get_tuple_elem"
,
{{
"index"
,
0
}}),
sm_ins
);
auto
ret0
=
mm
->
add_return
({
ret
});
mm
->
add_instruction
(
migraphx
::
make_op
(
"get_tuple_elem"
,
{{
"index"
,
0
}}),
sm_ins
);
auto
ret1
=
mm
->
add_instruction
(
migraphx
::
make_op
(
"get_tuple_elem"
,
{{
"index"
,
1
}}),
sm_ins
);
mm
->
add_return
({
ret0
,
ret1
});
return
p
;
return
p
;
}
}
...
...
test/verify/test_split_single_dyn_dim.cpp
0 → 100644
View file @
2fc6b715
/*
* The MIT License (MIT)
*
* Copyright (c) 2015-2023 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.
*/
#include "verify_program.hpp"
#include <migraphx/pass_manager.hpp>
#include <migraphx/generate.hpp>
#include <migraphx/make_op.hpp>
/**
* Test that the split_single_dyn_dim GPU compiler pass produces the same results as ref.
*/
struct
test_split_single_dyn_dim
:
verify_program
<
test_split_single_dyn_dim
>
{
migraphx
::
program
create_program
()
const
{
migraphx
::
program
p
;
auto
*
mm
=
p
.
get_main_module
();
migraphx
::
shape
lit_s
{
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
}}};
auto
literal_ins
=
mm
->
add_literal
(
migraphx
::
literal
{
lit_s
,
{
6
}});
migraphx
::
shape
s
{
migraphx
::
shape
::
float_type
,
{{
1
,
4
},
{
4
,
4
}}};
auto
input
=
mm
->
add_parameter
(
"data"
,
s
);
auto
broadcast_lit
=
mm
->
add_instruction
(
migraphx
::
make_op
(
"multibroadcast"
),
literal_ins
,
input
);
auto
add_ins
=
mm
->
add_instruction
(
migraphx
::
make_op
(
"add"
),
input
,
broadcast_lit
);
mm
->
add_return
({
add_ins
});
return
p
;
}
migraphx
::
compile_options
get_compile_options
()
const
{
migraphx
::
compile_options
co
;
co
.
split_single_dyn_dim
=
true
;
return
co
;
};
};
test/verify/verify_program.hpp
View file @
2fc6b715
...
@@ -24,15 +24,17 @@
...
@@ -24,15 +24,17 @@
#ifndef MIGRAPHX_GUARD_AUTO_REGISTER_VERIFY_PROGRAM_HPP
#ifndef MIGRAPHX_GUARD_AUTO_REGISTER_VERIFY_PROGRAM_HPP
#define MIGRAPHX_GUARD_AUTO_REGISTER_VERIFY_PROGRAM_HPP
#define MIGRAPHX_GUARD_AUTO_REGISTER_VERIFY_PROGRAM_HPP
#include <functional>
#include <migraphx/auto_register.hpp>
#include <migraphx/auto_register.hpp>
#include <migraphx/program.hpp>
#include <migraphx/program.hpp>
#include <
functional
>
#include <
migraphx/compile_options.hpp
>
struct
program_info
struct
program_info
{
{
std
::
string
name
;
std
::
string
name
;
std
::
string
section
;
std
::
string
section
;
std
::
function
<
migraphx
::
program
()
>
get_program
;
std
::
function
<
migraphx
::
program
()
>
get_program
;
migraphx
::
compile_options
compile_options
;
};
};
void
register_program_info
(
const
program_info
&
pi
);
void
register_program_info
(
const
program_info
&
pi
);
...
@@ -45,9 +47,10 @@ struct register_verify_program_action
...
@@ -45,9 +47,10 @@ struct register_verify_program_action
{
{
T
x
;
T
x
;
program_info
pi
;
program_info
pi
;
pi
.
name
=
migraphx
::
get_type_name
<
T
>
();
pi
.
name
=
migraphx
::
get_type_name
<
T
>
();
pi
.
section
=
x
.
section
();
pi
.
section
=
x
.
section
();
pi
.
get_program
=
[
x
]
{
return
x
.
create_program
();
};
pi
.
get_program
=
[
x
]
{
return
x
.
create_program
();
};
pi
.
compile_options
=
x
.
get_compile_options
();
register_program_info
(
pi
);
register_program_info
(
pi
);
}
}
};
};
...
@@ -59,6 +62,7 @@ template <class T>
...
@@ -59,6 +62,7 @@ template <class T>
struct
verify_program
:
auto_register_verify_program
<
T
>
struct
verify_program
:
auto_register_verify_program
<
T
>
{
{
std
::
string
section
()
const
{
return
"general"
;
};
std
::
string
section
()
const
{
return
"general"
;
};
migraphx
::
compile_options
get_compile_options
()
const
{
return
migraphx
::
compile_options
{};
};
};
};
#endif
#endif
tools/accuracy/accuracy_checker.py
View file @
2fc6b715
...
@@ -63,8 +63,25 @@ def parse_args():
...
@@ -63,8 +63,25 @@ def parse_args():
type
=
str
,
type
=
str
,
action
=
'append'
,
action
=
'append'
,
help
=
'specify input parameter dimension
\
help
=
'specify input parameter dimension
\
with the following format --input
_
dim input_name:dim0,dim1,dim2...'
with the following format --input
-
dim input_name:dim0,dim1,dim2...'
)
)
parser
.
add_argument
(
'--target'
,
type
=
str
,
default
=
'gpu'
,
help
=
'target to compile and run MIGraphX on'
)
parser
.
add_argument
(
'--ort-run'
,
dest
=
"ort_run"
,
action
=
'store_true'
,
default
=
False
,
help
=
'only perform an onnxruntime run'
)
parser
.
add_argument
(
'--ort-logging'
,
dest
=
"ort_logging"
,
action
=
'store_true'
,
default
=
False
,
help
=
'Turn on ort VERBOSE logging via session options'
)
args
=
parser
.
parse_args
()
args
=
parser
.
parse_args
()
return
args
return
args
...
@@ -111,7 +128,7 @@ def get_np_datatype(in_type):
...
@@ -111,7 +128,7 @@ def get_np_datatype(in_type):
'uint16_type'
:
np
.
uint16
,
'uint16_type'
:
np
.
uint16
,
'int8_type'
:
np
.
int8
,
'int8_type'
:
np
.
int8
,
'uint8_type'
:
np
.
uint8
,
'uint8_type'
:
np
.
uint8
,
'bool_type'
:
np
.
bool
_
'bool_type'
:
bool
}
}
return
datatypes
[
in_type
]
return
datatypes
[
in_type
]
...
@@ -159,7 +176,8 @@ def main():
...
@@ -159,7 +176,8 @@ def main():
if
args
.
verbose
:
if
args
.
verbose
:
print
(
model
)
print
(
model
)
model
.
compile
(
migraphx
.
get_target
(
'gpu'
))
if
not
args
.
ort_run
:
model
.
compile
(
migraphx
.
get_target
(
args
.
target
))
params
=
{}
params
=
{}
test_inputs
=
{}
test_inputs
=
{}
...
@@ -178,10 +196,19 @@ def main():
...
@@ -178,10 +196,19 @@ def main():
test_inputs
[
name
]
=
test_input
test_inputs
[
name
]
=
test_input
params
[
name
]
=
migraphx
.
argument
(
test_input
)
params
[
name
]
=
migraphx
.
argument
(
test_input
)
pred_migx
=
np
.
array
(
model
.
run
(
params
)[
-
1
])
if
not
args
.
ort_run
:
pred_migx
=
np
.
array
(
model
.
run
(
params
)[
-
1
])
if
use_onnx
:
if
use_onnx
:
sess
=
ort
.
InferenceSession
(
model_name
,
providers
=
[
args
.
provider
])
sess_op
=
ort
.
SessionOptions
()
if
args
.
ort_logging
:
sess_op
.
log_verbosity_level
=
0
sess_op
.
log_severity_level
=
0
sess
=
ort
.
InferenceSession
(
model_name
,
sess_options
=
sess_op
,
providers
=
[
args
.
provider
])
ort_params
=
{}
ort_params
=
{}
for
input
in
sess
.
get_inputs
():
for
input
in
sess
.
get_inputs
():
...
@@ -239,14 +266,15 @@ def main():
...
@@ -239,14 +266,15 @@ def main():
y_out
=
sess
.
run
(
y
,
feed_dict
=
tf_dict
)
y_out
=
sess
.
run
(
y
,
feed_dict
=
tf_dict
)
pred_fw
=
y_out
pred_fw
=
y_out
is_correct
=
check_correctness
(
pred_fw
,
pred_migx
,
args
.
tolerance
,
if
not
args
.
ort_run
:
args
.
tolerance
,
args
.
verbose
)
is_correct
=
check_correctness
(
pred_fw
,
pred_migx
,
args
.
tolerance
,
verbose_string
=
' Rerun with --verbose for detailed information.'
\
args
.
tolerance
,
args
.
verbose
)
if
not
args
.
verbose
else
''
verbose_string
=
' Rerun with --verbose for detailed information.'
\
if
is_correct
:
if
not
args
.
verbose
else
''
print
(
'PASSED: MIGraphX meets tolerance'
)
if
is_correct
:
else
:
print
(
'PASSED: MIGraphX meets tolerance'
)
print
(
'FAILED: MIGraphX is not within tolerance.'
+
verbose_string
)
else
:
print
(
'FAILED: MIGraphX is not within tolerance.'
+
verbose_string
)
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
...
...
tools/api/api.cpp
View file @
2fc6b715
...
@@ -32,7 +32,6 @@
...
@@ -32,7 +32,6 @@
#include <migraphx/register_target.hpp>
#include <migraphx/register_target.hpp>
#include <migraphx/generate.hpp>
#include <migraphx/generate.hpp>
#include <migraphx/quantization.hpp>
#include <migraphx/quantization.hpp>
#include <migraphx/ref/target.hpp>
#include <migraphx/load_save.hpp>
#include <migraphx/load_save.hpp>
#include <migraphx/make_op.hpp>
#include <migraphx/make_op.hpp>
#include <migraphx/register_op.hpp>
#include <migraphx/register_op.hpp>
...
...
Prev
1
…
5
6
7
8
9
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment