cpp11
cpp11 copied to clipboard
Improving string vector performance for push_back and subscript assignment (fix #406)
trafficstars
I added refactors and test that translate into a push_back that is closer to a 1:1 speed ratio than 1:4 compared to direct assignment.
# A tibble: 14 × 6
expression len min mem_alloc n_itr n_gc
<bch:expr> <int> <bch:tm> <bch:byt> <int> <dbl>
1 assign_cpp11_(n = len, 123L) 1 9.25µs 0B 20 0
2 assign_rcpp_(n = len, 123L) 1 8.34µs 0B 20 0
3 assign_cpp11_(n = len, 123L) 10 14.2µs 0B 20 0
4 assign_rcpp_(n = len, 123L) 10 12.13µs 0B 20 0
5 assign_cpp11_(n = len, 123L) 100 48.74µs 848B 20 0
6 assign_rcpp_(n = len, 123L) 100 32.57µs 848B 20 0
7 assign_cpp11_(n = len, 123L) 1000 413.58µs 7.86KB 20 0
8 assign_rcpp_(n = len, 123L) 1000 282.65µs 7.86KB 20 0
9 assign_cpp11_(n = len, 123L) 10000 4.35ms 78.17KB 19 1
10 assign_rcpp_(n = len, 123L) 10000 3.12ms 78.17KB 20 0
11 assign_cpp11_(n = len, 123L) 100000 53.63ms 781.3KB 19 1
12 assign_rcpp_(n = len, 123L) 100000 35.52ms 781.3KB 20 0
13 assign_cpp11_(n = len, 123L) 1000000 590.79ms 21.63MB 12 8
14 assign_rcpp_(n = len, 123L) 1000000 441.09ms 7.63MB 15 5
# A tibble: 3 × 6
expression len min mem_alloc n_itr n_gc
<bch:expr> <int> <bch:tm> <bch:byt> <int> <dbl>
1 grow_strings_cpp11_(len, 123L) 1000000 462ms 23.63MB 7 13
2 grow_strings_rcpp_(len, 123L) 1000000 453ms 7.63MB 16 4
3 grow_strings_manual_(len, 123L) 1000000 438ms 23.63MB 8 12