cpp11 icon indicating copy to clipboard operation
cpp11 copied to clipboard

Improving string vector performance for push_back and subscript assignment (fix #406)

Open pachadotdev opened this issue 10 months ago • 0 comments
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

pachadotdev avatar Jan 01 '25 10:01 pachadotdev