[SYCL] Additional enqueue for host-tasks #2553
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Let's have this part of dependency graph:
EC1andEC2are of helper typeEmptyCommand. Both are blocked.C1andC2are of any other type which represents some meaningful operation i.e. the one that actually does something useful, likeExecCGCommandwith a host task orUpdateHostReqCommandfor host accessor.This part of graph is result of two submissions: the first one adds
EC1 -> C1and the second addsEC2 -> C2 -> EC1.The submission process in both cases adds the corresponding
Cxcommand in first place and then adds the empty commandECx. WhenCxis added to the graph it's also added to list of leaves for corresponding memory record. Now, whenECxis added to graph it removes correspondingCxfrom list of leaves.ECxis added to the list instead ofCx. Blocked state ofECxprevents it from being enqueued.Upon the second submission,
C2isn't going to be enqueued right away as it depends on blockedEC1.When
C1finishes (whether it is a host task or host accessor's update command) SYCL RT will unblockEC1and trigger enqueue process for leaves of memory recordsC1was depending by. Eventually, RT will enqueue theEC1which will set its event into complete state. Though,EC2isn't going to be enqueued due to it's blocked state. Neither does its dependencies.PR with test: #2540
PR with comment fix: #2541