diff options
| author | blake2-ppc <blake2-ppc> | 2013-07-06 05:42:45 +0200 |
|---|---|---|
| committer | blake2-ppc <blake2-ppc> | 2013-07-06 05:42:45 +0200 |
| commit | 40ce0b7d76fe39c58e4bdf119af33c4d24950077 (patch) | |
| tree | 12af2feccbfcf1d06b6693d60538e49bc2d009fc /src/rt/rust_kernel.cpp | |
| parent | 81933edf92afda59ea41ec3692ab43759285b731 (diff) | |
| download | rust-40ce0b7d76fe39c58e4bdf119af33c4d24950077.tar.gz rust-40ce0b7d76fe39c58e4bdf119af33c4d24950077.zip | |
deque: Speed up deque growth by a lot
Fix some issues with the deque being very slow, keep the same vec around
instead of constructing a new. Move as few elements as possible, so the
self.lo point is not moved after grow.
[o o o o o|o o o]
hi...^ ^.... lo
grows to
[. . . . .|o o o o o o o o|. . .]
^.. lo ^.. hi
If the deque is append-only, it will result in moving no elements on
grow. If the deque is prepend-only, all will be moved each time.
The bench tests added show big improvements:
Timed using `rust build -O --test extra.rs && ./extra --bench deque`
Old version:
test deque::tests::bench_add_back ... bench: 4976 ns/iter (+/- 9)
test deque::tests::bench_add_front ... bench: 4108 ns/iter (+/- 18)
test deque::tests::bench_grow ... bench: 416964 ns/iter (+/- 4197)
test deque::tests::bench_new ... bench: 408 ns/iter (+/- 12)
With this commit:
test deque::tests::bench_add_back ... bench: 12 ns/iter (+/- 0)
test deque::tests::bench_add_front ... bench: 16 ns/iter (+/- 0)
test deque::tests::bench_grow ... bench: 1515 ns/iter (+/- 30)
test deque::tests::bench_new ... bench: 419 ns/iter (+/- 3)
Diffstat (limited to 'src/rt/rust_kernel.cpp')
0 files changed, 0 insertions, 0 deletions
