Skip to content

Commit 39a59e4

Browse files
[SYCL] Revert (#17871), enqueue status reset. (#18208)
reverting "[SYCL] reset enqueue status so that buffer can be used after …failure is addressed (#17871)" This PR accidentally introduced a very subtle flaky failure/seg fault. I quickly tried the immediate and obvious fixes but no luck. Given that the original problem is lower priority, I'm reverting the commit before we cement in the instability. Addresses issue: #17965 This reverts commit a827836. Signed-off-by: Chris Perkins <chris.perkins@intel.com>
1 parent 6194b94 commit 39a59e4

File tree

3 files changed

+7
-34
lines changed

3 files changed

+7
-34
lines changed

sycl/source/detail/scheduler/graph_processor.cpp

-7
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,6 @@ bool Scheduler::GraphProcessor::enqueueCommand(
8484
return false;
8585
}
8686

87-
// Reset enqueue status if reattempting
88-
89-
if (!Cmd->isHostTask() &&
90-
Cmd->MEnqueueStatus == EnqueueResultT::SyclEnqueueFailed) {
91-
Cmd->MEnqueueStatus = EnqueueResultT::SyclEnqueueReady;
92-
}
93-
9487
// Recursively enqueue all the implicit + explicit backend level dependencies
9588
// first and exit immediately if any of the commands cannot be enqueued.
9689
for (const EventImplPtr &Event : Cmd->getPreparedDepsEvents()) {

sycl/unittests/scheduler/FailedCommands.cpp

+7-8
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,13 @@ TEST_F(SchedulerTest, FailedDependency) {
2020
queue Queue(context(Plt), default_selector_v);
2121

2222
detail::Requirement MockReq = getMockRequirement();
23-
MockCommand MDepFail(
24-
false, detail::getSyclObjImpl(Queue)); // <-- will fail to enqueue
23+
MockCommand MDep(detail::getSyclObjImpl(Queue));
2524
MockCommand MUser(detail::getSyclObjImpl(Queue));
26-
MDepFail.addUser(&MUser);
25+
MDep.addUser(&MUser);
2726
std::vector<detail::Command *> ToCleanUp;
28-
(void)MUser.addDep(detail::DepDesc{&MDepFail, &MockReq, nullptr}, ToCleanUp);
27+
(void)MUser.addDep(detail::DepDesc{&MDep, &MockReq, nullptr}, ToCleanUp);
2928
MUser.MEnqueueStatus = detail::EnqueueResultT::SyclEnqueueReady;
30-
MDepFail.MEnqueueStatus = detail::EnqueueResultT::SyclEnqueueReady;
29+
MDep.MEnqueueStatus = detail::EnqueueResultT::SyclEnqueueFailed;
3130

3231
MockScheduler MS;
3332
auto Lock = MS.acquireGraphReadLock();
@@ -36,13 +35,13 @@ TEST_F(SchedulerTest, FailedDependency) {
3635
MockScheduler::enqueueCommand(&MUser, Res, detail::NON_BLOCKING);
3736

3837
ASSERT_FALSE(Enqueued) << "Enqueue process must fail\n";
39-
ASSERT_EQ(Res.MCmd, &MDepFail) << "Wrong failed command\n";
38+
ASSERT_EQ(Res.MCmd, &MDep) << "Wrong failed command\n";
4039
ASSERT_EQ(Res.MResult, detail::EnqueueResultT::SyclEnqueueFailed)
4140
<< "Enqueue process must fail\n";
4241
ASSERT_EQ(MUser.MEnqueueStatus, detail::EnqueueResultT::SyclEnqueueReady)
4342
<< "MUser shouldn't be marked as failed\n";
44-
ASSERT_EQ(MDepFail.MEnqueueStatus, detail::EnqueueResultT::SyclEnqueueFailed)
45-
<< "MDepFail should be marked as failed\n";
43+
ASSERT_EQ(MDep.MEnqueueStatus, detail::EnqueueResultT::SyclEnqueueFailed)
44+
<< "MDep should be marked as failed\n";
4645
}
4746

4847
void RunWithFailedCommandsAndCheck(bool SyncExceptionExpected,

sycl/unittests/scheduler/SchedulerTestUtils.hpp

-19
Original file line numberDiff line numberDiff line change
@@ -54,17 +54,6 @@ class MockCommand : public sycl::detail::Command {
5454
EXPECT_CALL(*this, enqueue).Times(AnyNumber());
5555
}
5656

57-
// This Mock will fail to enqueue.
58-
MockCommand(
59-
bool, sycl::detail::QueueImplPtr Queue,
60-
sycl::detail::Command::CommandType Type = sycl::detail::Command::RUN_CG)
61-
: Command{Type, Queue}, MRequirement{std::move(getMockRequirement())} {
62-
using namespace testing;
63-
ON_CALL(*this, enqueue)
64-
.WillByDefault(Invoke(this, &MockCommand::enqueueFail));
65-
EXPECT_CALL(*this, enqueue).Times(AnyNumber());
66-
}
67-
6857
void printDot(std::ostream &) const override {}
6958
void emitInstrumentationData() override {}
7059

@@ -82,14 +71,6 @@ class MockCommand : public sycl::detail::Command {
8271
std::vector<sycl::detail::Command *> &ToCleanUp) {
8372
return sycl::detail::Command::enqueue(EnqueueResult, Blocking, ToCleanUp);
8473
}
85-
bool enqueueFail(sycl::detail::EnqueueResultT &EnqueueResult,
86-
sycl::detail::BlockingT Blocking,
87-
std::vector<sycl::detail::Command *> &ToCleanUp) {
88-
this->MEnqueueStatus = sycl::detail::EnqueueResultT::SyclEnqueueFailed;
89-
EnqueueResult = {sycl::detail::EnqueueResultT::SyclEnqueueFailed, this};
90-
ToCleanUp.push_back(this);
91-
return false;
92-
}
9374

9475
ur_result_t MRetVal = UR_RESULT_SUCCESS;
9576

0 commit comments

Comments
 (0)