Closed fknorr closed 1 month ago
Check-perf-impact results: (7b849de16ff11660b98988ab0b032db7)
:question: No new benchmark data submitted. :question:
Please re-run the microbenchmarks and include the results if your commit could potentially affect performance.
This pull request's base commit is no longer the HEAD commit of its target branch. This means it includes changes from outside the original pull request, including, potentially, unrelated coverage changes.
Totals | |
---|---|
Change from base Build 9945915519: | -0.002% |
Covered Lines: | 7231 |
Relevant Lines: | 7507 |
Fixes a (very rarely triggered) assertion seen in this CI run of the IDAG branch.
The bug condition manifests as follows:
k1
is submitted.k1
is assigned.lane.last_incomplete_submission
is set tok1
.k2
is submitted on the same device ask1
and is marked asconditional_eager_assignable
because its only predecessor isk1
.k3
is submitted, also with the single predecessork1
but with a higher piority thank2
. It is marked asconditional_eager_assignable
in the same fashion.k3
is eagerly assigned.lane.last_incomplete_submission
is set tok3
.async_events
fork1
andk3
in exactly this order, and both kernels complete in-between those two event queries, soout_of_order_engine
is only notified aboutk3
's completion. This out-of-order completion is explicitly permitted by the engine.lane.last_incomplete_submission
is set tonullptr
.k2
, which expectslane.last_incomplete_submission
to bek1
(success) ork3
(abort), but findsnullptr
.pop_assignable
treats this condition as success, butassign_one
asserts against it.Technically,
k2
is transitively unconditional assignable because we know vianullptr
that there is no ongoing work on our lane. However upgrading this situation tounconditional_assignable_state
while still waiting for the call tocomplete(k1)
would open a whole new can of worms for this incredibly niche situation, so we abort conditional assignment in this case.