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
4fffcdd5
Commit
4fffcdd5
authored
Feb 14, 2022
by
Khalique Ahmed
Browse files
Merge branch 'develop' of
https://github.com/ROCmSoftwarePlatform/AMDMIGraphX
into rocblas_api_opt
parents
d45bd3ba
48585bad
Changes
26
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
107 additions
and
78 deletions
+107
-78
test/gpu/fast_math.cpp
test/gpu/fast_math.cpp
+0
-63
test/op_shape_test.cpp
test/op_shape_test.cpp
+21
-0
test/ref_ops_nonstd_shape_test.cpp
test/ref_ops_nonstd_shape_test.cpp
+63
-13
test/serialize_program.cpp
test/serialize_program.cpp
+1
-1
test/verify/run_verify.cpp
test/verify/run_verify.cpp
+1
-1
test/verify/test_sub_int.cpp
test/verify/test_sub_int.cpp
+21
-0
No files found.
test/gpu/fast_math.cpp
deleted
100644 → 0
View file @
d45bd3ba
#include <test.hpp>
#include <migraphx/quantization.hpp>
#include <migraphx/iterator_for.hpp>
#include <migraphx/op/add.hpp>
#include <migraphx/op/mul.hpp>
#include <migraphx/op/multibroadcast.hpp>
#include <migraphx/op/pow.hpp>
#include <migraphx/op/tanh.hpp>
#include <migraphx/gpu/target.hpp>
#include <migraphx/instruction.hpp>
migraphx
::
program
create_gelu
()
{
migraphx
::
program
p
;
auto
*
mm
=
p
.
get_main_module
();
std
::
vector
<
float
>
data0
=
{
0.044715
};
std
::
vector
<
float
>
data1
=
{
0.797885
};
std
::
vector
<
float
>
data2
=
{
3
};
std
::
vector
<
float
>
data3
=
{
0.5
};
migraphx
::
shape
s0
{
migraphx
::
shape
::
float_type
,
{
1
}};
std
::
vector
<
size_t
>
x_dims
{
1
,
1
,
5
};
auto
x
=
mm
->
add_parameter
(
"x"
,
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
x_dims
});
auto
const_val
=
mm
->
add_literal
(
migraphx
::
literal
{
s0
,
data0
});
auto
sqrt_2_pi
=
mm
->
add_literal
(
migraphx
::
literal
{
s0
,
data1
});
auto
three_val
=
mm
->
add_literal
(
migraphx
::
literal
{
s0
,
data2
});
auto
half_val
=
mm
->
add_literal
(
migraphx
::
literal
{
s0
,
data3
});
auto
mbcast_3
=
mm
->
add_instruction
(
migraphx
::
op
::
multibroadcast
{
x_dims
},
three_val
);
auto
pow_op
=
mm
->
add_instruction
(
migraphx
::
op
::
pow
{},
x
,
mbcast_3
);
auto
mbcast_const
=
mm
->
add_instruction
(
migraphx
::
op
::
multibroadcast
{
x_dims
},
const_val
);
auto
mul_const
=
mm
->
add_instruction
(
migraphx
::
op
::
mul
{},
mbcast_const
,
pow_op
);
auto
add_x
=
mm
->
add_instruction
(
migraphx
::
op
::
add
{},
x
,
mul_const
);
auto
mbcast_sqrt_2_pi
=
mm
->
add_instruction
(
migraphx
::
op
::
multibroadcast
{
x_dims
},
sqrt_2_pi
);
auto
mul_add_x
=
mm
->
add_instruction
(
migraphx
::
op
::
mul
{},
mbcast_sqrt_2_pi
,
add_x
);
auto
tanh_op
=
mm
->
add_instruction
(
migraphx
::
op
::
tanh
{},
mul_add_x
);
auto
mbcast_half
=
mm
->
add_instruction
(
migraphx
::
op
::
multibroadcast
{
x_dims
},
half_val
);
auto
mul_half
=
mm
->
add_instruction
(
migraphx
::
op
::
mul
{},
mbcast_half
,
tanh_op
);
auto
add_mul_half
=
mm
->
add_instruction
(
migraphx
::
op
::
add
{},
mul_half
,
mbcast_half
);
auto
mul_x
=
mm
->
add_instruction
(
migraphx
::
op
::
mul
{},
x
,
add_mul_half
);
mm
->
add_return
({
mul_x
});
return
p
;
}
TEST_CASE
(
enable_fast_gelu
)
{
migraphx
::
program
p
=
create_gelu
();
p
.
compile
(
migraphx
::
gpu
::
target
{});
CHECK
(
any_of
(
*
p
.
get_main_module
(),
[
&
](
auto
&&
i
)
{
return
i
.
name
()
==
"gpu::gelu"
;
}));
}
TEST_CASE
(
disable_fast_gelu
)
{
migraphx
::
program
p
=
create_gelu
();
migraphx
::
compile_options
options
;
options
.
fast_math
=
false
;
p
.
compile
(
migraphx
::
gpu
::
target
{},
options
);
CHECK
(
any_of
(
*
p
.
get_main_module
(),
[
&
](
auto
&&
i
)
{
return
i
.
name
()
==
"gpu::gelu_new"
;
}));
}
int
main
(
int
argc
,
const
char
*
argv
[])
{
test
::
run
(
argc
,
argv
);
}
test/op_shape_test.cpp
View file @
4fffcdd5
...
@@ -1446,6 +1446,27 @@ TEST_CASE(test_squeeze_all)
...
@@ -1446,6 +1446,27 @@ TEST_CASE(test_squeeze_all)
expect_shape
(
s2
,
migraphx
::
make_op
(
"squeeze"
,
{{
"axes"
,
{
0
}}}),
s1
);
expect_shape
(
s2
,
migraphx
::
make_op
(
"squeeze"
,
{{
"axes"
,
{
0
}}}),
s1
);
}
}
TEST_CASE
(
test_squeeze_transpose
)
{
migraphx
::
shape
s1
{
migraphx
::
shape
::
float_type
,
{
4
,
4
,
1
},
{
4
,
1
,
4
}};
migraphx
::
shape
s2
{
migraphx
::
shape
::
float_type
,
{
4
,
4
},
{
4
,
1
}};
expect_shape
(
s2
,
migraphx
::
make_op
(
"squeeze"
,
{{
"axes"
,
{
2
}}}),
s1
);
}
TEST_CASE
(
test_squeeze_multibroadcast
)
{
migraphx
::
shape
s1
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
1
,
4
},
{
0
,
1
,
1
,
0
}};
migraphx
::
shape
s2
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
},
{
0
,
1
,
0
}};
expect_shape
(
s2
,
migraphx
::
make_op
(
"squeeze"
,
{{
"axes"
,
{
2
}}}),
s1
);
}
TEST_CASE
(
test_squeeze_slice
)
{
migraphx
::
shape
s1
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
1
,
4
},
{
108
,
36
,
6
,
1
}};
migraphx
::
shape
s2
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
},
{
108
,
36
,
1
}};
expect_shape
(
s2
,
migraphx
::
make_op
(
"squeeze"
,
{{
"axes"
,
{
2
}}}),
s1
);
}
TEST_CASE
(
test_squeeze_negative_axis
)
TEST_CASE
(
test_squeeze_negative_axis
)
{
{
migraphx
::
shape
s1
{
migraphx
::
shape
::
float_type
,
{
4
,
1
,
3
,
1
,
3
}};
migraphx
::
shape
s1
{
migraphx
::
shape
::
float_type
,
{
4
,
1
,
3
,
1
,
3
}};
...
...
test/ref_ops_nonstd_shape_test.cpp
View file @
4fffcdd5
...
@@ -3,21 +3,17 @@
...
@@ -3,21 +3,17 @@
#include <migraphx/literal.hpp>
#include <migraphx/literal.hpp>
#include <migraphx/instruction.hpp>
#include <migraphx/instruction.hpp>
#include <migraphx/ref/target.hpp>
#include <migraphx/ref/target.hpp>
#include <migraphx/generate.hpp>
#include <migraphx/verify.hpp>
#include <migraphx/verify.hpp>
#include <migraphx/make_op.hpp>
#include <migraphx/make_op.hpp>
#include <migraphx/auto_contiguous.hpp>
#include <migraphx/pass_manager.hpp>
#include <migraphx/pass_manager.hpp>
#include "test.hpp"
#include "test.hpp"
TEST_CASE
(
argmax_test_nonstd_shape
)
TEST_CASE
(
argmax_test_nonstd_shape
)
{
{
migraphx
::
program
p
;
migraphx
::
program
p
;
auto
*
mm
=
p
.
get_main_module
();
auto
*
mm
=
p
.
get_main_module
();
std
::
vector
<
float
>
data
=
{
1.2255
,
1.6834
,
-
2.0305
,
-
0.3221
,
0.4701
,
0.2583
,
0.7545
,
2.5758
,
auto
dl
=
mm
->
add_literal
(
migraphx
::
generate_literal
({
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
}}));
-
1.6849
,
0.0928
,
0.9022
,
-
0.8765
,
-
0.4090
,
0.9301
,
2.0724
,
-
1.5706
,
0.4867
,
-
0.1493
,
0.6957
,
-
0.2179
,
0.7142
,
0.7177
,
0.0183
,
1.3497
};
migraphx
::
shape
data_shape
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
}};
auto
dl
=
mm
->
add_literal
(
migraphx
::
literal
{
data_shape
,
data
});
auto
dl_trans
=
auto
dl_trans
=
mm
->
add_instruction
(
migraphx
::
make_op
(
"transpose"
,
{{
"permutation"
,
{
1
,
2
,
0
}}}),
dl
);
mm
->
add_instruction
(
migraphx
::
make_op
(
"transpose"
,
{{
"permutation"
,
{
1
,
2
,
0
}}}),
dl
);
mm
->
add_instruction
(
migraphx
::
make_op
(
"argmax"
,
{{
"axis"
,
-
3
}}),
dl_trans
);
mm
->
add_instruction
(
migraphx
::
make_op
(
"argmax"
,
{{
"axis"
,
-
3
}}),
dl_trans
);
...
@@ -35,12 +31,8 @@ TEST_CASE(argmax_test_nonstd_shape)
...
@@ -35,12 +31,8 @@ TEST_CASE(argmax_test_nonstd_shape)
TEST_CASE
(
argmin_test_nonstd_shape
)
TEST_CASE
(
argmin_test_nonstd_shape
)
{
{
migraphx
::
program
p
;
migraphx
::
program
p
;
auto
*
mm
=
p
.
get_main_module
();
auto
*
mm
=
p
.
get_main_module
();
std
::
vector
<
float
>
data
=
{
1.2255
,
1.6834
,
-
2.0305
,
-
0.3221
,
0.4701
,
0.2583
,
0.7545
,
2.5758
,
auto
dl
=
mm
->
add_literal
(
migraphx
::
generate_literal
({
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
}}));
-
1.6849
,
0.0928
,
0.9022
,
-
0.8765
,
-
0.4090
,
0.9301
,
2.0724
,
-
1.5706
,
0.4867
,
-
0.1493
,
0.6957
,
-
0.2179
,
0.7142
,
0.7177
,
0.0183
,
1.3497
};
migraphx
::
shape
data_shape
{
migraphx
::
shape
::
float_type
,
{
2
,
3
,
4
}};
auto
dl
=
mm
->
add_literal
(
migraphx
::
literal
{
data_shape
,
data
});
auto
dl_trans
=
auto
dl_trans
=
mm
->
add_instruction
(
migraphx
::
make_op
(
"transpose"
,
{{
"permutation"
,
{
1
,
2
,
0
}}}),
dl
);
mm
->
add_instruction
(
migraphx
::
make_op
(
"transpose"
,
{{
"permutation"
,
{
1
,
2
,
0
}}}),
dl
);
mm
->
add_instruction
(
migraphx
::
make_op
(
"argmin"
,
{{
"axis"
,
-
1
}}),
dl_trans
);
mm
->
add_instruction
(
migraphx
::
make_op
(
"argmin"
,
{{
"axis"
,
-
1
}}),
dl_trans
);
...
@@ -55,4 +47,62 @@ TEST_CASE(argmin_test_nonstd_shape)
...
@@ -55,4 +47,62 @@ TEST_CASE(argmin_test_nonstd_shape)
EXPECT
(
migraphx
::
verify_range
(
result_vec
,
res_gold_vec
));
EXPECT
(
migraphx
::
verify_range
(
result_vec
,
res_gold_vec
));
}
}
TEST_CASE
(
squeeze_transpose_test
)
{
migraphx
::
program
p
;
auto
*
mm
=
p
.
get_main_module
();
auto
l0
=
mm
->
add_literal
(
migraphx
::
generate_literal
({
migraphx
::
shape
::
float_type
,
{
4
,
1
,
3
,
1
,
3
}}));
auto
l0_trans
=
mm
->
add_instruction
(
migraphx
::
make_op
(
"transpose"
,
{{
"permutation"
,
{
1
,
2
,
3
,
0
,
4
}}}),
l0
);
mm
->
add_instruction
(
migraphx
::
make_op
(
"squeeze"
),
l0_trans
);
auto
p_uncompiled
=
p
;
p
.
compile
(
migraphx
::
ref
::
target
{});
auto
result
=
p
.
eval
({}).
back
();
auto
expected_result
=
p_uncompiled
.
eval
({}).
back
();
// contiguous is required to read the values in standard shaped order
auto
tr_op
=
migraphx
::
make_op
(
"contiguous"
);
auto
std_expected_result
=
tr_op
.
compute
(
result
.
get_shape
(),
{
expected_result
});
EXPECT
(
result
.
get_shape
()
==
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
4
,
3
}});
EXPECT
(
result
==
std_expected_result
);
}
TEST_CASE
(
squeeze_multibroadcast_test
)
{
migraphx
::
program
p
;
auto
*
mm
=
p
.
get_main_module
();
auto
l0
=
mm
->
add_literal
(
migraphx
::
generate_literal
({
migraphx
::
shape
::
float_type
,
{
1
,
3
,
1
,
3
}}));
auto
l0_brcst
=
mm
->
add_instruction
(
migraphx
::
make_op
(
"multibroadcast"
,
{{
"out_lens"
,
{
4
,
1
,
3
,
4
,
3
}}}),
l0
);
mm
->
add_instruction
(
migraphx
::
make_op
(
"squeeze"
),
l0_brcst
);
auto
p_uncompiled
=
p
;
p
.
compile
(
migraphx
::
ref
::
target
{});
auto
result
=
p
.
eval
({}).
back
();
auto
expected_result
=
p_uncompiled
.
eval
({}).
back
();
auto
tr_op
=
migraphx
::
make_op
(
"contiguous"
);
auto
std_expected_result
=
tr_op
.
compute
(
result
.
get_shape
(),
{
expected_result
});
EXPECT
(
result
.
get_shape
()
==
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
4
,
3
,
4
,
3
}});
EXPECT
(
result
==
std_expected_result
);
}
TEST_CASE
(
squeeze_slice_test
)
{
migraphx
::
program
p
;
auto
*
mm
=
p
.
get_main_module
();
auto
l0
=
mm
->
add_literal
(
migraphx
::
generate_literal
({
migraphx
::
shape
::
float_type
,
{
1
,
3
,
4
,
3
}}));
auto
l0_slice
=
mm
->
add_instruction
(
migraphx
::
make_op
(
"slice"
,
{{
"axes"
,
{
2
}},
{
"starts"
,
{
2
}},
{
"ends"
,
{
3
}}}),
l0
);
mm
->
add_instruction
(
migraphx
::
make_op
(
"squeeze"
),
l0_slice
);
auto
p_uncompiled
=
p
;
p
.
compile
(
migraphx
::
ref
::
target
{});
auto
result
=
p
.
eval
({}).
back
();
auto
expected_result
=
p_uncompiled
.
eval
({}).
back
();
auto
tr_op
=
migraphx
::
make_op
(
"contiguous"
);
auto
std_expected_result
=
tr_op
.
compute
(
result
.
get_shape
(),
{
expected_result
});
EXPECT
(
result
.
get_shape
()
==
migraphx
::
shape
{
migraphx
::
shape
::
float_type
,
{
3
,
3
}});
EXPECT
(
result
==
std_expected_result
);
}
int
main
(
int
argc
,
const
char
*
argv
[])
{
test
::
run
(
argc
,
argv
);
}
int
main
(
int
argc
,
const
char
*
argv
[])
{
test
::
run
(
argc
,
argv
);
}
test/serialize_program.cpp
View file @
4fffcdd5
...
@@ -48,7 +48,7 @@ TEST_CASE(as_json)
...
@@ -48,7 +48,7 @@ TEST_CASE(as_json)
TEST_CASE
(
as_file
)
TEST_CASE
(
as_file
)
{
{
std
::
string
filename
=
"migraphx_program.
dat
"
;
std
::
string
filename
=
"migraphx_program.
mxr
"
;
migraphx
::
program
p1
=
create_program
();
migraphx
::
program
p1
=
create_program
();
migraphx
::
save
(
p1
,
filename
);
migraphx
::
save
(
p1
,
filename
);
migraphx
::
program
p2
=
migraphx
::
load
(
filename
);
migraphx
::
program
p2
=
migraphx
::
load
(
filename
);
...
...
test/verify/run_verify.cpp
View file @
4fffcdd5
...
@@ -128,7 +128,7 @@ void run_verify::verify(const std::string& name, const migraphx::program& p) con
...
@@ -128,7 +128,7 @@ void run_verify::verify(const std::string& name, const migraphx::program& p) con
std
::
future
<
std
::
pair
<
migraphx
::
program
,
std
::
vector
<
migraphx
::
argument
>>>
;
std
::
future
<
std
::
pair
<
migraphx
::
program
,
std
::
vector
<
migraphx
::
argument
>>>
;
auto_print
::
set_terminate_handler
(
name
);
auto_print
::
set_terminate_handler
(
name
);
if
(
migraphx
::
enabled
(
MIGRAPHX_DUMP_TEST
{}))
if
(
migraphx
::
enabled
(
MIGRAPHX_DUMP_TEST
{}))
migraphx
::
save
(
p
,
name
+
".mx"
);
migraphx
::
save
(
p
,
name
+
".mx
r
"
);
std
::
vector
<
std
::
pair
<
std
::
string
,
result_future
>>
results
;
std
::
vector
<
std
::
pair
<
std
::
string
,
result_future
>>
results
;
std
::
vector
<
std
::
string
>
target_names
;
std
::
vector
<
std
::
string
>
target_names
;
for
(
const
auto
&
tname
:
migraphx
::
get_targets
())
for
(
const
auto
&
tname
:
migraphx
::
get_targets
())
...
...
test/verify/test_sub_int.cpp
0 → 100644
View file @
4fffcdd5
#include "verify_program.hpp"
#include <migraphx/program.hpp>
#include <migraphx/generate.hpp>
#include <migraphx/make_op.hpp>
struct
test_sub_int
:
verify_program
<
test_sub_int
>
{
migraphx
::
program
create_program
()
const
{
migraphx
::
program
p
;
auto
*
mm
=
p
.
get_main_module
();
migraphx
::
shape
s
{
migraphx
::
shape
::
float_type
,
{
3
}};
auto
x
=
mm
->
add_parameter
(
"x"
,
{
migraphx
::
shape
::
int16_type
,
{
4
,
5
}});
auto
y
=
mm
->
add_parameter
(
"y"
,
{
migraphx
::
shape
::
int16_type
,
{
2
,
3
,
4
,
5
}});
auto
xb
=
mm
->
add_instruction
(
migraphx
::
make_op
(
"multibroadcast"
,
{{
"out_lens"
,
{
2
,
3
,
4
,
5
}}}),
x
);
auto
diff
=
mm
->
add_instruction
(
migraphx
::
make_op
(
"sub"
),
y
,
xb
);
mm
->
add_return
({
diff
});
return
p
;
}
};
Prev
1
2
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