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 little PR shaves off about 33% CPU usage when dithering, while the effects on the binary size are next to none. This is true both on my Raspberry Pi 3B+ (from about 15 to 10% CPU) and my Mac (from 3 to 1%).
The trick is taking cue from
SmallRng
instead ofThreadRng
, then sprinkling some 64-bit optimisations on top by hand-picking the fastest generator that still has high enough linear complexity for 64-bit floats.While at it, bump the
rand_distr
crate, even though it doesn't contribute to the speed-up.Unless there are any objections, I intend to merge this before releasing
0.3.1
.