Skip to content

Commit 82d1ac7

Browse files
authored
[SYCL][Graph] Fix issue with unit tests hanging (#17424)
- Re-enable command graph extension tests - Fix test that could incorrectly let buffers be destroyed before the command_graph they were used in Resolves #17168
1 parent c8a040f commit 82d1ac7

File tree

2 files changed

+51
-43
lines changed

2 files changed

+51
-43
lines changed
Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
set(CMAKE_CXX_EXTENSIONS OFF)
22

3-
# https://github.com/intel/llvm/issues/17168
4-
# add_sycl_unittest(CommandGraphExtensionTests OBJECT
5-
# Barrier.cpp
6-
# CommandGraph.cpp
7-
# CommonReferenceSemantics.cpp
8-
# Exceptions.cpp
9-
# InOrderQueue.cpp
10-
# MultiThreaded.cpp
11-
# Queries.cpp
12-
# Regressions.cpp
13-
# Subgraph.cpp
14-
# Update.cpp
15-
# Properties.cpp
16-
# )
3+
add_sycl_unittest(CommandGraphExtensionTests OBJECT
4+
Barrier.cpp
5+
CommandGraph.cpp
6+
CommonReferenceSemantics.cpp
7+
Exceptions.cpp
8+
InOrderQueue.cpp
9+
MultiThreaded.cpp
10+
Queries.cpp
11+
Regressions.cpp
12+
Subgraph.cpp
13+
Update.cpp
14+
Properties.cpp
15+
)

sycl/unittests/Extensions/CommandGraph/Regressions.cpp

Lines changed: 38 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -25,38 +25,47 @@ TEST_F(CommandGraphTest, AccessorModeRegression) {
2525
buffer<int> BufferC{range<1>{16}};
2626
buffer<int> BufferD{range<1>{16}};
2727
buffer<int> BufferE{range<1>{16}};
28-
Graph.begin_recording(Queue);
2928

30-
auto EventA = Queue.submit([&](handler &CGH) {
31-
auto AccA = BufferA.get_access<access_mode::read>(CGH);
32-
auto AccB = BufferB.get_access<access_mode::read>(CGH);
33-
auto AccC = BufferC.get_access<access_mode::write>(CGH);
34-
CGH.single_task<TestKernel<>>([]() {});
35-
});
36-
auto EventB = Queue.submit([&](handler &CGH) {
37-
auto AccA = BufferA.get_access<access_mode::read>(CGH);
38-
auto AccB = BufferB.get_access<access_mode::read>(CGH);
39-
auto AccD = BufferD.get_access<access_mode::write>(CGH);
40-
CGH.single_task<TestKernel<>>([]() {});
41-
});
42-
auto EventC = Queue.submit([&](handler &CGH) {
43-
auto AccA = BufferA.get_access<access_mode::read>(CGH);
44-
auto AccB = BufferB.get_access<access_mode::read>(CGH);
45-
auto AccE = BufferE.get_access<access_mode::write>(CGH);
46-
CGH.single_task<TestKernel<>>([]() {});
47-
});
29+
{
30+
// Buffers must outlive graph
31+
experimental::command_graph ScopedGraph{
32+
Queue.get_context(),
33+
Dev,
34+
{experimental::property::graph::assume_buffer_outlives_graph{}}};
4835

49-
Graph.end_recording(Queue);
36+
ScopedGraph.begin_recording(Queue);
37+
38+
auto EventA = Queue.submit([&](handler &CGH) {
39+
auto AccA = BufferA.get_access<access_mode::read>(CGH);
40+
auto AccB = BufferB.get_access<access_mode::read>(CGH);
41+
auto AccC = BufferC.get_access<access_mode::write>(CGH);
42+
CGH.single_task<TestKernel<>>([]() {});
43+
});
44+
auto EventB = Queue.submit([&](handler &CGH) {
45+
auto AccA = BufferA.get_access<access_mode::read>(CGH);
46+
auto AccB = BufferB.get_access<access_mode::read>(CGH);
47+
auto AccD = BufferD.get_access<access_mode::write>(CGH);
48+
CGH.single_task<TestKernel<>>([]() {});
49+
});
50+
auto EventC = Queue.submit([&](handler &CGH) {
51+
auto AccA = BufferA.get_access<access_mode::read>(CGH);
52+
auto AccB = BufferB.get_access<access_mode::read>(CGH);
53+
auto AccE = BufferE.get_access<access_mode::write>(CGH);
54+
CGH.single_task<TestKernel<>>([]() {});
55+
});
56+
57+
ScopedGraph.end_recording(Queue);
5058

51-
experimental::node NodeA = experimental::node::get_node_from_event(EventA);
52-
EXPECT_EQ(NodeA.get_predecessors().size(), 0ul);
53-
EXPECT_EQ(NodeA.get_successors().size(), 0ul);
54-
experimental::node NodeB = experimental::node::get_node_from_event(EventB);
55-
EXPECT_EQ(NodeB.get_predecessors().size(), 0ul);
56-
EXPECT_EQ(NodeB.get_successors().size(), 0ul);
57-
experimental::node NodeC = experimental::node::get_node_from_event(EventC);
58-
EXPECT_EQ(NodeC.get_predecessors().size(), 0ul);
59-
EXPECT_EQ(NodeC.get_successors().size(), 0ul);
59+
experimental::node NodeA = experimental::node::get_node_from_event(EventA);
60+
EXPECT_EQ(NodeA.get_predecessors().size(), 0ul);
61+
EXPECT_EQ(NodeA.get_successors().size(), 0ul);
62+
experimental::node NodeB = experimental::node::get_node_from_event(EventB);
63+
EXPECT_EQ(NodeB.get_predecessors().size(), 0ul);
64+
EXPECT_EQ(NodeB.get_successors().size(), 0ul);
65+
experimental::node NodeC = experimental::node::get_node_from_event(EventC);
66+
EXPECT_EQ(NodeC.get_predecessors().size(), 0ul);
67+
EXPECT_EQ(NodeC.get_successors().size(), 0ul);
68+
}
6069
}
6170

6271
TEST_F(CommandGraphTest, QueueRecordBarrierMultipleGraph) {

0 commit comments

Comments
 (0)