[libcxx-commits] [libcxx] [libc++] Refactor the sequence container benchmarks (PR #119763)

Louis Dionne via libcxx-commits libcxx-commits at lists.llvm.org
Thu Jan 16 09:54:42 PST 2025


https://github.com/ldionne commented:

Sample output with the latest version of this patch:

```
# | ---------------------------------------------------------------------------------------------------------------------------------------------
# | Benchmark                                                                                                   Time             CPU   Iterations
# | ---------------------------------------------------------------------------------------------------------------------------------------------
# | std::deque<int>::ctor(size)/1024                                                                          157 ns          157 ns      4239906
# | std::deque<int>::ctor(size, value_type) (cheap elements)/1024                                             149 ns          149 ns      4312708
# | std::deque<int>::ctor(Iterator, Iterator) (cheap elements)/1024                                           155 ns          155 ns      4268006
# | std::deque<int>::ctor(Range) (cheap elements)/1024                                                        134 ns          134 ns      3759903
# | std::deque<int>::ctor(const&) (cheap elements)/1024                                                       724 ns          724 ns       973669
# | std::deque<int>::operator=(const&) (cheap elements)/1024                                                 59.9 ns         59.9 ns     11704903
# | std::deque<int>::assign(input-iter, input-iter) (full container) (cheap elements)/1024                    487 ns          487 ns      1436499
# | std::deque<int>::insert(begin) (cheap elements)/1024                                                     11.0 ns         11.0 ns     64027514
# | std::deque<int>::insert(middle) (cheap elements)/1024                                                    53.6 ns         53.6 ns     13210040
# | std::deque<int>::erase(start) (cheap elements)/1024                                                      11.5 ns         11.5 ns     63959651
# | std::deque<int>::erase(middle) (cheap elements)/1024                                                     45.1 ns         45.1 ns     15448480
# | std::deque<int>::push_back() (cheap elements)/1024                                                      0.754 ns        0.754 ns    929171456
# | std::deque<std::string>::ctor(size)/1024                                                                 1121 ns         1121 ns       621079
# | std::deque<std::string>::ctor(size, value_type) (cheap elements)/1024                                    1480 ns         1479 ns       472201
# | std::deque<std::string>::ctor(size, value_type) (expensive elements)/1024                               57387 ns        57309 ns        12082
# | std::deque<std::string>::ctor(Iterator, Iterator) (cheap elements)/1024                                  1400 ns         1399 ns       514615
# | std::deque<std::string>::ctor(Iterator, Iterator) (expensive elements)/1024                             56631 ns        56629 ns        12424
# | std::deque<std::string>::ctor(Range) (cheap elements)/1024                                               1361 ns         1361 ns       506905
# | std::deque<std::string>::ctor(Range) (expensive elements)/1024                                          56507 ns        56496 ns        12438
# | std::deque<std::string>::ctor(const&) (cheap elements)/1024                                              1583 ns         1583 ns       447324
# | std::deque<std::string>::ctor(const&) (expensive elements)/1024                                         57127 ns        57113 ns        12361
# | std::deque<std::string>::operator=(const&) (cheap elements)/1024                                          727 ns          727 ns       961169
# | std::deque<std::string>::operator=(const&) (expensive elements)/1024                                    10100 ns        10099 ns        69139
# | std::deque<std::string>::assign(input-iter, input-iter) (full container) (cheap elements)/1024           1002 ns         1002 ns       698032
# | std::deque<std::string>::assign(input-iter, input-iter) (full container) (expensive elements)/1024      10277 ns        10277 ns        68167
# | std::deque<std::string>::insert(begin) (cheap elements)/1024                                             15.2 ns         15.2 ns     45803425
# | std::deque<std::string>::insert(begin) (expensive elements)/1024                                         72.2 ns         72.2 ns      9785420
# | std::deque<std::string>::insert(middle) (cheap elements)/1024                                             452 ns          452 ns      1550041
# | std::deque<std::string>::insert(middle) (expensive elements)/1024                                         510 ns          510 ns      1379365
# | std::deque<std::string>::erase(start) (cheap elements)/1024                                              11.1 ns         11.1 ns     63154096
# | std::deque<std::string>::erase(start) (expensive elements)/1024                                          60.7 ns         60.7 ns     11413292
# | std::deque<std::string>::erase(middle) (cheap elements)/1024                                              422 ns          422 ns      1678730
# | std::deque<std::string>::erase(middle) (expensive elements)/1024                                          459 ns          459 ns      1520440
# | std::deque<std::string>::push_back() (cheap elements)/1024                                               2.97 ns         2.97 ns    232748032
# | std::deque<std::string>::push_back() (expensive elements)/1024                                           55.1 ns         55.1 ns     12525568

# | ------------------------------------------------------------------------------------------------------------------------------------------------------------
# | Benchmark                                                                                                                  Time             CPU   Iterations
# | ------------------------------------------------------------------------------------------------------------------------------------------------------------
# | std::vector<int>::ctor(size)/1024                                                                                       62.5 ns         62.5 ns      9578675
# | std::vector<int>::ctor(size, value_type) (cheap elements)/1024                                                          61.6 ns         61.6 ns     11241007
# | std::vector<int>::ctor(Iterator, Iterator) (cheap elements)/1024                                                        76.0 ns         76.0 ns      9375460
# | std::vector<int>::ctor(Range) (cheap elements)/1024                                                                     76.3 ns         76.3 ns      9188884
# | std::vector<int>::ctor(const&) (cheap elements)/1024                                                                    75.6 ns         75.6 ns      9316812
# | std::vector<int>::operator=(const&) (cheap elements)/1024                                                               52.9 ns         52.9 ns     13133208
# | std::vector<int>::assign(input-iter, input-iter) (full container) (cheap elements)/1024                                  334 ns          334 ns      2109005
# | std::vector<int>::insert(begin) (cheap elements)/1024                                                                   56.3 ns         56.3 ns     12439579
# | std::vector<int>::insert(middle) (cheap elements)/1024                                                                  29.2 ns         29.2 ns     23941200
# | std::vector<int>::insert(input-iter, input-iter) (insert at front, no realloc) (cheap elements)/1024                    3288 ns         3289 ns       214065
# | std::vector<int>::insert(input-iter, input-iter) (insert at front, half filled) (cheap elements)/1024                   1640 ns         1640 ns       445732
# | std::vector<int>::insert(input-iter, input-iter) (insert at front, near full) (cheap elements)/1024                     1674 ns         1676 ns       422420
# | std::vector<int>::erase(start) (cheap elements)/1024                                                                    61.6 ns         57.8 ns     12691966
# | std::vector<int>::erase(middle) (cheap elements)/1024                                                                   29.7 ns         29.6 ns     23644016
# | std::vector<int>::push_back() (cheap elements)/1024                                                                    0.324 ns        0.324 ns   2161321984
# | std::vector<int>::push_back() (with reserve) (cheap elements)/1024                                                     0.321 ns        0.321 ns   2143887360
# | std::vector<std::string>::ctor(size)/1024                                                                                620 ns          619 ns      1128341
# | std::vector<std::string>::ctor(size, value_type) (cheap elements)/1024                                                   843 ns          843 ns       810917
# | std::vector<std::string>::ctor(size, value_type) (expensive elements)/1024                                             51571 ns        51558 ns        13618
# | std::vector<std::string>::ctor(Iterator, Iterator) (cheap elements)/1024                                                 975 ns          975 ns       730498
# | std::vector<std::string>::ctor(Iterator, Iterator) (expensive elements)/1024                                           52427 ns        52413 ns        13518
# | std::vector<std::string>::ctor(Range) (cheap elements)/1024                                                              960 ns          960 ns       730201
# | std::vector<std::string>::ctor(Range) (expensive elements)/1024                                                        51903 ns        51899 ns        13290
# | std::vector<std::string>::ctor(const&) (cheap elements)/1024                                                             968 ns          968 ns       728196
# | std::vector<std::string>::ctor(const&) (expensive elements)/1024                                                       52606 ns        52523 ns        13495
# | std::vector<std::string>::operator=(const&) (cheap elements)/1024                                                       1289 ns         1288 ns       543757
# | std::vector<std::string>::operator=(const&) (expensive elements)/1024                                                  10153 ns        10153 ns        68801
# | std::vector<std::string>::assign(input-iter, input-iter) (full container) (cheap elements)/1024                          804 ns          804 ns       872296
# | std::vector<std::string>::assign(input-iter, input-iter) (full container) (expensive elements)/1024                    10333 ns        10329 ns        68142
# | std::vector<std::string>::insert(begin) (cheap elements)/1024                                                            806 ns          774 ns       949165
# | std::vector<std::string>::insert(begin) (expensive elements)/1024                                                        810 ns          809 ns       852038
# | std::vector<std::string>::insert(middle) (cheap elements)/1024                                                           372 ns          372 ns      1885131
# | std::vector<std::string>::insert(middle) (expensive elements)/1024                                                       430 ns          430 ns      1642329
# | std::vector<std::string>::insert(input-iter, input-iter) (insert at front, no realloc) (cheap elements)/1024            2633 ns         2635 ns       266754
# | std::vector<std::string>::insert(input-iter, input-iter) (insert at front, no realloc) (expensive elements)/1024       30652 ns        30642 ns        22873
# | std::vector<std::string>::insert(input-iter, input-iter) (insert at front, half filled) (cheap elements)/1024           3683 ns         3686 ns       193378
# | std::vector<std::string>::insert(input-iter, input-iter) (insert at front, half filled) (expensive elements)/1024      67043 ns        67040 ns        10477
# | std::vector<std::string>::insert(input-iter, input-iter) (insert at front, near full) (cheap elements)/1024             5045 ns         5049 ns       139478
# | std::vector<std::string>::insert(input-iter, input-iter) (insert at front, near full) (expensive elements)/1024        79903 ns        79890 ns         8747
# | std::vector<std::string>::erase(start) (cheap elements)/1024                                                             768 ns          767 ns       914782
# | std::vector<std::string>::erase(start) (expensive elements)/1024                                                         825 ns          825 ns       857391
# | std::vector<std::string>::erase(middle) (cheap elements)/1024                                                            387 ns          387 ns      1815847
# | std::vector<std::string>::erase(middle) (expensive elements)/1024                                                        437 ns          437 ns      1542081
# | std::vector<std::string>::push_back() (cheap elements)/1024                                                            0.995 ns        0.994 ns    700705792
# | std::vector<std::string>::push_back() (expensive elements)/1024                                                         50.7 ns         50.7 ns     13876224
# | std::vector<std::string>::push_back() (with reserve) (cheap elements)/1024                                              1.00 ns         1.00 ns    705978368
# | std::vector<std::string>::push_back() (with reserve) (expensive elements)/1024                                          50.4 ns         50.4 ns     13864960
# `-----------------------------

# | --------------------------------------------------------------------------------------------------------------------------------------------
# | Benchmark                                                                                                  Time             CPU   Iterations
# | --------------------------------------------------------------------------------------------------------------------------------------------
# | std::list<int>::ctor(size)/1024                                                                        19568 ns        19557 ns        35065
# | std::list<int>::ctor(size, value_type) (cheap elements)/1024                                           19848 ns        19757 ns        35019
# | std::list<int>::ctor(Iterator, Iterator) (cheap elements)/1024                                         20111 ns        19880 ns        34990
# | std::list<int>::ctor(Range) (cheap elements)/1024                                                      19918 ns        19650 ns        36775
# | std::list<int>::ctor(const&) (cheap elements)/1024                                                     19820 ns        19805 ns        34853
# | std::list<int>::operator=(const&) (cheap elements)/1024                                                 1048 ns         1047 ns       662578
# | std::list<int>::assign(input-iter, input-iter) (full container) (cheap elements)/1024                    950 ns          950 ns       743408
# | std::list<int>::insert(begin) (cheap elements)/1024                                                     16.2 ns         16.2 ns     43460175
# | std::list<int>::erase(start) (cheap elements)/1024                                                      15.7 ns         15.7 ns     44239958
# | std::list<int>::push_back() (cheap elements)/1024                                                       19.5 ns         19.4 ns     35828736
# | std::list<std::string>::ctor(size)/1024                                                                19835 ns        19826 ns        33362
# | std::list<std::string>::ctor(size, value_type) (cheap elements)/1024                                   21075 ns        20823 ns        35994
# | std::list<std::string>::ctor(size, value_type) (expensive elements)/1024                               73713 ns        73696 ns         9104
# | std::list<std::string>::ctor(Iterator, Iterator) (cheap elements)/1024                                 20894 ns        20821 ns        33653
# | std::list<std::string>::ctor(Iterator, Iterator) (expensive elements)/1024                             76080 ns        76065 ns         9481
# | std::list<std::string>::ctor(Range) (cheap elements)/1024                                              20677 ns        20675 ns        33837
# | std::list<std::string>::ctor(Range) (expensive elements)/1024                                          77519 ns        77359 ns         9388
# | std::list<std::string>::ctor(const&) (cheap elements)/1024                                             21527 ns        21519 ns        33310
# | std::list<std::string>::ctor(const&) (expensive elements)/1024                                         78045 ns        78042 ns         8960
# | std::list<std::string>::operator=(const&) (cheap elements)/1024                                         2194 ns         2192 ns       365202
# | std::list<std::string>::operator=(const&) (expensive elements)/1024                                    11145 ns        11141 ns        63478
# | std::list<std::string>::assign(input-iter, input-iter) (full container) (cheap elements)/1024           1040 ns         1040 ns       671566
# | std::list<std::string>::assign(input-iter, input-iter) (full container) (expensive elements)/1024      10672 ns        10672 ns        66023
# | std::list<std::string>::insert(begin) (cheap elements)/1024                                             17.5 ns         17.5 ns     40064332
# | std::list<std::string>::insert(begin) (expensive elements)/1024                                         67.4 ns         67.4 ns     10386219
# | std::list<std::string>::erase(start) (cheap elements)/1024                                              20.6 ns         20.6 ns     35532093
# | std::list<std::string>::erase(start) (expensive elements)/1024                                          67.1 ns         67.1 ns     10526632
# | std::list<std::string>::push_back() (cheap elements)/1024                                               22.0 ns         22.0 ns     30441472
# | std::list<std::string>::push_back() (expensive elements)/1024                                           72.5 ns         72.5 ns      9376768
# `-----------------------------
```

https://github.com/llvm/llvm-project/pull/119763


More information about the libcxx-commits mailing list