Skip to content

Conversation

@andrews05
Copy link
Contributor

@andrews05 andrews05 commented Sep 29, 2022

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, and surface now calls block::clear(). I've found this reduces the time taken to initialise a large surface in rleX. (Another possibility would be to use calloc in block construction.)
  • block::copy_from() changed to use memcpy. I've found this reduces the time taken to expand storage in writer.
  • block::increase_size_to() changed to use realloc when the size exceeds what has been allocated. writer now 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.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant