task_proxy: cache prereq status for speed #1813
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 adds some caching to speed up task proxy
ready_to_run
.(By the way, all these speed up PRs are coming from a single branch I've been working on for a few weeks. I've decided to split it up into related pieces.)
If a task doesn't have conditional prerequisites, then we can simply cache the 'am I satisfied' result instead of rechecking it every loop. We only normally need to recheck it once one or more relevant outputs have been found in
satisfy_me
.I've moved the conditional expression checking into its own method for neatness and ease of future profiling - I wonder how much it costs if we have lots of 'OR' dependent tasks!
This reduces the cost of calling
ready_to_run
(another dominant cost in a modifiedbusy
suite with lots of waiting tasks) by around two thirds.@hjoliver, @kaday please review.