Repository navigation
Conversation
When an idle immediate command list dispatches a regular command list's command buffer as the primary batch buffer, flushTaskHeapful receives that buffer as an exactly full task stream, with the immediate command stream as optionalEpilogueCmdStream. A pending UC tag update was still written into the task stream, so LinearStream::getSpace aborted. Write it into the epilogue stream instead, as the barrier with post-sync in flushTaskHeapful and the UC tag update in flushBcsTask already do. Related-To: intel#1027 Signed-off-by: Tim Besard <tim.besard@gmail.com>
Contributor
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Fixes #1027.
When
appendCommandListshas nothing to dispatch from an idle in-order immediate command list, and the regular command list's batch buffer is dispatched as primary, the queue passes the regular list's first command buffer toflushTaskHeapfulas an exactly full task stream (firstCmdListStream), with the immediate list's own stream asoptionalEpilogueCmdStream. If the CSR replaced its command buffer during an earlier flush,ucResourceRequiresTagUpdateis set, and the tag update was written into that full task stream, soLinearStream::getSpaceaborts. This crashes the oneAPI.jl test suite sporadically, since it submits kernel launches in batches of regular command lists.This writes the tag update into the epilogue stream when there is one, as the barrier with post-sync in
flushTaskHeapfuland the UC tag update influshBcsTaskalready do. The tag update then follows the task in the same submission. The immediate stream already has room for it:appendCommandListsreserves space there for the epilogue commands, including the barrier.The new ULT fills the task stream, sets
ucResourceRequiresTagUpdateand passes an epilogue stream toflushTask; it aborts without the change and finds the tag update in the epilogue stream with it.flushTaskHeaplessalso writes the tag update into the task stream unconditionally but doesn't handle an epilogue stream at all, so I left it alone; I only have heapful hardware (Tiger Lake) to test with.Tested on 26.35.39758.10, since master doesn't build in our older-glibc environment, for Gen12LP:
linear_stream.h:90abort).