Improve performance of OutputRecordingPass when processing QIR simulation results#3235
Merged
Conversation
…lation results This change updates the pattern used to process results in the `OutputRecordingPass` to avoid the perf hit from running Python `eval` for each result. This led to high overhead as each input needed to be parsed and processed by a fresh Python environment. Instead the code uses `eval` once to create a lambda for processing and then is able to invoke it directly on each result, speeding up processing.
billti
approved these changes
May 19, 2026
pull Bot
pushed a commit
to Mattlk13/qsharp
that referenced
this pull request
May 19, 2026
The change in microsoft#3235 introduced a bug if the underlying simulation failed, which was caught by GPU tests post-merge. This changes the pattern to account for situations where the shot output might be empty.
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.
This change updates the pattern used to process results in the
OutputRecordingPassto avoid the perf hit from running Pythonevalfor each result. This led to high overhead as each input needed to be parsed and processed by a fresh Python environment. Instead the code usesevalonce to create a lambda for processing and then is able to invoke it directly on each result, speeding up processing.