Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork8.1k
Add a fast path for NumPy arrays to Collection.set_verts#16689
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
anntzer commentedMar 5, 2020
This will conflict withhttps://github.com/matplotlib/matplotlib/pull/16617/files#diff-506c6bd01694bddbd8999f2c6e920705. Feel free to pick up the relevant patch in my PR, or I can rebase mine on top of yours, whatever works for you. |
timhoffm left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Could you add a test that both code paths (ndarray and non-ndarray) result in the sameself._paths?
apaszke commentedMar 6, 2020
@anntzer mine is a very local change, so I'm ok with waiting until yours lands. |
anntzer commentedMar 6, 2020
Either way is fine, but I think you should check whether manually constructing the codes array is significantly faster than using |
apaszke commentedMar 6, 2020
apaszke commentedMar 6, 2020 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
@anntzer I've changed the slow path to use |
anntzer commentedMar 6, 2020 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
I guess that could actually be a useful general optimization in path.py? e.g. preallocate the codes for closed paths of up to, say, 16 vertices (I picked 16 because that's the same threshold for caching as in unit_regular_polygon/unit_regular_star). (In which case perhaps implement that optimization first and see whether you can exploit it here.) |
apaszke commentedMar 6, 2020
@anntzer Good point. I'll experiment with that once this lands. |
apaszke commentedMar 16, 2020 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
It would be great if this could get another stamp and land. I've done some more work and it turns out that path creation can be optimized even further! After this PR it takes ~1.4s to create all the paths, but a ~20 LOC change allows to bring this down to ~0.19s. A more hacky version gets this even lower (to ~0.1s), but that is a bit too much for my taste (it requires inlining some function bodies — callsare expensive in Python). With the PRs I've submitted so far (including this one), the rendering for my example (400x400 surface plot on a 2012 MBP) is ~2s on average. With the changes I have stacked on top of this it drops to ~0.7s. The breakdown of this 0.7s is:
I've also done a bit more digging and I think it would be feasible to refactor |
cfcc6a0 to9fa83c3Compareanntzer commentedMar 16, 2020
Anyone can merge after CI passes (ignoring circleci, which shouldn't be affected by this and is getting fixed (hopefully) in#16784.) |
apaszke commentedMar 16, 2020
Not sure what causes the |
anntzer commentedMar 16, 2020
that just looks like flakiness. do you want to squash the last commit? either way is fine. |
This reduces the run time for larger 3D plots by over a second on sometoy examples.
9fa83c3 to95977d6Compareapaszke commentedMar 16, 2020
All commits are now squashed. |
anntzer commentedMar 16, 2020
thanks :) |
apaszke commentedMar 16, 2020
@anntzer Thanks for all the reviews and help with getting this code in! |
anntzer commentedMar 16, 2020
You're welcome; your PRs are great 😁 |
PR Summary
This reduces the run time for larger 3D plots by over a second on a
toy examples linked in#16688. In total#16675,#16688 and this PR lower the run time for that example from ~16s to ~3.3s (4.8x speedup).
PR Checklist