Files
cac3/src
Wladimir J. van der Laan 32987d5aeb Merge #12549: Make prevector::resize() and other prevector operations much faster
5aad635 Use memset() to optimize prevector::resize() (Evan Klitzke)
e46be25 Reduce redundant code of prevector and speed it up (Akio Nakamura)
f0e7aa7 Add new prevector benchmarks. (Evan Klitzke)

Pull request description:

  This branch optimizes various `prevector` operations, especially resizing vectors. While profiling the `loadblk` thread I noticed that a lot of time was being spent in `prevector::resize()` which led to this work. I have some data here indicating that it takes up **37%** of the time in `ReadBlockFromDisk()`: https://monad.io/readblockfromdisk.svg

  This branch improves things significantly. For trivial types, the new results for the prevector benchmark are:

   * `PrevectorClearTrivial` which tests `prevector::clear()` becomes 24.6x faster
   * `PrevectorDestructorTrivial` which tests `prevector::~prevector()` becomes 20.5x faster
   * `PrevectorResizeTrivial` which tests `prevector::resize()` becomes 20.3x faster

  Note that in practice it looks like the prevector is only used to contain `unsigned char` types, which is a trivial type. The benchmarks are testing a bit of an extreme case, but the changes here are motivated by the profiling data for `ReadBlockFromDisk()` I linked to above.

  The pull request here consists of a series of three commits:
   * The first adds new benchmarks but does not change the prevector code.
   * The second is from @AkioNak , and merges some prevector optimizations he submitted in #11988
   * The third optimizes `prevector::resize()` to use `memset()` when the prevector contains trivially constructible types

Tree-SHA512: 28f7cbb91a19f9f43b6a5942781d7eb2e3197389186b666f086b69df12bee37773140f765426d715bfb8ebff79cb27a5f1206d0325b54b4aa65598b50fb18368
2018-03-01 12:13:08 +01:00
..
2018-02-27 11:42:06 -08:00
2018-02-16 08:59:28 -05:00
2018-02-27 11:43:46 +01:00
2018-02-11 10:48:15 +01:00
2017-09-29 16:02:39 +02:00
2018-02-10 09:55:54 -05:00
2018-01-28 13:21:25 +01:00
2018-02-11 10:48:15 +01:00
2018-02-27 11:42:06 -08:00
2018-01-23 13:16:56 -05:00
2018-01-10 20:55:41 -10:00
2018-01-28 13:21:25 +01:00
2018-01-28 13:21:25 +01:00
2017-10-29 21:12:12 +08:00
2018-01-09 08:59:21 -05:00
2018-02-15 16:25:13 +01:00
2018-02-15 16:25:13 +01:00