Skip to content
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

Improve .extend() performance #74

Merged
merged 2 commits into from
Oct 8, 2017
Merged

Improve .extend() performance #74

merged 2 commits into from
Oct 8, 2017

Commits on Oct 8, 2017

  1. Configuration menu
    Copy the full SHA
    af8b746 View commit details
    Browse the repository at this point in the history
  2. FEAT: Improve .extend() performance

    We have to use the "SetLenOnDrop" pattern (see stdlib Vec) here.
    
    Keep the length in a separate variable, write it back on scope exit. To
    help the compiler with alias analysis and stuff.  We update the length
    to handle panic in the iteration of the user's iterator, without
    dropping any elements on the floor.
    
    Note: This code was tested without the scope guard using the new option
    -Zmutable-noalias, which had no effect here.
    
    benchmark:
    
    ```
     name                  before.txt ns/iter  after.txt ns/iter  diff ns/iter   diff %
     extend_with_constant  280 (1828 MB/s)     74 (6918 MB/s)             -206  -73.57%
     extend_with_range     1,285 (398 MB/s)    979 (522 MB/s)             -306  -23.81%
     extend_with_slice     29 (17655 MB/s)     14 (36571 MB/s)             -15  -51.72%
    ```
    bluss committed Oct 8, 2017
    Configuration menu
    Copy the full SHA
    793ad30 View commit details
    Browse the repository at this point in the history