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
f7079e51
Commit
f7079e51
authored
Apr 08, 2023
by
Paul
Browse files
Merge
parents
79eac1b8
f6e22d56
Changes
89
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
347 additions
and
26 deletions
+347
-26
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/verify/main.cpp
test/verify/main.cpp
+2
-1
test/verify/run_verify.cpp
test/verify/run_verify.cpp
+22
-14
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_quantizelinear_int32.cpp
test/verify/test_quantizelinear_int32.cpp
+7
-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
No files found.
test/simplify_reshapes_test.cpp
View file @
f7079e51
...
@@ -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 @
f7079e51
/*
* 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/verify/main.cpp
View file @
f7079e51
...
@@ -73,7 +73,8 @@ int main(int argc, const char* argv[])
...
@@ -73,7 +73,8 @@ int main(int argc, const char* argv[])
"test_if_literal"
,
"test_if_literal"
,
"test_select_module_add"
,
"test_select_module_add"
,
"test_select_module_reduce"
,
"test_select_module_reduce"
,
"test_select_module_conv"
});
"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 @
f7079e51
...
@@ -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
::
target
t
=
migraphx
::
make_target
(
"ref"
);
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 @
f7079e51
...
@@ -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 @
f7079e51
/*
* 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_quantizelinear_int32.cpp
View file @
f7079e51
...
@@ -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_split_single_dyn_dim.cpp
0 → 100644
View file @
f7079e51
/*
* 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 @
f7079e51
...
@@ -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
Prev
1
2
3
4
5
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