Minor performance improvements to PowerElectronics residual evaluation #330
+102
−59
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.
Description
Changed
connection_nodes_to an array to prevent tree searches in hot loops.There are some virtual functions implemented by
CircuitComponentwhich aren't markedfinalorconstand are called in a couple of hot loops insideevaluateResidual(). The optimizer can't inline these functions or perform LICM, so these functions end up being called billions of times during the simulation, which contributes a few percents to the overall runtime of the simulation.I've gone through and marked many of these functions as
finaland addedconstvariants. These functions could probably be marked asconstinEvaluator, but I didn't want to change something that would affect the phasor dynamics module without a thumbs up.I've also manually performed LICM in the hot loops in
evaluateResidual()because I don't want to depend on the optimizer getting this right - this could very easily regress in the future.Closes #324
Proposed changes
Checklist
-Wall -Wpedantic -Wconversion -Wextra.Further comments