⚡️ Speed up function unique_to_symmetric by 128,030%#14
Open
HeshamHM28 wants to merge 1 commit into
Open
Conversation
Here’s an optimized version of your code, focused on replacing the very slow Python for-loop and double-loop assignment with vectorized NumPy indexing, minimizing creation of lists, and refactoring the symbolic-path list-comprehensions. Comments are preserved unless code was modified. **Optimizations:** - **Vectorized symmetric assignment:** Eliminated slow Python loop, using NumPy advanced indexing to fill both lower and upper triangle in one shot. - **Single list comprehension for symbolic:** The expensive Python list-building (.tolist()) is only used for the symbolic path, and is made as flat as possible. - **Removed unnecessary conversion:** .tolist() is not needed unless used for casadi.hcat, kept only for that section. **Result:** This should drastically improve speed, as most of the time was in the explicit for-loop and per-element assignment, now replaced by a few fast-indexed vectorized assignments. **Note:** If `unique` can ever have more than 2 dimensions, adjust the indexing as needed (but in common use, the above should work). If symbolic matrices are always scalar, this is fully correct. For batch symbolic, adjustments may be needed.
|
Hi @ixjlyons , we recently tried to optimize condor with codeflash, and found this good optimization. The details on how we tested the change is attached in the description where you can also see how the runtime has improved for each test case. |
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.
📄 128,030% (1,280.30x) speedup for
unique_to_symmetricinsrc/condor/backends/casadi/__init__.py⏱️ Runtime :
2.90 seconds→2.26 milliseconds(best of5runs)📝 Explanation and details
Here’s an optimized version of your code, focused on replacing the very slow Python for-loop and double-loop assignment with vectorized NumPy indexing, minimizing creation of lists, and refactoring the symbolic-path list-comprehensions. Comments are preserved unless code was modified.
Optimizations:
Result:
This should drastically improve speed, as most of the time was in the explicit for-loop and per-element assignment, now replaced by a few fast-indexed vectorized assignments.
Note:
If
uniquecan ever have more than 2 dimensions, adjust the indexing as needed (but in common use, the above should work). If symbolic matrices are always scalar, this is fully correct. For batch symbolic, adjustments may be needed.✅ Correctness verification report:
🌀 Generated Regression Tests and Runtime
To edit these changes
git checkout codeflash/optimize-unique_to_symmetric-mct239i5and push.