fitzgen / bumpalo

A fast bump allocation arena for Rust
https://docs.rs/bumpalo
Apache License 2.0
1.34k stars 109 forks source link

Implement minimum alignment #242

Open CeleritasCelery opened 3 months ago

CeleritasCelery commented 3 months ago

This is still failing for the Allocator API. I have tried to dig into why, but I was not able to narrow it down. It looks like we will change the alignment when reallocating/growing/shrinking, but I have not been able to determine where that is happening. Either way here is the benchmarks so far (everything with >2% difference).

group                                        min_align                               std
-----                                        ---------                               ---
alloc-with/medium                            1.00     20.6±0.16µs 463.2 MElem/sec    1.15     23.7±0.17µs 402.7 MElem/sec
alloc/medium                                 1.00     20.7±0.17µs 459.8 MElem/sec    1.13     23.4±0.26µs 408.3 MElem/sec
alloc/push_str                               1.06   267.0±94.31ns 57.2 GElem/sec     1.00   251.2±76.56ns 60.8 GElem/sec
extend 1024 bytes/extend                     1.00      2.1±0.04µs 461.6 MElem/sec    1.05      2.2±0.24µs 438.4 MElem/sec
extend 1024 bytes/extend_from_slice_copy     1.00     18.7±0.32ns 50.9 GElem/sec     1.06     19.8±2.19ns 48.2 GElem/sec
extend 11 bytes/extend_from_slice            1.04     24.7±1.48ns 423.9 MElem/sec    1.00     23.8±1.37ns 440.1 MElem/sec
extend 128 bytes/extend_from_slice           1.00    259.5±1.79ns 470.4 MElem/sec    1.03    266.9±4.87ns 457.3 MElem/sec
extend 16384 bytes/extend_from_slice_copy    1.00   221.6±43.66ns 68.9 GElem/sec     1.24   274.7±96.49ns 55.5 GElem/sec
extend 331 bytes/extend_from_slice_copy      1.00     10.6±0.20ns 29.0 GElem/sec     1.04     11.0±0.56ns 27.9 GElem/sec
extend 4096 bytes/extend_from_slice_copy     1.00     55.3±3.28ns 69.0 GElem/sec     1.04    57.5±14.89ns 66.3 GElem/sec
extend 64 bytes/extend_from_slice            1.00    129.9±0.86ns 470.0 MElem/sec    1.04    134.6±2.36ns 453.4 MElem/sec
extend 64 bytes/extend_from_slice_copy       1.00      5.2±0.05ns 11.5 GElem/sec     1.05      5.4±0.12ns 11.0 GElem/sec
try-alloc-try-with/big, big                  1.00   335.1±94.25µs 28.5 MElem/sec     1.04   349.2±95.87µs 27.3 MElem/sec
try-alloc-try-with/small, small              1.04     30.8±0.44µs 309.2 MElem/sec    1.00     29.8±0.31µs 320.5 MElem/sec
try-alloc-with/medium                        1.00     20.7±0.27µs 460.3 MElem/sec    1.15     23.7±0.22µs 402.0 MElem/sec
try-alloc/big                                1.00   237.4±11.62µs 40.2 MElem/sec     1.05   248.7±15.99µs 38.3 MElem/sec
try-alloc/medium                             1.00     20.8±0.26µs 457.6 MElem/sec    1.12     23.3±0.18µs 409.5 MElem/sec