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
81fb85e7
Commit
81fb85e7
authored
Mar 03, 2019
by
Paul
Browse files
Add test with concurrent merge points
parent
4c6391ca
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
74 additions
and
5 deletions
+74
-5
test/schedule_test.cpp
test/schedule_test.cpp
+74
-5
No files found.
test/schedule_test.cpp
View file @
81fb85e7
...
...
@@ -121,14 +121,14 @@ bool check_conflicts(migraphx::program& p, migraphx::instruction_ref x, migraphx
}
void
check_conflicts
(
migraphx
::
program
&
p
,
std
::
vector
<
std
::
vector
<
migraphx
::
instruction_ref
>>
conflicts
)
std
::
vector
<
std
::
vector
<
migraphx
::
instruction_ref
>>
conflicts
,
bool
result
=
true
)
{
migraphx
::
dfor
(
conflicts
.
size
(),
conflicts
.
size
())([
&
](
auto
i
,
auto
j
)
{
if
(
i
==
j
)
return
;
for
(
auto
ins1
:
conflicts
[
i
])
for
(
auto
ins2
:
conflicts
[
j
])
CHECK
(
check_conflicts
(
p
,
ins1
,
ins2
));
CHECK
(
check_conflicts
(
p
,
ins1
,
ins2
)
==
result
);
});
}
...
...
@@ -196,7 +196,7 @@ TEST_CASE(double_entry)
// EXPECT(check_conflicts(p, onep, twop));
}
TEST_CASE
(
two_
weight
s
)
TEST_CASE
(
two_
branche
s
)
{
instruction_map
stream
;
migraphx
::
program
p
;
...
...
@@ -214,7 +214,7 @@ TEST_CASE(two_weights)
check_conflicts
(
p
,
{
c1
,
{
i1
}});
}
TEST_CASE
(
four_
weight
s
)
TEST_CASE
(
four_
branche
s
)
{
instruction_map
stream
;
migraphx
::
program
p
;
...
...
@@ -240,7 +240,7 @@ TEST_CASE(four_weights)
check_conflicts
(
p
,
{
c1
,
c2
,
c3
,
{
i1
}});
}
TEST_CASE
(
five_
weight
s
)
TEST_CASE
(
five_
branche
s
)
{
instruction_map
stream
;
migraphx
::
program
p
;
...
...
@@ -270,4 +270,73 @@ TEST_CASE(five_weights)
check_conflicts
(
p
,
{
c1
,
c2
,
c3
,
{
i1
}});
}
TEST_CASE
(
seq_merge
)
{
instruction_map
stream
;
migraphx
::
program
p
;
auto
one
=
p
.
add_literal
(
1
);
auto
c1
=
chain
(
p
,
2
,
unary_op
{},
one
);
auto
i1
=
p
.
add_instruction
(
unary_op
{},
one
);
auto
binary1
=
p
.
add_instruction
(
nary_op
{},
i1
,
c1
.
back
());
auto
c2
=
chain
(
p
,
2
,
unary_op
{},
binary1
);
auto
i2
=
p
.
add_instruction
(
unary_op
{},
binary1
);
auto
binary2
=
p
.
add_instruction
(
nary_op
{},
i2
,
c2
.
back
());
p
.
compile
(
schedule_target
{
&
stream
});
EXPECT
(
stream
.
count
(
one
)
==
0
);
EXPECT
(
stream
.
at
(
i1
)
==
1
);
for
(
auto
ins
:
c1
)
EXPECT
(
stream
.
at
(
ins
)
==
0
);
EXPECT
(
stream
.
at
(
binary1
)
==
0
);
EXPECT
(
get_wait_for
(
binary1
)
==
get_wait_for
(
stream
[
binary1
],
{
stream
[
c1
.
back
()],
stream
[
i1
]}));
check_conflicts
(
p
,
{
c1
,
{
i1
}});
EXPECT
(
stream
.
at
(
i2
)
==
1
);
for
(
auto
ins
:
c2
)
EXPECT
(
stream
.
at
(
ins
)
==
0
);
EXPECT
(
stream
.
at
(
binary2
)
==
0
);
EXPECT
(
get_wait_for
(
binary2
)
==
get_wait_for
(
stream
[
binary2
],
{
stream
[
c2
.
back
()],
stream
[
i2
]}));
check_conflicts
(
p
,
{
c2
,
{
i2
}});
}
TEST_CASE
(
par_merge
)
{
instruction_map
stream
;
migraphx
::
program
p
;
auto
one
=
p
.
add_literal
(
1
);
auto
start1
=
p
.
add_instruction
(
unary_op
{},
one
);
auto
c1
=
chain
(
p
,
3
,
unary_op
{},
start1
);
auto
i1
=
p
.
add_instruction
(
unary_op
{},
start1
);
auto
binary1
=
p
.
add_instruction
(
nary_op
{},
i1
,
c1
.
back
());
auto
start2
=
p
.
add_instruction
(
unary_op
{},
one
);
auto
c2
=
chain
(
p
,
2
,
unary_op
{},
start2
);
auto
i2
=
p
.
add_instruction
(
unary_op
{},
start2
);
auto
binary2
=
p
.
add_instruction
(
nary_op
{},
i2
,
c2
.
back
());
auto
binary3
=
p
.
add_instruction
(
nary_op
{},
binary1
,
binary2
);
p
.
compile
(
schedule_target
{
&
stream
});
EXPECT
(
stream
.
count
(
one
)
==
0
);
EXPECT
(
stream
.
at
(
binary3
)
==
0
);
EXPECT
(
stream
.
at
(
i1
)
==
1
);
for
(
auto
ins
:
c1
)
EXPECT
(
stream
.
at
(
ins
)
==
0
);
EXPECT
(
stream
.
at
(
binary1
)
==
0
);
EXPECT
(
get_wait_for
(
binary1
)
==
get_wait_for
(
stream
[
binary1
],
{
stream
[
c1
.
back
()],
stream
[
i1
]}));
check_conflicts
(
p
,
{
c1
,
{
i1
}});
EXPECT
(
stream
.
at
(
i2
)
==
2
);
for
(
auto
ins
:
c2
)
EXPECT
(
stream
.
at
(
ins
)
==
1
);
EXPECT
(
stream
.
at
(
binary2
)
==
1
);
EXPECT
(
get_wait_for
(
binary2
)
==
get_wait_for
(
stream
[
binary2
],
{
stream
[
c2
.
back
()],
stream
[
i2
]}));
check_conflicts
(
p
,
{
c2
,
{
i2
}});
EXPECT
(
check_conflicts
(
p
,
binary1
,
binary2
));
}
int
main
(
int
argc
,
const
char
*
argv
[])
{
test
::
run
(
argc
,
argv
);
}
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