Optimise data transfer in TopologicalSorter
#1159
Merged
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 optimises the creation of the
list
objects returned fromTopologicalSorter.get_ready
(by avoiding a temporaryVec
) and allowsdone
to accept a single index, avoiding the need for the user to allocate many small lists in several real-world uses.This is the overload version of #1157. Happy to change it to a separate function if desired.
Close #1157
With a setup of:
(I was using Qiskit 1.0.2 "ish", but it doesn't matter much) and a timing script:
for this PR, and
sorter.done([node])
(with a list) formain
, I foundmain
took ~510µs and this PR took ~275µs on my machine.That's a common pattern for how we want to use this in Qiskit, though we'll only conditionally be calling
done
on some nodes, which is why the overhead of managing lists really hurts us.