-
Notifications
You must be signed in to change notification settings - Fork 76
avoid allocations by avoiding **kwargs #43
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 our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Why is the struct version slower with this change? |
That is the question! |
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.
Looks great! Definitely reduces the number of allocations in the test.
For those only following this conversation. The struct version is slower because there no longer single block allocations between tuple allocations, which are 2+ blocks. 2+ block allocations can get very expensive when no single block allocations occur because only single block allocations advance the start location of the allocation scan. |
Updating https://github.com/adafruit/Adafruit_CircuitPython_ADS1x15 to 2.1.3 from 2.1.2: > Merge pull request adafruit/Adafruit_CircuitPython_ADS1x15#52 from ares-est/master Updating https://github.com/adafruit/Adafruit_CircuitPython_CLUE to 2.0.3 from 2.0.1: > Merge pull request adafruit/Adafruit_CircuitPython_CLUE#17 from kattni/slideshow-fix > Merge pull request adafruit/Adafruit_CircuitPython_CLUE#14 from dherrada/master > Merge pull request adafruit/Adafruit_CircuitPython_CLUE#16 from kattni/slideshow-example > Merge pull request adafruit/Adafruit_CircuitPython_CLUE#15 from kattni/add-display-object > Merge pull request adafruit/Adafruit_CircuitPython_CLUE#12 from kattni/add-space > Merge pull request adafruit/Adafruit_CircuitPython_CLUE#11 from kattni/variable-change > Merge pull request adafruit/Adafruit_CircuitPython_CLUE#10 from kattni/level-bubble-fix > Merge pull request adafruit/Adafruit_CircuitPython_CLUE#9 from kattni/color-fix > Merge pull request adafruit/Adafruit_CircuitPython_CLUE#8 from kattni/example-update Updating https://github.com/adafruit/Adafruit_CircuitPython_Fingerprint to 1.1.6 from 1.1.5: > Merge pull request adafruit/Adafruit_CircuitPython_Fingerprint#11 from stitchesnburns/stitchesnburns-patch-1 Updating https://github.com/adafruit/Adafruit_CircuitPython_LIS2MDL to 2.0.2 from 2.0.1: > Update README.rst Updating https://github.com/adafruit/Adafruit_CircuitPython_LSM303_Accel to 1.0.3 from 1.0.2: > Merge pull request adafruit/Adafruit_CircuitPython_LSM303_Accel#5 from BiffoBear/rename-example-file > Merge pull request adafruit/Adafruit_CircuitPython_LSM303_Accel#4 from FoamyGuy/master Updating https://github.com/adafruit/Adafruit_CircuitPython_LSM303DLH_Mag to 1.0.4 from 1.0.3: > Merge pull request adafruit/Adafruit_CircuitPython_LSM303DLH_Mag#5 from FoamyGuy/master Updating https://github.com/adafruit/Adafruit_CircuitPython_MCP230xx to 2.2.3 from 2.2.2: > Merge pull request adafruit/Adafruit_CircuitPython_MCP230xx#21 from foozmeat/master Updating https://github.com/adafruit/Adafruit_CircuitPython_MPU6050 to 1.0.4 from 1.0.3: > Merge pull request adafruit/Adafruit_CircuitPython_MPU6050#5 from FoamyGuy/master Updating https://github.com/adafruit/Adafruit_CircuitPython_PyPortal to 3.1.10 from 3.1.9: > Merge pull request adafruit/Adafruit_CircuitPython_PyPortal#65 from cogliano/master Updating https://github.com/adafruit/Adafruit_CircuitPython_RGB_Display to 3.8.9 from 3.8.8: > Merge pull request adafruit/Adafruit_CircuitPython_RGB_Display#70 from makermelissa/master Updating https://github.com/adafruit/Adafruit_CircuitPython_BluefruitConnect to 1.0.11 from 1.0.10: > Merge pull request adafruit/Adafruit_CircuitPython_BluefruitConnect#17 from caternuson/controller_example Updating https://github.com/adafruit/Adafruit_CircuitPython_BusDevice to 4.2.0 from 4.1.4: > Merge pull request adafruit/Adafruit_CircuitPython_BusDevice#43 from dhalbert/avoid-alloc Updating https://github.com/adafruit/Adafruit_CircuitPython_Gizmo to 1.1.3 from 1.1.2: > Merge pull request adafruit/Adafruit_CircuitPython_Gizmo#10 from FoamyGuy/master Updating https://github.com/adafruit/Adafruit_CircuitPython_Bundle/circuitpython_library_list.md to NA from NA: > Added the following libraries: Adafruit_CircuitPython_LPS2X
*args
and**kwargs
, which allocate storage.hasattr()
once and remember its value.There is a remarkable timing peculiarity when doing this right now, using this test program, running on a CPB:
Test program output _ before_ applying this PR is below. @tannewt Notice the bizarre result for the
400
and1000
cases above, where simply reading the register is slower than reading the register and then unpacking the result. This may be ameliorated by your proposed heap allocation improvements.Test program output with this PR: