Block memory changes #69
Open
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.
I've split this out from the RleX PR. Maybe I'm doing something wrong (do I need any compiler settings to make simd work?) but I've found these changes improve performance for me.
block::set(uint8_t)changed to use memset.block::clear()is also changed to take advantage of this, andsurfacenow callsblock::clear(). I've found this reduces the time taken to initialise a large surface in rleX. (Another possibility would be to usecallocin block construction.)block::copy_from()changed to use memcpy. I've found this reduces the time taken to expand storage inwriter.block::increase_size_to()changed to use realloc when the size exceeds what has been allocated.writernow just calls this always instead of constructing a new block. I've found this further reduces the time taken to expand storage. (Not sure if there should be some simd alignment happening in here also, or if there are any other potential pitfalls.)