Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
gaoqiong
MIGraphX
Commits
464b7f5b
Commit
464b7f5b
authored
Aug 21, 2019
by
Khalique
Browse files
reorder and rename tests
parent
3ab91a79
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
533 additions
and
533 deletions
+533
-533
test/onnx/onnx_test.cpp
test/onnx/onnx_test.cpp
+533
-533
No files found.
test/onnx/onnx_test.cpp
View file @
464b7f5b
...
...
@@ -7,269 +7,234 @@
#include <migraphx/onnx.hpp>
#include "test.hpp"
TEST_CASE
(
pytorch_conv_bia
s_test
)
TEST_CASE
(
aco
s_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
32
,
32
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
5
,
5
}});
auto
l2
=
p
.
add_parameter
(
"2"
,
{
migraphx
::
shape
::
float_type
,
{
1
}});
uint64_t
axis
=
1
;
auto
l3
=
p
.
add_instruction
(
migraphx
::
op
::
convolution
{},
l0
,
l1
);
auto
l4
=
p
.
add_instruction
(
migraphx
::
op
::
broadcast
{
axis
,
l3
->
get_shape
().
lens
()},
l2
);
p
.
add_instruction
(
migraphx
::
op
::
add
{},
l3
,
l4
);
auto
prog
=
migraphx
::
parse_onnx
(
"conv.onnx"
);
EXPECT
(
p
==
prog
);
}
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
10
}});
p
.
add_instruction
(
migraphx
::
op
::
acos
{},
input
);
TEST_CASE
(
pytorch_conv_relu_maxpool
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
32
,
32
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
5
,
5
}});
auto
l2
=
p
.
add_parameter
(
"2"
,
{
migraphx
::
shape
::
float_type
,
{
1
}});
uint64_t
axis
=
1
;
auto
l3
=
p
.
add_instruction
(
migraphx
::
op
::
convolution
{},
l0
,
l1
);
auto
l4
=
p
.
add_instruction
(
migraphx
::
op
::
broadcast
{
axis
,
l3
->
get_shape
().
lens
()},
l2
);
auto
l5
=
p
.
add_instruction
(
migraphx
::
op
::
add
{},
l3
,
l4
);
auto
l6
=
p
.
add_instruction
(
migraphx
::
op
::
relu
{},
l5
);
p
.
add_instruction
(
migraphx
::
op
::
pooling
{
"max"
,
{{
0
,
0
}},
{{
2
,
2
}},
{{
2
,
2
}}},
l6
);
auto
prog
=
migraphx
::
parse_onnx
(
"acos_test.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"conv_relu_maxpool.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
pytorch_conv_bn_relu_maxpool
)
TEST_CASE
(
add_bcast_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
32
,
32
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
5
,
5
}});
auto
l2
=
p
.
add_parameter
(
"2"
,
{
migraphx
::
shape
::
float_type
,
{
1
}});
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
,
5
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
}});
auto
l2
=
p
.
add_instruction
(
migraphx
::
op
::
broadcast
{
1
,
l0
->
get_shape
().
lens
()},
l1
);
p
.
add_instruction
(
migraphx
::
op
::
add
{},
l0
,
l2
);
auto
p3
=
p
.
add_parameter
(
"3"
,
{
migraphx
::
shape
::
float_type
,
{
1
}});
auto
p4
=
p
.
add_parameter
(
"4"
,
{
migraphx
::
shape
::
float_type
,
{
1
}});
auto
p5
=
p
.
add_parameter
(
"5"
,
{
migraphx
::
shape
::
float_type
,
{
1
}});
auto
p6
=
p
.
add_parameter
(
"6"
,
{
migraphx
::
shape
::
float_type
,
{
1
}});
uint64_t
axis
=
1
;
auto
l3
=
p
.
add_instruction
(
migraphx
::
op
::
convolution
{},
l0
,
l1
);
auto
l4
=
p
.
add_instruction
(
migraphx
::
op
::
broadcast
{
axis
,
l3
->
get_shape
().
lens
()},
l2
);
auto
l5
=
p
.
add_instruction
(
migraphx
::
op
::
add
{},
l3
,
l4
);
auto
l6
=
p
.
add_instruction
(
migraphx
::
op
::
batch_norm_inference
{
1.0e-5
f
},
l5
,
p3
,
p4
,
p5
,
p6
);
auto
l7
=
p
.
add_instruction
(
migraphx
::
op
::
relu
{},
l6
);
p
.
add_instruction
(
migraphx
::
op
::
pooling
{
"max"
,
{{
0
,
0
}},
{{
2
,
2
}},
{{
2
,
2
}}},
l7
);
auto
prog
=
migraphx
::
parse_onnx
(
"add_bcast_test.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"conv_bn_relu_maxpool.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
pytorch_conv_relu_maxpool_x2
)
TEST_CASE
(
add_fp16_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
32
,
32
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
{
migraphx
::
shape
::
float_type
,
{
5
,
3
,
5
,
5
}});
auto
l2
=
p
.
add_parameter
(
"2"
,
{
migraphx
::
shape
::
float_type
,
{
5
}});
uint64_t
axis
=
1
;
auto
l3
=
p
.
add_instruction
(
migraphx
::
op
::
convolution
{},
l0
,
l1
);
auto
l4
=
p
.
add_instruction
(
migraphx
::
op
::
broadcast
{
axis
,
l3
->
get_shape
().
lens
()},
l2
);
auto
l5
=
p
.
add_instruction
(
migraphx
::
op
::
add
{},
l3
,
l4
);
auto
l6
=
p
.
add_instruction
(
migraphx
::
op
::
relu
{},
l5
);
auto
l7
=
p
.
add_instruction
(
migraphx
::
op
::
pooling
{
"max"
,
{{
0
,
0
}},
{{
2
,
2
}},
{{
2
,
2
}}},
l6
);
auto
l8
=
p
.
add_parameter
(
"3"
,
{
migraphx
::
shape
::
float_type
,
{
1
,
5
,
5
,
5
}});
auto
l9
=
p
.
add_parameter
(
"4"
,
{
migraphx
::
shape
::
float_type
,
{
1
}});
auto
l10
=
p
.
add_instruction
(
migraphx
::
op
::
convolution
{},
l7
,
l8
);
auto
l11
=
p
.
add_instruction
(
migraphx
::
op
::
broadcast
{
axis
,
l10
->
get_shape
().
lens
()},
l9
);
auto
l12
=
p
.
add_instruction
(
migraphx
::
op
::
add
{},
l10
,
l11
);
auto
l13
=
p
.
add_instruction
(
migraphx
::
op
::
relu
{},
l12
);
p
.
add_instruction
(
migraphx
::
op
::
pooling
{
"max"
,
{{
0
,
0
}},
{{
2
,
2
}},
{{
2
,
2
}}},
l13
);
auto
prog
=
migraphx
::
parse_onnx
(
"conv_relu_maxpoolX2.onnx"
);
auto
l0
=
p
.
add_literal
(
migraphx
::
literal
{
migraphx
::
shape
{
migraphx
::
shape
::
half_type
,
{
1
}},
{
1.5
}});
auto
l1
=
p
.
add_literal
(
migraphx
::
literal
{
migraphx
::
shape
{
migraphx
::
shape
::
half_type
,
{
1
}},
{
2.5
}});
p
.
add_instruction
(
migraphx
::
op
::
add
{},
l0
,
l1
);
auto
prog
=
migraphx
::
parse_onnx
(
"add_fp16_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
leaky_relu
_test
)
TEST_CASE
(
add_scalar
_test
)
{
migraphx
::
program
p
;
float
alpha
=
0.01
f
;
auto
l0
=
p
.
add_parameter
(
"0"
,
{
migraphx
::
shape
::
float_type
,
{
3
}});
p
.
add_instruction
(
migraphx
::
op
::
leaky_relu
{
alpha
},
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"leaky_relu.onnx"
);
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
,
5
}});
auto
l1
=
p
.
add_literal
(
migraphx
::
literal
{
migraphx
::
shape
{
migraphx
::
shape
::
float_type
},
{
1
}});
auto
m0
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
2
,
3
,
4
,
5
}},
l0
);
auto
m1
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
2
,
3
,
4
,
5
}},
l1
);
p
.
add_instruction
(
migraphx
::
op
::
add
{},
m0
,
m1
);
auto
prog
=
migraphx
::
parse_onnx
(
"add_scalar_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
imagescaler_test
)
TEST_CASE
(
argmax
)
{
migraphx
::
program
p
;
migraphx
::
shape
s
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
16
,
16
}};
auto
l0
=
p
.
add_parameter
(
"0"
,
s
);
auto
scale_val
=
p
.
add_literal
(
0.5
f
);
auto
bias_vals
=
p
.
add_literal
(
migraphx
::
literal
{
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}},
{
0.01
,
0.02
,
0.03
}});
auto
scaled_tensor
=
p
.
add_instruction
(
migraphx
::
op
::
scalar
{
s
.
lens
()},
scale_val
);
auto
img_scaled
=
p
.
add_instruction
(
migraphx
::
op
::
mul
{},
l0
,
scaled_tensor
);
auto
bias_bcast
=
p
.
add_instruction
(
migraphx
::
op
::
broadcast
{
1
,
s
.
lens
()},
bias_vals
);
p
.
add_instruction
(
migraphx
::
op
::
add
{},
img_scaled
,
bias_bcast
);
auto
prog
=
migraphx
::
parse_onnx
(
"imagescaler_test.onnx"
);
auto
l0
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
5
,
6
}});
auto
ins
=
p
.
add_instruction
(
migraphx
::
op
::
argmax
{
2
},
l0
);
p
.
add_instruction
(
migraphx
::
op
::
squeeze
{{
2
}},
ins
);
auto
prog
=
migraphx
::
parse_onnx
(
"argmax_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
globalavgpool_test
)
TEST_CASE
(
argmin
)
{
migraphx
::
program
p
;
auto
input
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
16
,
16
}});
auto
op
=
migraphx
::
op
::
pooling
{
"average"
};
auto
lens
=
input
->
get_shape
().
lens
();
op
.
lengths
=
{
lens
[
2
],
lens
[
3
]};
p
.
add_instruction
(
op
,
input
);
auto
prog
=
migraphx
::
parse_onnx
(
"globalavgpool_test.onnx"
);
auto
l0
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
5
,
6
}});
auto
ins
=
p
.
add_instruction
(
migraphx
::
op
::
argmin
{
3
},
l0
);
p
.
add_instruction
(
migraphx
::
op
::
squeeze
{{
3
}},
ins
);
auto
prog
=
migraphx
::
parse_onnx
(
"argmin_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
globalmaxpool
_test
)
TEST_CASE
(
asin
_test
)
{
migraphx
::
program
p
;
auto
input
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
16
,
16
}});
auto
op
=
migraphx
::
op
::
pooling
{
"max"
};
auto
lens
=
input
->
get_shape
().
lens
();
op
.
lengths
=
{
lens
[
2
],
lens
[
3
]};
p
.
add_instruction
(
op
,
input
);
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
10
}});
p
.
add_instruction
(
migraphx
::
op
::
asin
{},
input
);
auto
prog
=
migraphx
::
parse_onnx
(
"
globalmaxpool
_test.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"
asin
_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
transpose
_test
)
TEST_CASE
(
atan
_test
)
{
migraphx
::
program
p
;
auto
input
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
2
,
2
,
3
}});
std
::
vector
<
int64_t
>
perm
{
0
,
3
,
1
,
2
};
p
.
add_instruction
(
migraphx
::
op
::
transpose
{
perm
},
input
);
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
10
}});
p
.
add_instruction
(
migraphx
::
op
::
atan
{},
input
);
auto
prog
=
migraphx
::
parse_onnx
(
"
transpose
_test.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"
atan
_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
dropou
t_test
)
TEST_CASE
(
cas
t_test
)
{
migraphx
::
program
p
;
auto
input
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
2
,
2
}});
p
.
add_instruction
(
migraphx
::
op
::
identity
{},
input
);
auto
prog
=
migraphx
::
parse_onnx
(
"dropout_test.onnx"
);
auto
l
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
half_type
,
{
10
}});
p
.
add_instruction
(
migraphx
::
op
::
convert
{
migraphx
::
shape
::
float_type
},
l
);
auto
prog
=
migraphx
::
parse_onnx
(
"cast_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
sum
_test
)
TEST_CASE
(
clip
_test
)
{
migraphx
::
program
p
;
auto
input0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}});
auto
input1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}});
auto
input2
=
p
.
add_parameter
(
"2"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}});
auto
l0
=
p
.
add_instruction
(
migraphx
::
op
::
add
{},
input0
,
input1
);
p
.
add_instruction
(
migraphx
::
op
::
add
{},
l0
,
input2
);
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}});
p
.
add_instruction
(
migraphx
::
op
::
clip
{
6.0
,
0.0
},
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"clip_test.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"sum_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
exp
_test
)
TEST_CASE
(
concat
_test
)
{
migraphx
::
program
p
;
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
10
}});
p
.
add_instruction
(
migraphx
::
op
::
exp
{},
input
);
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
4
,
3
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
7
,
4
,
3
}});
p
.
add_instruction
(
migraphx
::
op
::
concat
{
0
},
l0
,
l1
);
auto
prog
=
migraphx
::
parse_onnx
(
"concat_test.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"exp_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
erf
_test
)
TEST_CASE
(
constant
_test
)
{
migraphx
::
program
p
;
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
0
,
1
5
}});
p
.
add_instruction
(
migraphx
::
op
::
erf
{},
input
);
p
.
add_literal
(
migraphx
::
literal
{
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}},
{
0
,
1
,
2
}});
auto
prog
=
migraphx
::
parse_onnx
(
"constant_test.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"erf_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
sqrt
_test
)
TEST_CASE
(
constant_fill
_test
)
{
migraphx
::
program
p
;
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
10
,
15
}});
p
.
add_instruction
(
migraphx
::
op
::
sqrt
{},
input
);
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_literal
(
migraphx
::
literal
{{
migraphx
::
shape
::
int32_type
,
{
2
}},
{
2
,
3
}});
std
::
vector
<
std
::
size_t
>
dims
(
l0
->
get_shape
().
elements
());
migraphx
::
literal
ls
=
l0
->
get_literal
();
ls
.
visit
([
&
](
auto
s
)
{
dims
.
assign
(
s
.
begin
(),
s
.
end
());
});
migraphx
::
shape
s
{
migraphx
::
shape
::
float_type
,
dims
};
std
::
vector
<
float
>
value
(
s
.
elements
(),
1.0
);
p
.
add_literal
(
migraphx
::
literal
{
s
,
value
});
auto
prog
=
migraphx
::
parse_onnx
(
"const_fill1_test.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"sqrt_test.onnx"
);
EXPECT
(
p
==
prog
);
EXPECT
(
p
==
prog
);
}
{
migraphx
::
program
p
;
migraphx
::
shape
s
{
migraphx
::
shape
::
float_type
,
{
2
,
3
}};
std
::
vector
<
float
>
value
(
s
.
elements
(),
1.0
);
p
.
add_literal
(
migraphx
::
literal
{
s
,
value
});
auto
prog
=
migraphx
::
parse_onnx
(
"const_fill2_test.onnx"
);
EXPECT
(
p
==
prog
);
}
}
TEST_CASE
(
sign
_test
)
TEST_CASE
(
constant_scalar
_test
)
{
migraphx
::
program
p
;
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
double
_type
,
{
1
0
,
5
}});
p
.
add_instruction
(
migraphx
::
op
::
sign
{},
input
);
p
.
add_literal
(
migraphx
::
literal
{
migraphx
::
shape
{
migraphx
::
shape
::
int32
_type
,
{
1
}},
{
1
}});
auto
prog
=
migraphx
::
parse_onnx
(
"constant_scalar_test.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"sign_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
log
_test
)
TEST_CASE
(
const_of_shape_empty_input
_test
)
{
migraphx
::
program
p
;
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
10
}});
p
.
add_instruction
(
migraphx
::
op
::
log
{},
input
);
p
.
add_literal
(
migraphx
::
literal
());
migraphx
::
shape
s
(
migraphx
::
shape
::
int64_type
,
{
1
},
{
0
});
std
::
vector
<
int64_t
>
vec
(
s
.
elements
(),
10
);
p
.
add_literal
(
migraphx
::
literal
(
s
,
vec
));
auto
prog
=
migraphx
::
parse_onnx
(
"
log
_test.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"
const_of_shape_empty_input
_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
sin
_test
)
TEST_CASE
(
const_of_shape_float
_test
)
{
migraphx
::
program
p
;
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
10
}});
p
.
add_instruction
(
migraphx
::
op
::
sin
{},
input
);
migraphx
::
shape
ss
(
migraphx
::
shape
::
int32_type
,
{
3
});
p
.
add_literal
(
migraphx
::
literal
(
ss
,
{
2
,
3
,
4
}));
migraphx
::
shape
s
(
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
});
std
::
vector
<
float
>
vec
(
s
.
elements
(),
10.0
f
);
p
.
add_literal
(
migraphx
::
literal
(
s
,
vec
));
auto
prog
=
migraphx
::
parse_onnx
(
"
sin
_test.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"
const_of_shape_float
_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
co
s
_test
)
TEST_CASE
(
co
nst_of_shape_int64
_test
)
{
migraphx
::
program
p
;
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
10
}});
p
.
add_instruction
(
migraphx
::
op
::
cos
{},
input
);
migraphx
::
shape
ss
(
migraphx
::
shape
::
int32_type
,
{
3
});
p
.
add_literal
(
migraphx
::
literal
(
ss
,
{
2
,
3
,
4
}));
migraphx
::
shape
s
(
migraphx
::
shape
::
int64_type
,
{
2
,
3
,
4
});
std
::
vector
<
int64_t
>
vec
(
s
.
elements
(),
10
);
p
.
add_literal
(
migraphx
::
literal
(
s
,
vec
));
auto
prog
=
migraphx
::
parse_onnx
(
"co
s
_test.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"co
nst_of_shape_int64
_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
tan
_test
)
TEST_CASE
(
const_of_shape_no_value_attr
_test
)
{
migraphx
::
program
p
;
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
10
}});
p
.
add_instruction
(
migraphx
::
op
::
tan
{},
input
);
migraphx
::
shape
ss
(
migraphx
::
shape
::
int32_type
,
{
3
});
p
.
add_literal
(
migraphx
::
literal
(
ss
,
{
2
,
3
,
4
}));
migraphx
::
shape
s
(
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
});
std
::
vector
<
float
>
vec
(
s
.
elements
(),
0.0
f
);
p
.
add_literal
(
migraphx
::
literal
(
s
,
vec
));
auto
prog
=
migraphx
::
parse_onnx
(
"
tan
_test.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"
const_of_shape_no_value_attr
_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
sinh
_test
)
TEST_CASE
(
cos
_test
)
{
migraphx
::
program
p
;
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
10
}});
p
.
add_instruction
(
migraphx
::
op
::
sinh
{},
input
);
auto
prog
=
migraphx
::
parse_onnx
(
"sinh_test.onnx"
);
p
.
add_instruction
(
migraphx
::
op
::
cos
{},
input
);
auto
prog
=
migraphx
::
parse_onnx
(
"cos_test.onnx"
);
EXPECT
(
p
==
prog
);
}
...
...
@@ -284,13 +249,13 @@ TEST_CASE(cosh_test)
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
tanh
_test
)
TEST_CASE
(
dropout
_test
)
{
migraphx
::
program
p
;
auto
input
=
p
.
add_parameter
(
"
x
"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
}});
p
.
add_instruction
(
migraphx
::
op
::
tanh
{},
input
);
auto
input
=
p
.
add_parameter
(
"
0
"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
2
,
2
}});
p
.
add_instruction
(
migraphx
::
op
::
identity
{},
input
);
auto
prog
=
migraphx
::
parse_onnx
(
"
tanh
_test.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"
dropout
_test.onnx"
);
EXPECT
(
p
==
prog
);
}
...
...
@@ -306,349 +271,334 @@ TEST_CASE(elu_test)
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
asin
_test
)
TEST_CASE
(
erf
_test
)
{
migraphx
::
program
p
;
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
10
}});
p
.
add_instruction
(
migraphx
::
op
::
asin
{},
input
);
auto
prog
=
migraphx
::
parse_onnx
(
"asin_test.onnx"
);
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
10
,
15
}});
p
.
add_instruction
(
migraphx
::
op
::
erf
{},
input
);
auto
prog
=
migraphx
::
parse_onnx
(
"erf_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
max_test
)
{
migraphx
::
program
p
;
auto
input0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}});
auto
input1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}});
auto
input2
=
p
.
add_parameter
(
"2"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}});
auto
l0
=
p
.
add_instruction
(
migraphx
::
op
::
max
{},
input0
,
input1
);
p
.
add_instruction
(
migraphx
::
op
::
max
{},
l0
,
input2
);
migraphx
::
parse_onnx
(
"max_test.onnx"
);
}
TEST_CASE
(
acos_test
)
TEST_CASE
(
exp_test
)
{
migraphx
::
program
p
;
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
10
}});
p
.
add_instruction
(
migraphx
::
op
::
acos
{},
input
);
auto
prog
=
migraphx
::
parse_onnx
(
"acos_test.onnx"
);
p
.
add_instruction
(
migraphx
::
op
::
exp
{},
input
);
auto
prog
=
migraphx
::
parse_onnx
(
"exp_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
min_test
)
{
migraphx
::
program
p
;
auto
input0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}});
auto
input1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}});
auto
input2
=
p
.
add_parameter
(
"2"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}});
auto
l0
=
p
.
add_instruction
(
migraphx
::
op
::
min
{},
input0
,
input1
);
p
.
add_instruction
(
migraphx
::
op
::
min
{},
l0
,
input2
);
migraphx
::
parse_onnx
(
"min_test.onnx"
);
}
TEST_CASE
(
atan_test
)
TEST_CASE
(
expand_test
)
{
migraphx
::
program
p
;
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
10
}});
p
.
add_instruction
(
migraphx
::
op
::
atan
{},
input
);
auto
prog
=
migraphx
::
parse_onnx
(
"atan_test.onnx"
);
migraphx
::
shape
s
(
migraphx
::
shape
::
float_type
,
{
3
,
1
,
1
});
auto
param
=
p
.
add_parameter
(
"x"
,
s
);
migraphx
::
shape
ss
(
migraphx
::
shape
::
int32_type
,
{
4
});
p
.
add_literal
(
migraphx
::
literal
(
ss
,
{
2
,
3
,
4
,
5
}));
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
2
,
3
,
4
,
5
}},
param
);
auto
prog
=
migraphx
::
parse_onnx
(
"expand_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
add_bcast
_test
)
TEST_CASE
(
flatten
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
,
5
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
}});
auto
l2
=
p
.
add_instruction
(
migraphx
::
op
::
broadcast
{
1
,
l0
->
get_shape
().
lens
()},
l1
);
p
.
add_instruction
(
migraphx
::
op
::
add
{},
l0
,
l2
);
auto
prog
=
migraphx
::
parse_onnx
(
"add_bcast_test.onnx"
);
p
.
add_instruction
(
migraphx
::
op
::
flatten
{
2
},
l0
);
p
.
add_instruction
(
migraphx
::
op
::
flatten
{
1
},
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"flatten_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
implicit_add_bcast
_test
)
TEST_CASE
(
gather
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
,
5
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
1
}});
auto
l2
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
2
,
3
,
4
,
5
}},
l0
);
auto
l3
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
2
,
3
,
4
,
5
}},
l1
);
p
.
add_instruction
(
migraphx
::
op
::
add
{},
l2
,
l3
);
auto
prog
=
migraphx
::
parse_onnx
(
"implicit_bcast_test.onnx"
);
auto
l0
=
p
.
add_parameter
(
"data"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
5
,
6
}});
auto
l1
=
p
.
add_parameter
(
"indices"
,
migraphx
::
shape
{
migraphx
::
shape
::
int32_type
,
{
2
,
3
}});
int
axis
=
1
;
p
.
add_instruction
(
migraphx
::
op
::
gather
{
axis
},
l0
,
l1
);
auto
prog
=
migraphx
::
parse_onnx
(
"gather_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
sub_bcast
_test
)
TEST_CASE
(
gemm
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
,
5
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
}});
auto
l2
=
p
.
add_instruction
(
migraphx
::
op
::
broadcast
{
1
,
l0
->
get_shape
().
lens
()},
l1
);
p
.
add_instruction
(
migraphx
::
op
::
sub
{},
l0
,
l2
);
auto
prog
=
migraphx
::
parse_onnx
(
"sub_bcast_test.onnx"
);
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
5
,
7
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
11
,
5
}});
p
.
add_parameter
(
"2"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{}});
auto
t0
=
p
.
add_instruction
(
migraphx
::
op
::
transpose
{{
1
,
0
}},
l0
);
auto
t1
=
p
.
add_instruction
(
migraphx
::
op
::
transpose
{{
1
,
0
}},
l1
);
auto
alpha
=
2.
f
;
auto
beta
=
2.0
f
;
p
.
add_instruction
(
migraphx
::
op
::
dot
{
alpha
,
beta
},
t0
,
t1
);
auto
prog
=
migraphx
::
parse_onnx
(
"gemm_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
implicit_sub_bcast
_test
)
TEST_CASE
(
gemm_ex
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
,
5
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
4
,
5
}});
auto
l2
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
2
,
3
,
4
,
5
}},
l0
);
auto
l3
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
2
,
3
,
4
,
5
}},
l1
);
p
.
add_instruction
(
migraphx
::
op
::
sub
{},
l2
,
l3
);
auto
prog
=
migraphx
::
parse_onnx
(
"implicit_sub_bcast_test.onnx"
);
auto
l0
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
1
,
5
,
6
}});
auto
l1
=
p
.
add_parameter
(
"2"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
1
,
5
,
7
}});
auto
l2
=
p
.
add_parameter
(
"3"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
1
,
6
,
7
}});
auto
t0
=
p
.
add_instruction
(
migraphx
::
op
::
transpose
{{
0
,
1
,
3
,
2
}},
l0
);
auto
alpha
=
0.5
f
;
auto
beta
=
0.8
f
;
p
.
add_instruction
(
migraphx
::
op
::
dot
{
alpha
,
beta
},
t0
,
l1
,
l2
);
auto
prog
=
migraphx
::
parse_onnx
(
"gemm_ex_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
unknown_te
st
)
TEST_CASE
(
gemm_ex_brc
st
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
,
5
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
}});
auto
l2
=
p
.
add_instruction
(
migraphx
::
op
::
unknown
{
"Unknown"
},
l0
,
l1
);
p
.
add_instruction
(
migraphx
::
op
::
unknown
{
"Unknown"
},
l2
);
auto
prog
=
migraphx
::
parse_onnx
(
"unknown_test.onnx"
);
auto
l0
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
1
,
5
,
6
}});
auto
l1
=
p
.
add_parameter
(
"2"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
1
,
5
,
7
}});
auto
l2
=
p
.
add_parameter
(
"3"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
1
,
6
,
1
}});
auto
t0
=
p
.
add_instruction
(
migraphx
::
op
::
transpose
{{
0
,
1
,
3
,
2
}},
l0
);
std
::
vector
<
std
::
size_t
>
out_lens
{
1
,
1
,
6
,
7
};
auto
t2
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{
out_lens
},
l2
);
auto
alpha
=
0.5
f
;
auto
beta
=
0.8
f
;
p
.
add_instruction
(
migraphx
::
op
::
dot
{
alpha
,
beta
},
t0
,
l1
,
t2
);
auto
prog
=
migraphx
::
parse_onnx
(
"gemm_test_ex1.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
softmax
_test
)
TEST_CASE
(
globalavgpool
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
3
}});
p
.
add_instruction
(
migraphx
::
op
::
softmax
{
1
},
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"softmax_test.onnx"
);
auto
input
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
16
,
16
}});
auto
op
=
migraphx
::
op
::
pooling
{
"average"
};
auto
lens
=
input
->
get_shape
().
lens
();
op
.
lengths
=
{
lens
[
2
],
lens
[
3
]};
p
.
add_instruction
(
op
,
input
);
auto
prog
=
migraphx
::
parse_onnx
(
"globalavgpool_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
reshape
_test
)
TEST_CASE
(
globalmaxpool
_test
)
{
migraphx
::
program
p
;
migraphx
::
op
::
reshape
op
;
std
::
vector
<
int64_t
>
reshape_dims
{
3
,
8
};
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
4
,
2
,
3
}});
p
.
add_literal
(
migraphx
::
literal
{
migraphx
::
shape
{
migraphx
::
shape
::
int64_type
,
{
2
}},
reshape_dims
});
op
.
dims
=
reshape_dims
;
p
.
add_instruction
(
op
,
l0
);
p
.
add_instruction
(
op
,
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"reshape_test.onnx"
);
auto
input
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
16
,
16
}});
auto
op
=
migraphx
::
op
::
pooling
{
"max"
};
auto
lens
=
input
->
get_shape
().
lens
();
op
.
lengths
=
{
lens
[
2
],
lens
[
3
]};
p
.
add_instruction
(
op
,
input
);
auto
prog
=
migraphx
::
parse_onnx
(
"globalmaxpool_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
reshape_non_standard
)
TEST_CASE
(
group_conv_test
)
{
migraphx
::
program
p
;
migraphx
::
op
::
reshape
op
;
std
::
vector
<
int64_t
>
reshape_dims
{
4
,
3
,
2
};
migraphx
::
shape
s
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
}};
auto
x
=
p
.
add_parameter
(
"x"
,
s
);
auto
tran_x
=
p
.
add_instruction
(
migraphx
::
op
::
transpose
{{
0
,
2
,
1
}},
x
);
auto
cont_x
=
p
.
add_instruction
(
migraphx
::
op
::
contiguous
{},
tran_x
);
p
.
add_instruction
(
migraphx
::
op
::
reshape
{{
4
,
3
,
2
}},
cont_x
);
auto
prog
=
migraphx
::
parse_onnx
(
"reshape_non_standard.onnx"
);
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
4
,
16
,
16
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
4
,
1
,
3
,
3
}});
migraphx
::
op
::
convolution
op
;
op
.
group
=
4
;
p
.
add_instruction
(
op
,
l0
,
l1
);
auto
prog
=
migraphx
::
parse_onnx
(
"group_conv_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
shape
_test
)
TEST_CASE
(
imagescaler
_test
)
{
migraphx
::
program
p
;
migraphx
::
shape
s
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
5
,
6
}};
auto
l0
=
p
.
add_parameter
(
"x"
,
s
);
migraphx
::
shape
s_shape
{
migraphx
::
shape
::
int64_type
,
{
4
}};
p
.
add_literal
(
s_shape
,
l0
->
get_shape
().
lens
());
auto
prog
=
migraphx
::
parse_onnx
(
"shape_test.onnx"
);
migraphx
::
shape
s
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
16
,
16
}};
auto
l0
=
p
.
add_parameter
(
"0"
,
s
);
auto
scale_val
=
p
.
add_literal
(
0.5
f
);
auto
bias_vals
=
p
.
add_literal
(
migraphx
::
literal
{
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}},
{
0.01
,
0.02
,
0.03
}});
auto
scaled_tensor
=
p
.
add_instruction
(
migraphx
::
op
::
scalar
{
s
.
lens
()},
scale_val
);
auto
img_scaled
=
p
.
add_instruction
(
migraphx
::
op
::
mul
{},
l0
,
scaled_tensor
);
auto
bias_bcast
=
p
.
add_instruction
(
migraphx
::
op
::
broadcast
{
1
,
s
.
lens
()},
bias_vals
);
p
.
add_instruction
(
migraphx
::
op
::
add
{},
img_scaled
,
bias_bcast
);
auto
prog
=
migraphx
::
parse_onnx
(
"imagescaler_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
gather
_test
)
TEST_CASE
(
implicit_add_bcast
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"data"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
5
,
6
}});
auto
l1
=
p
.
add_parameter
(
"indices"
,
migraphx
::
shape
{
migraphx
::
shape
::
int32_type
,
{
2
,
3
}});
int
axis
=
1
;
p
.
add_instruction
(
migraphx
::
op
::
gather
{
axis
},
l0
,
l1
);
auto
prog
=
migraphx
::
parse_onnx
(
"gather_test.onnx"
);
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
,
5
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
1
}});
auto
l2
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
2
,
3
,
4
,
5
}},
l0
);
auto
l3
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
2
,
3
,
4
,
5
}},
l1
);
p
.
add_instruction
(
migraphx
::
op
::
add
{},
l2
,
l3
);
auto
prog
=
migraphx
::
parse_onnx
(
"implicit_add_bcast_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
shape_gather
_test
)
TEST_CASE
(
implicit_pow_bcast
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
7
,
3
,
10
}});
auto
l1
=
p
.
add_literal
(
migraphx
::
shape
{
migraphx
::
shape
::
int64_type
,
{
3
}},
l0
->
get_shape
().
lens
());
migraphx
::
shape
const_shape
{
migraphx
::
shape
::
int32_type
,
{
1
}};
auto
l2
=
p
.
add_literal
(
migraphx
::
literal
{
const_shape
,
{
1
}});
int
axis
=
0
;
p
.
add_instruction
(
migraphx
::
op
::
gather
{
axis
},
l1
,
l2
);
auto
prog
=
migraphx
::
parse_onnx
(
"shape_gather.onnx"
);
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
,
5
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
1
}});
auto
l2
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
2
,
3
,
4
,
5
}},
l0
);
auto
l3
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
2
,
3
,
4
,
5
}},
l1
);
p
.
add_instruction
(
migraphx
::
op
::
pow
{},
l2
,
l3
);
auto
prog
=
migraphx
::
parse_onnx
(
"implicit_pow_bcast_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
flatten
_test
)
TEST_CASE
(
implicit_sub_bcast
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
,
5
}});
p
.
add_instruction
(
migraphx
::
op
::
flatten
{
2
},
l0
);
p
.
add_instruction
(
migraphx
::
op
::
flatten
{
1
},
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"flatten_test.onnx"
);
auto
l1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
4
,
5
}});
auto
l2
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
2
,
3
,
4
,
5
}},
l0
);
auto
l3
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
2
,
3
,
4
,
5
}},
l1
);
p
.
add_instruction
(
migraphx
::
op
::
sub
{},
l2
,
l3
);
auto
prog
=
migraphx
::
parse_onnx
(
"implicit_sub_bcast_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
squeeze_unsqueeze
_test
)
TEST_CASE
(
leaky_relu
_test
)
{
migraphx
::
program
p
;
std
::
vector
<
int64_t
>
squeeze_axes
{
0
,
2
,
3
,
5
};
std
::
vector
<
int64_t
>
unsqueeze_axes
{
0
,
1
,
3
,
5
};
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
1
,
1
,
2
,
1
}});
auto
l1
=
p
.
add_instruction
(
migraphx
::
op
::
squeeze
{
squeeze_axes
},
l0
);
p
.
add_instruction
(
migraphx
::
op
::
unsqueeze
{
unsqueeze_axes
},
l1
);
auto
prog
=
migraphx
::
parse_onnx
(
"squeeze_unsqueeze_test.onnx"
);
float
alpha
=
0.01
f
;
auto
l0
=
p
.
add_parameter
(
"0"
,
{
migraphx
::
shape
::
float_type
,
{
3
}});
p
.
add_instruction
(
migraphx
::
op
::
leaky_relu
{
alpha
},
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"leaky_relu_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
concat
_test
)
TEST_CASE
(
log
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
4
,
3
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
7
,
4
,
3
}});
p
.
add_instruction
(
migraphx
::
op
::
concat
{
0
},
l0
,
l1
);
auto
prog
=
migraphx
::
parse_onnx
(
"concat_test.onnx"
);
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
10
}});
p
.
add_instruction
(
migraphx
::
op
::
log
{},
input
);
auto
prog
=
migraphx
::
parse_onnx
(
"log_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
slice
_test
)
TEST_CASE
(
logsoftmax
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
2
}});
p
.
add_instruction
(
migraphx
::
op
::
slice
{{
0
,
1
},
{
1
,
0
},
{
2
,
2
}},
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"slice_test.onnx"
);
auto
l0
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
5
,
6
}});
int
axis
=
1
;
p
.
add_instruction
(
migraphx
::
op
::
logsoftmax
{
axis
},
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"logsoftmax_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
constant
_test
)
TEST_CASE
(
lrn
_test
)
{
migraphx
::
program
p
;
p
.
add_literal
(
migraphx
::
literal
{
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}},
{
0
,
1
,
2
}});
auto
prog
=
migraphx
::
parse_onnx
(
"constant_test.onnx"
);
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
28
,
24
,
24
}});
migraphx
::
op
::
lrn
op
;
op
.
size
=
5
;
op
.
alpha
=
0.0001
;
op
.
beta
=
0.75
;
op
.
bias
=
1.0
;
p
.
add_instruction
(
op
,
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"lrn_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
constant_test_scalar
)
TEST_CASE
(
matmul_bmbm_test
)
{
migraphx
::
program
p
;
p
.
add_literal
(
migraphx
::
literal
{
migraphx
::
shape
{
migraphx
::
shape
::
int32_type
,
{
1
}},
{
1
}});
auto
prog
=
migraphx
::
parse_onnx
(
"constant_scalar.onnx"
);
auto
l0
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
6
,
7
}});
auto
l1
=
p
.
add_parameter
(
"2"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
5
,
2
,
1
,
7
,
8
}});
auto
bl0
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
5
,
2
,
3
,
6
,
7
}},
l0
);
auto
bl1
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
5
,
2
,
3
,
7
,
8
}},
l1
);
p
.
add_instruction
(
migraphx
::
op
::
dot
{
1.0
f
,
0.0
f
},
bl0
,
bl1
);
auto
prog
=
migraphx
::
parse_onnx
(
"matmul_bmbm_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
constant_fill
_test
)
TEST_CASE
(
matmul_bmv
_test
)
{
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_literal
(
migraphx
::
literal
{{
migraphx
::
shape
::
int32_type
,
{
2
}},
{
2
,
3
}});
std
::
vector
<
std
::
size_t
>
dims
(
l0
->
get_shape
().
elements
());
migraphx
::
literal
ls
=
l0
->
get_literal
();
ls
.
visit
([
&
](
auto
s
)
{
dims
.
assign
(
s
.
begin
(),
s
.
end
());
});
migraphx
::
shape
s
{
migraphx
::
shape
::
float_type
,
dims
};
std
::
vector
<
float
>
value
(
s
.
elements
(),
1.0
);
p
.
add_literal
(
migraphx
::
literal
{
s
,
value
});
auto
prog
=
migraphx
::
parse_onnx
(
"const_fill1.onnx"
);
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
6
,
7
}});
auto
l1
=
p
.
add_parameter
(
"2"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
7
}});
auto
sl1
=
p
.
add_instruction
(
migraphx
::
op
::
unsqueeze
{{
1
}},
l1
);
auto
bsl1
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
3
,
7
,
1
}},
sl1
);
auto
res
=
p
.
add_instruction
(
migraphx
::
op
::
dot
{
1.0
f
,
0.0
f
},
l0
,
bsl1
);
p
.
add_instruction
(
migraphx
::
op
::
squeeze
{{
2
}},
res
);
EXPECT
(
p
==
prog
);
}
auto
prog
=
migraphx
::
parse_onnx
(
"matmul_bmv_test.onnx"
);
{
migraphx
::
program
p
;
migraphx
::
shape
s
{
migraphx
::
shape
::
float_type
,
{
2
,
3
}};
std
::
vector
<
float
>
value
(
s
.
elements
(),
1.0
);
p
.
add_literal
(
migraphx
::
literal
{
s
,
value
});
auto
prog
=
migraphx
::
parse_onnx
(
"const_fill2.onnx"
);
EXPECT
(
p
==
prog
);
}
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
gemm
_test
)
TEST_CASE
(
matmul_mv
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
5
,
7
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
11
,
5
}});
p
.
add_parameter
(
"2"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{}});
auto
t0
=
p
.
add_instruction
(
migraphx
::
op
::
transpose
{{
1
,
0
}},
l0
);
auto
t1
=
p
.
add_instruction
(
migraphx
::
op
::
transpose
{{
1
,
0
}},
l1
);
auto
alpha
=
2.
f
;
auto
beta
=
2.0
f
;
p
.
add_instruction
(
migraphx
::
op
::
dot
{
alpha
,
beta
},
t0
,
t1
);
auto
prog
=
migraphx
::
parse_onnx
(
"gemm_test.onnx"
);
auto
l0
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
6
,
7
}});
auto
l1
=
p
.
add_parameter
(
"2"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
7
}});
auto
sl1
=
p
.
add_instruction
(
migraphx
::
op
::
unsqueeze
{{
1
}},
l1
);
auto
res
=
p
.
add_instruction
(
migraphx
::
op
::
dot
{
1.0
f
,
0.0
f
},
l0
,
sl1
);
p
.
add_instruction
(
migraphx
::
op
::
squeeze
{{
1
}},
res
);
auto
prog
=
migraphx
::
parse_onnx
(
"matmul_mv_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
gemm_ex
)
TEST_CASE
(
matmul_vbm_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
1
,
5
,
6
}});
auto
l1
=
p
.
add_parameter
(
"2"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
1
,
5
,
7
}});
auto
l2
=
p
.
add_parameter
(
"3"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
1
,
6
,
7
}});
auto
t0
=
p
.
add_instruction
(
migraphx
::
op
::
transpose
{{
0
,
1
,
3
,
2
}},
l0
);
auto
alpha
=
0.5
f
;
auto
beta
=
0.8
f
;
p
.
add_instruction
(
migraphx
::
op
::
dot
{
alpha
,
beta
},
t0
,
l1
,
l2
);
auto
prog
=
migraphx
::
parse_onnx
(
"gemm_test_ex.onnx"
);
auto
l0
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
7
}});
auto
l1
=
p
.
add_parameter
(
"2"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
5
,
7
,
8
}});
auto
sl0
=
p
.
add_instruction
(
migraphx
::
op
::
unsqueeze
{{
0
}},
l0
);
auto
bsl0
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
5
,
1
,
7
}},
sl0
);
std
::
cout
<<
"ONNX_TEST"
<<
std
::
endl
;
auto
res
=
p
.
add_instruction
(
migraphx
::
op
::
dot
{
1.0
f
,
0.0
f
},
bsl0
,
l1
);
std
::
cout
<<
"After Dot"
<<
std
::
endl
;
p
.
add_instruction
(
migraphx
::
op
::
squeeze
{{
1
}},
res
);
auto
prog
=
migraphx
::
parse_onnx
(
"matmul_vbm_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
gemm_ex_brc
st
)
TEST_CASE
(
matmul_vm_te
st
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
1
,
5
,
6
}});
auto
l1
=
p
.
add_parameter
(
"2"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
1
,
5
,
7
}});
auto
l2
=
p
.
add_parameter
(
"3"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
1
,
6
,
1
}});
auto
t0
=
p
.
add_instruction
(
migraphx
::
op
::
transpose
{{
0
,
1
,
3
,
2
}},
l0
);
std
::
vector
<
std
::
size_t
>
out_lens
{
1
,
1
,
6
,
7
};
auto
t2
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{
out_lens
},
l2
);
auto
alpha
=
0.5
f
;
auto
beta
=
0.8
f
;
p
.
add_instruction
(
migraphx
::
op
::
dot
{
alpha
,
beta
},
t0
,
l1
,
t2
);
auto
prog
=
migraphx
::
parse_onnx
(
"gemm_test_ex1.onnx"
);
auto
l0
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
7
}});
auto
l1
=
p
.
add_parameter
(
"2"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
7
,
8
}});
auto
sl0
=
p
.
add_instruction
(
migraphx
::
op
::
unsqueeze
{{
0
}},
l0
);
auto
res
=
p
.
add_instruction
(
migraphx
::
op
::
dot
{
1.0
f
,
0.0
f
},
sl0
,
l1
);
p
.
add_instruction
(
migraphx
::
op
::
squeeze
{{
0
}},
res
);
auto
prog
=
migraphx
::
parse_onnx
(
"matmul_vm_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
matmul_vv
)
TEST_CASE
(
matmul_vv
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
7
}});
...
...
@@ -659,366 +609,416 @@ TEST_CASE(matmul_vv)
auto
sr0
=
p
.
add_instruction
(
migraphx
::
op
::
squeeze
{{
0
}},
res
);
p
.
add_instruction
(
migraphx
::
op
::
squeeze
{{
0
}},
sr0
);
auto
prog
=
migraphx
::
parse_onnx
(
"matmul_vv.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"matmul_vv
_test
.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
ma
tmul_vm
)
TEST_CASE
(
ma
x_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"
1
"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
7
}});
auto
l1
=
p
.
add_parameter
(
"
2
"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
7
,
8
}});
auto
sl0
=
p
.
add_
instruction
(
migraphx
::
op
::
unsqueeze
{{
0
}},
l0
);
auto
res
=
p
.
add_instruction
(
migraphx
::
op
::
dot
{
1.0
f
,
0.0
f
},
sl0
,
l
1
);
p
.
add_instruction
(
migraphx
::
op
::
squeeze
{{
0
}},
res
);
auto
input0
=
p
.
add_parameter
(
"
0
"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}});
auto
input1
=
p
.
add_parameter
(
"
1
"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}});
auto
input2
=
p
.
add_
parameter
(
"2"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}}
);
auto
l0
=
p
.
add_instruction
(
migraphx
::
op
::
max
{},
input0
,
input
1
);
p
.
add_instruction
(
migraphx
::
op
::
max
{},
l0
,
input2
);
auto
prog
=
migraphx
::
parse_onnx
(
"matmul_vm.onnx"
);
migraphx
::
parse_onnx
(
"max_test.onnx"
);
}
EXPECT
(
p
==
prog
);
TEST_CASE
(
min_test
)
{
migraphx
::
program
p
;
auto
input0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}});
auto
input1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}});
auto
input2
=
p
.
add_parameter
(
"2"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}});
auto
l0
=
p
.
add_instruction
(
migraphx
::
op
::
min
{},
input0
,
input1
);
p
.
add_instruction
(
migraphx
::
op
::
min
{},
l0
,
input2
);
migraphx
::
parse_onnx
(
"min_test.onnx"
);
}
TEST_CASE
(
matmul_vbm
)
TEST_CASE
(
no_pad_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
7
}});
auto
l1
=
p
.
add_parameter
(
"2"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
5
,
7
,
8
}});
auto
sl0
=
p
.
add_instruction
(
migraphx
::
op
::
unsqueeze
{{
0
}},
l0
);
auto
bsl0
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
5
,
1
,
7
}},
sl0
);
std
::
cout
<<
"ONNX_TEST"
<<
std
::
endl
;
auto
res
=
p
.
add_instruction
(
migraphx
::
op
::
dot
{
1.0
f
,
0.0
f
},
bsl0
,
l1
);
std
::
cout
<<
"After Dot"
<<
std
::
endl
;
p
.
add_instruction
(
migraphx
::
op
::
squeeze
{{
1
}},
res
);
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
2
}});
p
.
add_instruction
(
migraphx
::
op
::
identity
{},
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"no_pad_test.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"matmul_vbm.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
pad_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
2
}});
p
.
add_instruction
(
migraphx
::
op
::
pad
{{
1
,
1
,
1
,
1
}},
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"pad_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
matmul_mv
)
TEST_CASE
(
pow_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
6
,
7
}});
auto
l1
=
p
.
add_parameter
(
"2"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
7
}});
auto
sl1
=
p
.
add_instruction
(
migraphx
::
op
::
unsqueeze
{{
1
}},
l1
);
auto
res
=
p
.
add_instruction
(
migraphx
::
op
::
dot
{
1.0
f
,
0.0
f
},
l0
,
sl1
);
p
.
add_instruction
(
migraphx
::
op
::
squeeze
{{
1
}},
res
);
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
,
5
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
,
5
}});
p
.
add_instruction
(
migraphx
::
op
::
pow
{},
l0
,
l1
);
auto
prog
=
migraphx
::
parse_onnx
(
"
matmul_mv
.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"
pow_test
.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
matmul_bmv
)
TEST_CASE
(
pytorch_conv_bias_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
6
,
7
}});
auto
l1
=
p
.
add_parameter
(
"2"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
7
}});
auto
sl1
=
p
.
add_instruction
(
migraphx
::
op
::
unsqueeze
{{
1
}},
l1
);
auto
bsl1
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
3
,
7
,
1
}},
sl1
);
auto
res
=
p
.
add_instruction
(
migraphx
::
op
::
dot
{
1.0
f
,
0.0
f
},
l0
,
bsl1
);
p
.
add_instruction
(
migraphx
::
op
::
squeeze
{{
2
}},
res
);
auto
l0
=
p
.
add_parameter
(
"0"
,
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
32
,
32
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
5
,
5
}});
auto
l2
=
p
.
add_parameter
(
"2"
,
{
migraphx
::
shape
::
float_type
,
{
1
}});
uint64_t
axis
=
1
;
auto
l3
=
p
.
add_instruction
(
migraphx
::
op
::
convolution
{},
l0
,
l1
);
auto
l4
=
p
.
add_instruction
(
migraphx
::
op
::
broadcast
{
axis
,
l3
->
get_shape
().
lens
()},
l2
);
p
.
add_instruction
(
migraphx
::
op
::
add
{},
l3
,
l4
);
auto
prog
=
migraphx
::
parse_onnx
(
"matmul_bmv.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"conv.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
pytorch_conv_bn_relu_maxpool
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
32
,
32
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
5
,
5
}});
auto
l2
=
p
.
add_parameter
(
"2"
,
{
migraphx
::
shape
::
float_type
,
{
1
}});
auto
p3
=
p
.
add_parameter
(
"3"
,
{
migraphx
::
shape
::
float_type
,
{
1
}});
auto
p4
=
p
.
add_parameter
(
"4"
,
{
migraphx
::
shape
::
float_type
,
{
1
}});
auto
p5
=
p
.
add_parameter
(
"5"
,
{
migraphx
::
shape
::
float_type
,
{
1
}});
auto
p6
=
p
.
add_parameter
(
"6"
,
{
migraphx
::
shape
::
float_type
,
{
1
}});
uint64_t
axis
=
1
;
auto
l3
=
p
.
add_instruction
(
migraphx
::
op
::
convolution
{},
l0
,
l1
);
auto
l4
=
p
.
add_instruction
(
migraphx
::
op
::
broadcast
{
axis
,
l3
->
get_shape
().
lens
()},
l2
);
auto
l5
=
p
.
add_instruction
(
migraphx
::
op
::
add
{},
l3
,
l4
);
auto
l6
=
p
.
add_instruction
(
migraphx
::
op
::
batch_norm_inference
{
1.0e-5
f
},
l5
,
p3
,
p4
,
p5
,
p6
);
auto
l7
=
p
.
add_instruction
(
migraphx
::
op
::
relu
{},
l6
);
p
.
add_instruction
(
migraphx
::
op
::
pooling
{
"max"
,
{{
0
,
0
}},
{{
2
,
2
}},
{{
2
,
2
}}},
l7
);
auto
prog
=
migraphx
::
parse_onnx
(
"conv_bn_relu_maxpool.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
matmul_bmbm
)
TEST_CASE
(
pytorch_conv_relu_maxpool
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
6
,
7
}});
auto
l1
=
p
.
add_parameter
(
"2"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
5
,
2
,
1
,
7
,
8
}});
auto
bl0
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
5
,
2
,
3
,
6
,
7
}},
l0
);
auto
bl1
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
5
,
2
,
3
,
7
,
8
}},
l1
);
p
.
add_instruction
(
migraphx
::
op
::
dot
{
1.0
f
,
0.0
f
},
bl0
,
bl1
);
auto
l0
=
p
.
add_parameter
(
"0"
,
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
32
,
32
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
5
,
5
}});
auto
l2
=
p
.
add_parameter
(
"2"
,
{
migraphx
::
shape
::
float_type
,
{
1
}});
uint64_t
axis
=
1
;
auto
l3
=
p
.
add_instruction
(
migraphx
::
op
::
convolution
{},
l0
,
l1
);
auto
l4
=
p
.
add_instruction
(
migraphx
::
op
::
broadcast
{
axis
,
l3
->
get_shape
().
lens
()},
l2
);
auto
l5
=
p
.
add_instruction
(
migraphx
::
op
::
add
{},
l3
,
l4
);
auto
l6
=
p
.
add_instruction
(
migraphx
::
op
::
relu
{},
l5
);
p
.
add_instruction
(
migraphx
::
op
::
pooling
{
"max"
,
{{
0
,
0
}},
{{
2
,
2
}},
{{
2
,
2
}}},
l6
);
auto
prog
=
migraphx
::
parse_onnx
(
"conv_relu_maxpool.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
pytorch_conv_relu_maxpool_x2
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
32
,
32
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
{
migraphx
::
shape
::
float_type
,
{
5
,
3
,
5
,
5
}});
auto
l2
=
p
.
add_parameter
(
"2"
,
{
migraphx
::
shape
::
float_type
,
{
5
}});
uint64_t
axis
=
1
;
auto
l3
=
p
.
add_instruction
(
migraphx
::
op
::
convolution
{},
l0
,
l1
);
auto
l4
=
p
.
add_instruction
(
migraphx
::
op
::
broadcast
{
axis
,
l3
->
get_shape
().
lens
()},
l2
);
auto
l5
=
p
.
add_instruction
(
migraphx
::
op
::
add
{},
l3
,
l4
);
auto
l6
=
p
.
add_instruction
(
migraphx
::
op
::
relu
{},
l5
);
auto
l7
=
p
.
add_instruction
(
migraphx
::
op
::
pooling
{
"max"
,
{{
0
,
0
}},
{{
2
,
2
}},
{{
2
,
2
}}},
l6
);
auto
l8
=
p
.
add_parameter
(
"3"
,
{
migraphx
::
shape
::
float_type
,
{
1
,
5
,
5
,
5
}});
auto
l9
=
p
.
add_parameter
(
"4"
,
{
migraphx
::
shape
::
float_type
,
{
1
}});
auto
l10
=
p
.
add_instruction
(
migraphx
::
op
::
convolution
{},
l7
,
l8
);
auto
l11
=
p
.
add_instruction
(
migraphx
::
op
::
broadcast
{
axis
,
l10
->
get_shape
().
lens
()},
l9
);
auto
l12
=
p
.
add_instruction
(
migraphx
::
op
::
add
{},
l10
,
l11
);
auto
l13
=
p
.
add_instruction
(
migraphx
::
op
::
relu
{},
l12
);
p
.
add_instruction
(
migraphx
::
op
::
pooling
{
"max"
,
{{
0
,
0
}},
{{
2
,
2
}},
{{
2
,
2
}}},
l13
);
auto
prog
=
migraphx
::
parse_onnx
(
"
matmul_bmbm
.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"
conv_relu_maxpoolX2
.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
add_scalar
_test
)
TEST_CASE
(
reducemean
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
,
5
}});
auto
l1
=
p
.
add_literal
(
migraphx
::
literal
{
migraphx
::
shape
{
migraphx
::
shape
::
float_type
},
{
1
}});
auto
m0
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
2
,
3
,
4
,
5
}},
l0
);
auto
m1
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
2
,
3
,
4
,
5
}},
l1
);
p
.
add_instruction
(
migraphx
::
op
::
add
{},
m0
,
m1
);
auto
prog
=
migraphx
::
parse_onnx
(
"add_scalar_test.onnx"
);
auto
l0
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
5
,
6
}});
auto
l1
=
p
.
add_instruction
(
migraphx
::
op
::
reduce_mean
{{
2
,
3
}},
l0
);
p
.
add_instruction
(
migraphx
::
op
::
squeeze
{{
2
,
3
}},
l1
);
auto
prog
=
migraphx
::
parse_onnx
(
"reducemean_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
sub_scalar
_test
)
TEST_CASE
(
reducemean_keepdims
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
,
5
}});
auto
l1
=
p
.
add_literal
(
migraphx
::
literal
{
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
}},
{
1
}});
auto
m0
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
2
,
3
,
4
,
5
}},
l0
);
auto
m1
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
2
,
3
,
4
,
5
}},
l1
);
p
.
add_instruction
(
migraphx
::
op
::
sub
{},
m0
,
m1
);
auto
prog
=
migraphx
::
parse_onnx
(
"sub_scalar_test.onnx"
);
auto
l0
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
5
,
6
}});
p
.
add_instruction
(
migraphx
::
op
::
reduce_mean
{{
2
}},
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"reducemean_keepdims_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
group_conv
_test
)
TEST_CASE
(
reducesum
_test
1
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
4
,
16
,
16
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
4
,
1
,
3
,
3
}});
migraphx
::
op
::
convolution
op
;
op
.
group
=
4
;
p
.
add_instruction
(
op
,
l0
,
l1
);
auto
prog
=
migraphx
::
parse_onnx
(
"group_conv_test.onnx"
);
auto
l0
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
5
,
6
}});
auto
l1
=
p
.
add_instruction
(
migraphx
::
op
::
reduce_sum
{{
2
}},
l0
);
p
.
add_instruction
(
migraphx
::
op
::
squeeze
{{
2
}},
l1
);
auto
prog
=
migraphx
::
parse_onnx
(
"reducesum_test1.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
pad
_test
)
TEST_CASE
(
reducesum
_test
2
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
2
}});
p
.
add_instruction
(
migraphx
::
op
::
pad
{{
1
,
1
,
1
,
1
}},
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"pad_test.onnx"
);
auto
l0
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
5
,
6
}});
auto
l1
=
p
.
add_instruction
(
migraphx
::
op
::
reduce_sum
{{
2
,
3
}},
l0
);
p
.
add_instruction
(
migraphx
::
op
::
squeeze
{{
2
,
3
}},
l1
);
auto
prog
=
migraphx
::
parse_onnx
(
"reducesum_test2.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
lrn
_test
)
TEST_CASE
(
reducesum
_test
3
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
28
,
24
,
24
}});
migraphx
::
op
::
lrn
op
;
op
.
size
=
5
;
op
.
alpha
=
0.0001
;
op
.
beta
=
0.75
;
op
.
bias
=
1.0
;
p
.
add_instruction
(
op
,
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"lrn_test.onnx"
);
auto
l0
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
5
,
6
}});
p
.
add_instruction
(
migraphx
::
op
::
reduce_sum
{{
2
,
3
}},
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"reducesum_test3.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
add_fp16
_test
)
TEST_CASE
(
reshape
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_literal
(
migraphx
::
literal
{
migraphx
::
shape
{
migraphx
::
shape
::
half_type
,
{
1
}},
{
1.5
}});
auto
l1
=
p
.
add_literal
(
migraphx
::
literal
{
migraphx
::
shape
{
migraphx
::
shape
::
half_type
,
{
1
}},
{
2.5
}});
p
.
add_instruction
(
migraphx
::
op
::
add
{},
l0
,
l1
);
auto
prog
=
migraphx
::
parse_onnx
(
"add_fp16_test.onnx"
);
migraphx
::
op
::
reshape
op
;
std
::
vector
<
int64_t
>
reshape_dims
{
3
,
8
};
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
4
,
2
,
3
}});
p
.
add_literal
(
migraphx
::
literal
{
migraphx
::
shape
{
migraphx
::
shape
::
int64_type
,
{
2
}},
reshape_dims
});
op
.
dims
=
reshape_dims
;
p
.
add_instruction
(
op
,
l0
);
p
.
add_instruction
(
op
,
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"reshape_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
logsoftmax
)
TEST_CASE
(
reshape_non_standard
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
5
,
6
}});
int
axis
=
1
;
p
.
add_instruction
(
migraphx
::
op
::
logsoftmax
{
axis
},
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"logsoftmax_test.onnx"
);
migraphx
::
op
::
reshape
op
;
std
::
vector
<
int64_t
>
reshape_dims
{
4
,
3
,
2
};
migraphx
::
shape
s
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
}};
auto
x
=
p
.
add_parameter
(
"x"
,
s
);
auto
tran_x
=
p
.
add_instruction
(
migraphx
::
op
::
transpose
{{
0
,
2
,
1
}},
x
);
auto
cont_x
=
p
.
add_instruction
(
migraphx
::
op
::
contiguous
{},
tran_x
);
p
.
add_instruction
(
migraphx
::
op
::
reshape
{{
4
,
3
,
2
}},
cont_x
);
auto
prog
=
migraphx
::
parse_onnx
(
"reshape_non_standard.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
argmax
)
TEST_CASE
(
shape_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
5
,
6
}});
auto
ins
=
p
.
add_instruction
(
migraphx
::
op
::
argmax
{
2
},
l0
);
p
.
add_instruction
(
migraphx
::
op
::
squeeze
{{
2
}},
ins
);
auto
prog
=
migraphx
::
parse_onnx
(
"argmax_test.onnx"
);
migraphx
::
shape
s
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
5
,
6
}};
auto
l0
=
p
.
add_parameter
(
"x"
,
s
);
migraphx
::
shape
s_shape
{
migraphx
::
shape
::
int64_type
,
{
4
}};
p
.
add_literal
(
s_shape
,
l0
->
get_shape
().
lens
());
auto
prog
=
migraphx
::
parse_onnx
(
"shape_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
argmin
)
TEST_CASE
(
shape_gather_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
5
,
6
}});
auto
ins
=
p
.
add_instruction
(
migraphx
::
op
::
argmin
{
3
},
l0
);
p
.
add_instruction
(
migraphx
::
op
::
squeeze
{{
3
}},
ins
);
auto
prog
=
migraphx
::
parse_onnx
(
"argmin_test.onnx"
);
auto
l0
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
7
,
3
,
10
}});
auto
l1
=
p
.
add_literal
(
migraphx
::
shape
{
migraphx
::
shape
::
int64_type
,
{
3
}},
l0
->
get_shape
().
lens
());
migraphx
::
shape
const_shape
{
migraphx
::
shape
::
int32_type
,
{
1
}};
auto
l2
=
p
.
add_literal
(
migraphx
::
literal
{
const_shape
,
{
1
}});
int
axis
=
0
;
p
.
add_instruction
(
migraphx
::
op
::
gather
{
axis
},
l1
,
l2
);
auto
prog
=
migraphx
::
parse_onnx
(
"shape_gather.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
no_pad
_test
)
TEST_CASE
(
sign
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
2
}});
p
.
add_instruction
(
migraphx
::
op
::
identity
{},
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"no_pad_test.onnx"
);
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
double_type
,
{
10
,
5
}});
p
.
add_instruction
(
migraphx
::
op
::
sign
{},
input
);
auto
prog
=
migraphx
::
parse_onnx
(
"sign_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
reducesum
_test
1
)
TEST_CASE
(
sin
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
5
,
6
}});
auto
l1
=
p
.
add_instruction
(
migraphx
::
op
::
reduce_sum
{{
2
}},
l0
);
p
.
add_instruction
(
migraphx
::
op
::
squeeze
{{
2
}},
l1
);
auto
prog
=
migraphx
::
parse_onnx
(
"reducesum_test1.onnx"
);
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
10
}});
p
.
add_instruction
(
migraphx
::
op
::
sin
{},
input
);
auto
prog
=
migraphx
::
parse_onnx
(
"sin_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
reducesum
_test
2
)
TEST_CASE
(
sinh
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
5
,
6
}});
auto
l1
=
p
.
add_instruction
(
migraphx
::
op
::
reduce_sum
{{
2
,
3
}},
l0
);
p
.
add_instruction
(
migraphx
::
op
::
squeeze
{{
2
,
3
}},
l1
);
auto
prog
=
migraphx
::
parse_onnx
(
"
reducesum
_test
2
.onnx"
);
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
10
}});
p
.
add_instruction
(
migraphx
::
op
::
sinh
{},
input
);
auto
prog
=
migraphx
::
parse_onnx
(
"
sinh
_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
reducesum
_test
3
)
TEST_CASE
(
slice
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"
x
"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
5
,
6
}});
p
.
add_instruction
(
migraphx
::
op
::
reduce_sum
{
{
2
,
3
}},
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"
reducesum
_test
3
.onnx"
);
auto
l0
=
p
.
add_parameter
(
"
0
"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
2
}});
p
.
add_instruction
(
migraphx
::
op
::
slice
{{
0
,
1
},
{
1
,
0
},
{
2
,
2
}},
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"
slice
_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
reducemean
_test
1
)
TEST_CASE
(
softmax
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
5
,
6
}});
auto
l1
=
p
.
add_instruction
(
migraphx
::
op
::
reduce_mean
{{
2
,
3
}},
l0
);
p
.
add_instruction
(
migraphx
::
op
::
squeeze
{{
2
,
3
}},
l1
);
auto
prog
=
migraphx
::
parse_onnx
(
"reducemean_test1.onnx"
);
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
3
}});
p
.
add_instruction
(
migraphx
::
op
::
softmax
{
1
},
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"softmax_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
reducemean
_test
2
)
TEST_CASE
(
sqrt
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
5
,
6
}});
p
.
add_instruction
(
migraphx
::
op
::
reduce_mean
{{
2
}},
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"reducemean_test2.onnx"
);
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
10
,
15
}});
p
.
add_instruction
(
migraphx
::
op
::
sqrt
{},
input
);
auto
prog
=
migraphx
::
parse_onnx
(
"sqrt_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
clip
_test
)
TEST_CASE
(
squeeze_unsqueeze
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}});
p
.
add_instruction
(
migraphx
::
op
::
clip
{
6.0
,
0.0
},
l0
);
auto
prog
=
migraphx
::
parse_onnx
(
"clip_test.onnx"
);
std
::
vector
<
int64_t
>
squeeze_axes
{
0
,
2
,
3
,
5
};
std
::
vector
<
int64_t
>
unsqueeze_axes
{
0
,
1
,
3
,
5
};
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
3
,
1
,
1
,
2
,
1
}});
auto
l1
=
p
.
add_instruction
(
migraphx
::
op
::
squeeze
{
squeeze_axes
},
l0
);
p
.
add_instruction
(
migraphx
::
op
::
unsqueeze
{
unsqueeze_axes
},
l1
);
auto
prog
=
migraphx
::
parse_onnx
(
"squeeze_unsqueeze_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
implicit_pow
_bcast_test
)
TEST_CASE
(
sub
_bcast_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
,
5
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
1
}});
auto
l2
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
2
,
3
,
4
,
5
}},
l0
);
auto
l3
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
2
,
3
,
4
,
5
}},
l1
);
p
.
add_instruction
(
migraphx
::
op
::
pow
{},
l2
,
l3
);
auto
l1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
}});
auto
l2
=
p
.
add_instruction
(
migraphx
::
op
::
broadcast
{
1
,
l0
->
get_shape
().
lens
()},
l1
);
p
.
add_instruction
(
migraphx
::
op
::
sub
{},
l0
,
l2
);
auto
prog
=
migraphx
::
parse_onnx
(
"
pow
_bcast_test.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"
sub
_bcast_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
pow
_test
)
TEST_CASE
(
sub_scalar
_test
)
{
migraphx
::
program
p
;
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
,
5
}});
auto
l1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
,
5
}});
p
.
add_instruction
(
migraphx
::
op
::
pow
{},
l0
,
l1
);
auto
prog
=
migraphx
::
parse_onnx
(
"pow_bcast_test1.onnx"
);
auto
l1
=
p
.
add_literal
(
migraphx
::
literal
{
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
}},
{
1
}});
auto
m0
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
2
,
3
,
4
,
5
}},
l0
);
auto
m1
=
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
2
,
3
,
4
,
5
}},
l1
);
p
.
add_instruction
(
migraphx
::
op
::
sub
{},
m0
,
m1
);
auto
prog
=
migraphx
::
parse_onnx
(
"sub_scalar_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
cast
_test
)
TEST_CASE
(
sum
_test
)
{
migraphx
::
program
p
;
auto
l
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
half_type
,
{
10
}});
p
.
add_instruction
(
migraphx
::
op
::
convert
{
migraphx
::
shape
::
float_type
},
l
);
auto
input0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}});
auto
input1
=
p
.
add_parameter
(
"1"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}});
auto
input2
=
p
.
add_parameter
(
"2"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
}});
auto
l0
=
p
.
add_instruction
(
migraphx
::
op
::
add
{},
input0
,
input1
);
p
.
add_instruction
(
migraphx
::
op
::
add
{},
l0
,
input2
);
auto
prog
=
migraphx
::
parse_onnx
(
"
cast
_test.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"
sum
_test.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
const_of_shape_floa
t
)
TEST_CASE
(
tan_tes
t
)
{
migraphx
::
program
p
;
migraphx
::
shape
ss
(
migraphx
::
shape
::
int32_type
,
{
3
});
p
.
add_literal
(
migraphx
::
literal
(
ss
,
{
2
,
3
,
4
}));
migraphx
::
shape
s
(
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
});
std
::
vector
<
float
>
vec
(
s
.
elements
(),
10.0
f
);
p
.
add_literal
(
migraphx
::
literal
(
s
,
vec
));
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
10
}});
p
.
add_instruction
(
migraphx
::
op
::
tan
{},
input
);
auto
prog
=
migraphx
::
parse_onnx
(
"
const_of_shape1
.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"
tan_test
.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
const_of_shape_int64
)
TEST_CASE
(
tanh_test
)
{
migraphx
::
program
p
;
migraphx
::
shape
ss
(
migraphx
::
shape
::
int32_type
,
{
3
});
p
.
add_literal
(
migraphx
::
literal
(
ss
,
{
2
,
3
,
4
}));
migraphx
::
shape
s
(
migraphx
::
shape
::
int64_type
,
{
2
,
3
,
4
});
std
::
vector
<
int64_t
>
vec
(
s
.
elements
(),
10
);
p
.
add_literal
(
migraphx
::
literal
(
s
,
vec
));
auto
prog
=
migraphx
::
parse_onnx
(
"const_of_shape2.onnx"
);
EXPECT
(
p
==
prog
);
}
auto
input
=
p
.
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
}});
p
.
add_instruction
(
migraphx
::
op
::
tanh
{},
input
);
TEST_CASE
(
const_of_shape_no_value_attr
)
{
migraphx
::
program
p
;
migraphx
::
shape
ss
(
migraphx
::
shape
::
int32_type
,
{
3
});
p
.
add_literal
(
migraphx
::
literal
(
ss
,
{
2
,
3
,
4
}));
migraphx
::
shape
s
(
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
});
std
::
vector
<
float
>
vec
(
s
.
elements
(),
0.0
f
);
p
.
add_literal
(
migraphx
::
literal
(
s
,
vec
));
auto
prog
=
migraphx
::
parse_onnx
(
"tanh_test.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"const_of_shape3.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
const_of_shape_empty_inpu
t
)
TEST_CASE
(
transpose_tes
t
)
{
migraphx
::
program
p
;
p
.
add_literal
(
migraphx
::
literal
());
migraphx
::
shape
s
(
migraphx
::
shape
::
int64_type
,
{
1
},
{
0
});
std
::
vector
<
int64_t
>
vec
(
s
.
elements
(),
10
);
p
.
add_literal
(
migraphx
::
literal
(
s
,
vec
));
auto
input
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
1
,
2
,
2
,
3
}});
std
::
vector
<
int64_t
>
perm
{
0
,
3
,
1
,
2
};
p
.
add_instruction
(
migraphx
::
op
::
transpose
{
perm
},
input
);
auto
prog
=
migraphx
::
parse_onnx
(
"transpose_test.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"const_of_shape4.onnx"
);
EXPECT
(
p
==
prog
);
}
TEST_CASE
(
expand
_test
)
TEST_CASE
(
unknown
_test
)
{
migraphx
::
program
p
;
migraphx
::
shape
s
(
migraphx
::
shape
::
float_type
,
{
3
,
1
,
1
});
auto
param
=
p
.
add_parameter
(
"
x
"
,
s
);
migraphx
::
shape
ss
(
migraphx
::
shape
::
int32_type
,
{
4
}
);
p
.
add_
literal
(
migraphx
::
literal
(
ss
,
{
2
,
3
,
4
,
5
})
);
p
.
add_instruction
(
migraphx
::
op
::
multibroadcast
{{
2
,
3
,
4
,
5
}},
param
);
auto
l0
=
p
.
add_parameter
(
"0"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
,
5
}
});
auto
l1
=
p
.
add_parameter
(
"
1
"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
}}
);
auto
l2
=
p
.
add_instruction
(
migraphx
::
op
::
unknown
{
"Unknown"
},
l0
,
l1
);
p
.
add_
instruction
(
migraphx
::
op
::
unknown
{
"Unknown"
},
l2
);
auto
prog
=
migraphx
::
parse_onnx
(
"unknown_test.onnx"
);
auto
prog
=
migraphx
::
parse_onnx
(
"expand_test.onnx"
);
EXPECT
(
p
==
prog
);
}
...
...
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