d643b9a98888bdc746e8b19621ab19208e79fdac
111 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
d643b9a988 |
decompress: add hint to remove extra AND
Clang doesn't realize the load with free zero-extension, and emits another extra 'and xn, xm, 0xff' to calc offset. With this change ,this extra op is removed, and consistent 1.7% performance uplift is observed. Signed-off-by: Jun He <jun.he@arm.com> Change-Id: Ica4617852c4b93eadc6c5c551dc3961ffbadb8f0 |
||
|
|
f2db8f77ce |
Move the extract masks variable out in zippy. I see a consistent 1.5-2% improvement for ARM. Probably because ARM has more relaxed address computation than x86 https://www.godbolt.org/z/bfM1ezx41. I don't think this is a compiler bug or it can do something about it
PiperOrigin-RevId: 387569896 |
||
|
|
c8f7641646 |
Remove inline assembly as the bug in clang was fixed
PiperOrigin-RevId: 387356237 |
||
|
|
9cc3689b21 |
Optimize memset to pure SIMD because compilers generate consistently bad code. clang for ARM and gcc for x86 https://gcc.godbolt.org/z/oxeGG7aEx
PiperOrigin-RevId: 383467656 |
||
|
|
b4888f7616 |
Optimize tag extraction for ARM with conditional increment instruction generation (csinc). For codegen see https://gcc.godbolt.org/z/a8z9j95Pv
PiperOrigin-RevId: 382688740 |
||
|
|
b3fb0b5b4b |
Enable vector byte shuffle optimizations on ARM NEON
The SSSE3 intrinsics we use have their direct analogues in NEON, so making this optimization portable requires a very thin translation layer. PiperOrigin-RevId: 381280165 |
||
|
|
5f913be04e |
Fix unused local variable warnings.
This will not change the compilation output. PiperOrigin-RevId: 347525836 |
||
|
|
8995ffabb9 |
Replace #pragma nounroll with equivalent used elsewhere.
PiperOrigin-RevId: 347341130 |
||
|
|
d1daa83044 |
Remove inline qualifier from static variables.
This feature requires C++17. Fortunately, inline is useful for header declarations, which may be included in multiple compilation units. The declarations modified by this CL occur in a single compilation unit. PiperOrigin-RevId: 347338760 |
||
|
|
3b571656fa |
1) Improve the lookup table data to require less instructions to extract the necessary data. We now store len - offset in a signed int16, this happens to remove masking offset in the calculations and the calculations that need to be done precisely give the flags that we need for testing correctness.
2) Replace offset extraction with a lookup mask. This is less uops and is needed because we need to special case type 3 to always return 0 as to properly trigger the fallback. 3) Unroll the loop twice, this removes some loop-condition checks AND it improves the generated assembly. The loop variables tend to end up in a different register requiring mov's having two consecutive copies allows the elision of the mov's. PiperOrigin-RevId: 346663328 |
||
|
|
a9730ed505 |
Optimize zippy decompression by making IncrementalCopy faster.
When SSSE3 is available: - Use PSHUFB (_mm_shuffle_epi8) to handle pattern size 1 to 15 (previously it handled size 1 to 7). - This enables us to do 16 byte copies instead of 8 bytes copies because we know that the pattern size >= 16. - Use shuffle-reshuffle strategy to generate the next pattern after loading the initial pattern. This enables us to write 4 conditionals (similar to when pattern size >= 16) which would allow FDO to layout the code with respect to actual probabilities of each length. - The PSHUFB masks are now generated programmatically at compile-time. When SSSE3 is unavailable: - No change. In both cases: - assert(op < op_limit) in IncrementalCopy so that we can check 'op_limit <= buf_limit - 15' instead of 'op_limit <= buf_limit - 16'. All existing call sites of IncrementalCopy guarantee this. 'bin' case is notably >20% faster because it has many repeated character patterns (i.e. pattern_size = 1). PiperOrigin-RevId: 346454471 |
||
|
|
56c2c247d0 |
Internal change
PiperOrigin-RevId: 345360683 |
||
|
|
a94be58e65 |
Optimize zippy decompression by making IncrementalCopy faster.
When SSSE3 is available: - Use PSHUFB (_mm_shuffle_epi8) to handle pattern size 1 to 15 (previously it handled size 1 to 7). - This enables us to do 16 byte copies instead of 8 bytes copies because we know that the pattern size >= 16. - Use shuffle-reshuffle strategy to generate the next pattern after loading the initial pattern. This enables us to write 4 conditionals (similar to when pattern size >= 16) which would allow FDO to layout the code with respect to actual probabilities of each length. - The PSHUFB masks are now generated programmatically at compile-time. When SSSE3 is unavailable: - No change. In both cases: - assert(op < op_limit) in IncrementalCopy so that we can check 'op_limit <= buf_limit - 15' instead of 'op_limit <= buf_limit - 16'. All existing call sites of IncrementalCopy guarantee this. 'bin' case is notably >20% faster because it has many repeated character patterns (i.e. pattern_size = 1). PiperOrigin-RevId: 345340892 |
||
|
|
01a566f825 |
Fix opensource version
PiperOrigin-RevId: 343272548 |
||
|
|
719bed0ae2 |
Bug fix. Error on 0 offset copies.
PiperOrigin-RevId: 342447553 |
||
|
|
289c8a3c0a |
Make zippy decompression branchless
PiperOrigin-RevId: 342423961 |
||
|
|
3bfa265a04 |
Revert zippy optimization that causes heap buffer overflows.
PiperOrigin-RevId: 342283314 |
||
|
|
4d2dc9dcbb |
Optimize zippy unzipping by upto >10% by making IncrementalCopy faster.
When SSSE3 is available: - Use PSHUFB (_mm_shuffle_epi8) to handle pattern size 1 to 15 (previously it handled size 1 to 7). - This enables us to do 16 byte copies instead of 8 bytes copies because we know that the pattern size >= 16. - Use shuffle-reshuffle strategy to generate the next pattern after loading the initial pattern. This enables us to write 4 conditionals (similar to when pattern size >= 16) which would allow FDO to layout the code with respect to actual probabilities of each length. - The PSHUFB masks are now generated programmatically at compile-time. When SSSE3 is unavailable: - No change. In both cases: - assert(op < op_limit) in IncrementalCopy so that we can check 'op_limit <= buf_limit - 15' instead of 'op_limit <= buf_limit - 16'. All existing call sites of IncrementalCopy guarantee this. PiperOrigin-RevId: 342267037 |
||
|
|
6835abd953 |
Change hash function for Compress.
((a*b)>>18) & mask has higher throughput than (a*b)>>shift, and produces the same results when the hash table size is 2**14. In other cases, the hash function is still good, but it's not as necessary for that to be the case as the input is small anyway. This speeds up in encoding, especially in cases where hashing is a significant part of the encoding critical path (small or uncompressible files). PiperOrigin-RevId: 341498741 |
||
|
|
1ce58af28e |
Fix the use of op + len when op is nullptr and len is non-zero.
See https://reviews.llvm.org/D67122 for some discussion of why this can matter. I don't think this should have any noticeable effect on performance. PiperOrigin-RevId: 340255083 |
||
|
|
0b990db2b8 |
Run clang-format
PiperOrigin-RevId: 339897712 |
||
|
|
4dd277fed4 |
Replace the division with a constant table in IncrementalCopy
PiperOrigin-RevId: 320686580 |
||
|
|
f16eda3466 |
Correct uninitialized variable.
PiperOrigin-RevId: 312741918 |
||
|
|
c98344f626 |
Fix Clang/GCC compilation warnings.
This makes it easier to adopt snappy in other projects. PiperOrigin-RevId: 309958249 |
||
|
|
113cd97ab3 |
Tighten types on a few for loops.
* Replace post-increment with pre-increment in for loops. * Replace unsigned int counters with precise types, like uint8_t. * Switch to C++11 iterating loops when possible. PiperOrigin-RevId: 309724233 |
||
|
|
5417da69b7 |
Switch from C headers to C++ headers.
This CL makes the following substitutions. * assert.h -> cassert * math.h -> cmath * stdarg.h -> cstdarg * stdio.h -> cstdio * stdlib.h -> cstdlib * string.h -> cstring stddef.h and stdint.h are not migrated to C++ headers. PiperOrigin-RevId: 309074805 |
||
|
|
a4cdb5d133 |
Introduce SNAPPY_ATTRIBUTE_ALWAYS_INLINE.
An internal CL started using ABSL_ATTRIBUTE_ALWAYS_INLINE from Abseil. This CL introduces equivalent functionality as SNAPPY_ALWAYS_INLINE. PiperOrigin-RevId: 306289650 |
||
|
|
231b8be076 |
Migrate to standard integral types.
The following changes are done via find/replace. * int8 -> int8_t * int16 -> int16_t * int32 -> int32_t * int64 -> int64_t The aliases were removed from snappy-stubs-public.h. PiperOrigin-RevId: 306141557 |
||
|
|
14bef66290 |
Modernize memcpy() and memmove() usage.
This CL replaces memcpy() with std::memcpy() and memmove() with std::memmove(), and #includes <cstring> in files that use either function. PiperOrigin-RevId: 306067788 |
||
|
|
d674348a0c |
Improve zippy with 5-10%.
BM_ZCord/0 [html ] 1.26GB/s ± 0% 1.35GB/s ± 0% +7.90% (p=0.008 n=5+5) BM_ZCord/1 [urls ] 535MB/s ± 0% 562MB/s ± 0% +5.05% (p=0.008 n=5+5) BM_ZCord/2 [jpg ] 10.2GB/s ± 1% 10.2GB/s ± 0% ~ (p=0.310 n=5+5) BM_ZCord/3 [jpg_200] 841MB/s ± 1% 846MB/s ± 1% ~ (p=0.421 n=5+5) BM_ZCord/4 [pdf ] 6.77GB/s ± 1% 7.06GB/s ± 1% +4.28% (p=0.008 n=5+5) BM_ZCord/5 [html4 ] 1.00GB/s ± 0% 1.08GB/s ± 0% +7.94% (p=0.008 n=5+5) BM_ZCord/6 [txt1 ] 391MB/s ± 0% 417MB/s ± 0% +6.71% (p=0.008 n=5+5) BM_ZCord/7 [txt2 ] 363MB/s ± 0% 388MB/s ± 0% +6.73% (p=0.016 n=5+4) BM_ZCord/8 [txt3 ] 400MB/s ± 0% 426MB/s ± 0% +6.55% (p=0.008 n=5+5) BM_ZCord/9 [txt4 ] 328MB/s ± 0% 350MB/s ± 0% +6.66% (p=0.008 n=5+5) BM_ZCord/10 [pb ] 1.67GB/s ± 1% 1.80GB/s ± 0% +7.52% (p=0.008 n=5+5) 1) A key bottleneck in the data dependency chain is figuring out how many bytes are matched and loading the data for next hash value. The load-to-use latency is 5 cycles, in previous cl/303353110 we removed the load in lieu of "shrd" to align previous loads. Unfortunately "shrd" itself has a latency of 4 cycles, we'd prefer "shrx" which takes 1 cycle for variable shifts. 2)Maximally use data already computed. The above trick calculates 5 bytes of useful data. So in case we need to search for new match we can use this for the first search (which is one byte further). PiperOrigin-RevId: 303875535 |
||
|
|
4dfcad9f4e |
assertion failure on darwin_x86_64, have to investigage
PiperOrigin-RevId: 303428229 |
||
|
|
e19178748f |
assertion failure on darwin_x86_64, have to investigage
PiperOrigin-RevId: 303346402 |
||
|
|
0faf56378e |
This cl does two things
1) It shaves of a few cycles from the data dependency chain. By using "shrd" instead of a load. 2) The important loop is finding small copies (4-12) which are either "copy 1", or "copy 2" depending if the offset fits <2048. It turns out that this is a branch that is mispredicted often. Due to the long dependency chain the CPU is running with IPC~1 anyway so we can freely add instructions to instead emit copies branchfree. This reduces the branch misspredicts from 15% to 11% (for BM_ZFlat/6 txt1) and from 5.6% to 4% (for BM_ZFlat/10 or pb). PiperOrigin-RevId: 303328967 |
||
|
|
0c7ed08a25 |
The result on protobuf benchmark is around 19%. Results vary by their propensity for compression. As the frequency of finding matches influences the amount of branch misspredicts and the amount of hashing.
Two ideas 1) The code uses "heuristic match skipping" has a quadratic interpolation. However for the first 32 bytes it's just every byte. Special case 16 bytes. This removes a lot of code. 2) Load 64 bit integers and shift instead of reload. The hashing loop has a very long chain data = Load32(ip) -> hash = Hash(data) -> offset = table[hash] -> copy_data = Load32(base_ip + offset) followed by a compare between data and copy_data. This chain is around 20 cycles. It's unreasonable for the branch predictor to be able to predict when it's a match (that is completely driven by the content of the data). So when it's a miss this chain is on the critical path. By loading 64 bits and shifting we can effectively remove the first load. PiperOrigin-RevId: 302893821 |
||
|
|
3c77e01459 |
1) Make the output pointer a local variable such it doesn't need a load add store on it's loop carried dependency chain.
2) Reduce the input pointer loop carried dependency chain from 7 cycles to 4 cycles by using pre-loading. This is a very subtle point. 3) Just brutally copy 64 bytes which removes a difficult to predict branch from the inner most loop. There is enough bandwidth to do so in the intrinsic cycles of the loop. 4) Implement limit pointers that include the slop region. This removes unnecessary instructions from the hot path. 5) It seems the removal of the difficult to predict branch has removed the code sensitivity to alignment, so remove the asm nop's. PiperOrigin-RevId: 294692928 |
||
|
|
9eabb7baba |
Cut a load from the critical dependency chain of the input pointer by speculating the uncommon case of COPY_4 is not happening.
PiperOrigin-RevId: 293803653 |
||
|
|
cddd9c0875 |
Improve comments in IncrementalCopy, add an assert.
PiperOrigin-RevId: 292506754 |
||
|
|
b5477a8457 |
Optimize IncrementalCopy: There are between 1 and 4 copy iterations. Allow FDO to work with full knowledge of the probabilities for each branch.
On skylake, this improves protobuf and html decompression speed by 15% and 9% respectively, and the rest by ~2%. On haswell, this improves protobuf and html decompression speed by 23% and 16% respectively, and the rest by ~3%. PiperOrigin-RevId: 289090401 |
||
|
|
62363d9a79 |
Fully qualify std::string.
This is in preparation for removing the snappy::string alias of std::string. PiperOrigin-RevId: 271383199 |
||
|
|
4c7f2d5dfb |
Add BM_ZFlatAll, BM_ZFlatIncreasingTableSize benchmarks to see how good zippy performs when it is processing different data one after the other.
PiperOrigin-RevId: 257518137 |
||
|
|
c76b053449 |
Sync TODO and comment processing with external repo.
Copybara transforms code slightly different than MOE. One example is the TODO username stripping where Copybara produces different results than MOE did. This change moves the Copybara versions of comments to the public repository. Note: These changes didn't originate in cl/247950252. PiperOrigin-RevId: 247950252 |
||
|
|
02cf187555 |
Remove MSan exemption for _bzhi_u32, since LLVM now handles it correctly.
This cleans up a TODO from cl/225463783 and cl/225655713. PiperOrigin-RevId: 241933185 |
||
|
|
c197d686a9 |
Optimize snappy compression by about 2.2%.
'jpg_200' is notably optimized by ~8%. name old time/op new time/op delta BM_UFlat/0 [html ] 41.8µs ± 0% 41.9µs ± 0% +0.33% (p=0.016 n=5+5) BM_UFlat/1 [urls ] 590µs ± 0% 590µs ± 0% ~ (p=1.000 n=5+5) BM_UFlat/2 [jpg ] 7.14µs ± 1% 7.12µs ± 1% ~ (p=0.310 n=5+5) BM_UFlat/3 [jpg_200 ] 129ns ± 0% 129ns ± 0% ~ (p=0.167 n=5+5) BM_UFlat/4 [pdf ] 8.21µs ± 0% 8.20µs ± 0% ~ (p=0.310 n=5+5) BM_UFlat/5 [html4 ] 220µs ± 1% 220µs ± 0% ~ (p=0.421 n=5+5) BM_UFlat/6 [txt1 ] 193µs ± 0% 193µs ± 0% ~ (p=0.841 n=5+5) BM_UFlat/7 [txt2 ] 171µs ± 0% 171µs ± 0% ~ (p=0.056 n=5+5) BM_UFlat/8 [txt3 ] 512µs ± 0% 511µs ± 0% ~ (p=0.310 n=5+5) BM_UFlat/9 [txt4 ] 716µs ± 0% 716µs ± 0% ~ (p=1.000 n=5+5) BM_UFlat/10 [pb ] 38.8µs ± 1% 38.8µs ± 0% ~ (p=1.000 n=5+5) BM_UFlat/11 [gaviota ] 190µs ± 0% 190µs ± 0% ~ (p=0.841 n=5+5) BM_UFlat/12 [cp ] 14.4µs ± 1% 14.4µs ± 1% ~ (p=0.151 n=5+5) BM_UFlat/13 [c ] 7.33µs ± 0% 7.32µs ± 0% ~ (p=0.690 n=5+5) BM_UFlat/14 [lsp ] 2.30µs ± 0% 2.31µs ± 1% ~ (p=0.548 n=5+5) BM_UFlat/15 [xls ] 984µs ± 0% 984µs ± 0% ~ (p=1.000 n=5+5) BM_UFlat/16 [xls_200 ] 213ns ± 0% 213ns ± 0% ~ (p=0.310 n=5+5) BM_UFlat/17 [bin ] 277µs ± 0% 278µs ± 0% ~ (p=0.690 n=5+5) BM_UFlat/18 [bin_200 ] 101ns ± 0% 102ns ± 0% ~ (p=0.190 n=5+4) BM_UFlat/19 [sum ] 29.6µs ± 0% 29.6µs ± 0% ~ (p=0.310 n=5+5) BM_UFlat/20 [man ] 2.98µs ± 1% 2.98µs ± 0% ~ (p=1.000 n=5+5) BM_UValidate/0 [html ] 33.5µs ± 0% 33.6µs ± 0% ~ (p=0.310 n=5+5) BM_UValidate/1 [urls ] 443µs ± 0% 443µs ± 0% ~ (p=0.841 n=5+5) BM_UValidate/2 [jpg ] 146ns ± 0% 146ns ± 0% ~ (p=0.222 n=5+5) BM_UValidate/3 [jpg_200 ] 95.6ns ± 0% 95.5ns ± 0% ~ (p=0.421 n=5+5) BM_UValidate/4 [pdf ] 2.92µs ± 0% 2.92µs ± 0% ~ (p=0.841 n=5+5) BM_UIOVec/0 [html ] 122µs ± 0% 122µs ± 0% ~ (p=0.548 n=5+5) BM_UIOVec/1 [urls ] 1.08ms ± 0% 1.08ms ± 0% ~ (p=0.151 n=5+5) BM_UIOVec/2 [jpg ] 7.48µs ± 5% 7.75µs ±12% ~ (p=0.690 n=5+5) BM_UIOVec/3 [jpg_200 ] 331ns ± 1% 327ns ± 1% ~ (p=0.056 n=5+5) BM_UIOVec/4 [pdf ] 12.0µs ± 0% 12.0µs ± 0% ~ (p=1.000 n=5+5) BM_UFlatSink/0 [html ] 41.7µs ± 0% 41.8µs ± 0% ~ (p=0.421 n=5+5) BM_UFlatSink/1 [urls ] 591µs ± 0% 590µs ± 0% ~ (p=0.151 n=5+5) BM_UFlatSink/2 [jpg ] 7.18µs ± 2% 7.31µs ± 3% ~ (p=0.190 n=4+5) BM_UFlatSink/3 [jpg_200 ] 134ns ± 2% 134ns ± 2% ~ (p=1.000 n=5+5) BM_UFlatSink/4 [pdf ] 8.22µs ± 0% 8.23µs ± 0% ~ (p=0.730 n=4+5) BM_UFlatSink/5 [html4 ] 219µs ± 0% 219µs ± 0% ~ (p=0.548 n=5+5) BM_UFlatSink/6 [txt1 ] 193µs ± 0% 193µs ± 0% ~ (p=0.095 n=5+5) BM_UFlatSink/7 [txt2 ] 171µs ± 0% 171µs ± 0% ~ (p=0.841 n=5+5) BM_UFlatSink/8 [txt3 ] 512µs ± 0% 512µs ± 0% ~ (p=0.548 n=5+5) BM_UFlatSink/9 [txt4 ] 718µs ± 0% 718µs ± 0% ~ (p=0.548 n=5+5) BM_UFlatSink/10 [pb ] 38.7µs ± 0% 38.6µs ± 0% ~ (p=0.222 n=5+5) BM_UFlatSink/11 [gaviota ] 191µs ± 0% 190µs ± 0% ~ (p=0.690 n=5+5) BM_UFlatSink/12 [cp ] 14.3µs ± 0% 14.4µs ± 0% ~ (p=0.222 n=5+5) BM_UFlatSink/13 [c ] 7.33µs ± 0% 7.34µs ± 1% ~ (p=0.690 n=5+5) BM_UFlatSink/14 [lsp ] 2.29µs ± 1% 2.30µs ± 1% ~ (p=0.095 n=5+5) BM_UFlatSink/15 [xls ] 981µs ± 0% 980µs ± 0% ~ (p=0.310 n=5+5) BM_UFlatSink/16 [xls_200 ] 216ns ± 1% 216ns ± 1% ~ (p=1.000 n=5+5) BM_UFlatSink/17 [bin ] 277µs ± 0% 277µs ± 0% ~ (p=1.000 n=5+5) BM_UFlatSink/18 [bin_200 ] 104ns ± 0% 104ns ± 1% ~ (p=0.905 n=5+4) BM_UFlatSink/19 [sum ] 29.5µs ± 0% 29.5µs ± 0% ~ (p=0.222 n=5+5) BM_UFlatSink/20 [man ] 3.01µs ± 1% 3.01µs ± 0% ~ (p=0.730 n=5+4) BM_ZFlat/0 [html (22.31 %) ] 126µs ± 0% 124µs ± 0% -1.66% (p=0.008 n=5+5) BM_ZFlat/1 [urls (47.78 %) ] 1.68ms ± 0% 1.63ms ± 0% -2.73% (p=0.008 n=5+5) BM_ZFlat/2 [jpg (99.95 %) ] 11.6µs ± 8% 11.4µs ± 6% ~ (p=0.310 n=5+5) BM_ZFlat/3 [jpg_200 (73.00 %)] 369ns ± 1% 340ns ± 1% -7.93% (p=0.008 n=5+5) BM_ZFlat/4 [pdf (83.30 %) ] 14.9µs ± 4% 14.4µs ± 1% -3.56% (p=0.008 n=5+5) BM_ZFlat/5 [html4 (22.52 %) ] 551µs ± 0% 545µs ± 0% -1.21% (p=0.008 n=5+5) BM_ZFlat/6 [txt1 (57.88 %) ] 540µs ± 0% 534µs ± 0% -1.15% (p=0.008 n=5+5) BM_ZFlat/7 [txt2 (61.91 %) ] 480µs ± 0% 475µs ± 0% -1.13% (p=0.008 n=5+5) BM_ZFlat/8 [txt3 (54.99 %) ] 1.44ms ± 0% 1.43ms ± 0% -1.14% (p=0.008 n=5+5) BM_ZFlat/9 [txt4 (66.26 %) ] 1.97ms ± 0% 1.95ms ± 0% -1.00% (p=0.008 n=5+5) BM_ZFlat/10 [pb (19.68 %) ] 110µs ± 0% 107µs ± 0% -2.77% (p=0.008 n=5+5) BM_ZFlat/11 [gaviota (37.72 %)] 413µs ± 0% 411µs ± 0% -0.50% (p=0.008 n=5+5) BM_ZFlat/12 [cp (48.12 %) ] 46.6µs ± 1% 44.8µs ± 1% -3.89% (p=0.008 n=5+5) BM_ZFlat/13 [c (42.47 %) ] 17.8µs ± 0% 17.5µs ± 0% -1.87% (p=0.008 n=5+5) BM_ZFlat/14 [lsp (48.37 %) ] 5.62µs ± 1% 5.35µs ± 1% -4.81% (p=0.008 n=5+5) BM_ZFlat/15 [xls (41.23 %) ] 1.63ms ± 0% 1.63ms ± 0% ~ (p=0.310 n=5+5) BM_ZFlat/16 [xls_200 (78.00 %)] 393ns ± 1% 384ns ± 2% -2.45% (p=0.008 n=5+5) BM_ZFlat/17 [bin (18.11 %) ] 510µs ± 0% 503µs ± 0% -1.50% (p=0.016 n=4+5) BM_ZFlat/18 [bin_200 (7.50 %) ] 83.2ns ± 3% 84.5ns ± 4% ~ (p=0.206 n=5+5) BM_ZFlat/19 [sum (48.96 %) ] 80.0µs ± 0% 78.3µs ± 0% -2.20% (p=0.008 n=5+5) BM_ZFlat/20 [man (59.21 %) ] 7.79µs ± 1% 7.45µs ± 1% -4.38% (p=0.008 n=5+5) name old allocs/op new allocs/op delta BM_UFlat/0 [html ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/1 [urls ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/2 [jpg ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/3 [jpg_200 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/4 [pdf ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/5 [html4 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/6 [txt1 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/7 [txt2 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/8 [txt3 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/9 [txt4 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/10 [pb ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/11 [gaviota ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/12 [cp ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/13 [c ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/14 [lsp ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/15 [xls ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/16 [xls_200 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/17 [bin ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/18 [bin_200 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/19 [sum ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/20 [man ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UValidate/0 [html ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UValidate/1 [urls ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UValidate/2 [jpg ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UValidate/3 [jpg_200 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UValidate/4 [pdf ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UIOVec/0 [html ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UIOVec/1 [urls ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UIOVec/2 [jpg ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UIOVec/3 [jpg_200 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UIOVec/4 [pdf ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/0 [html ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/1 [urls ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/2 [jpg ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/3 [jpg_200 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/4 [pdf ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/5 [html4 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/6 [txt1 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/7 [txt2 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/8 [txt3 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/9 [txt4 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/10 [pb ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/11 [gaviota ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/12 [cp ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/13 [c ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/14 [lsp ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/15 [xls ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/16 [xls_200 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/17 [bin ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/18 [bin_200 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/19 [sum ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/20 [man ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_ZFlat/0 [html (22.31 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/1 [urls (47.78 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/2 [jpg (99.95 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/3 [jpg_200 (73.00 %)] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/4 [pdf (83.30 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/5 [html4 (22.52 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/6 [txt1 (57.88 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/7 [txt2 (61.91 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/8 [txt3 (54.99 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/9 [txt4 (66.26 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/10 [pb (19.68 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/11 [gaviota (37.72 %)] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/12 [cp (48.12 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/13 [c (42.47 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/14 [lsp (48.37 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/15 [xls (41.23 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/16 [xls_200 (78.00 %)] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/17 [bin (18.11 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/18 [bin_200 (7.50 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/19 [sum (48.96 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/20 [man (59.21 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) name old peak-mem(Bytes)/op new peak-mem(Bytes)/op delta BM_UFlat/0 [html ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/1 [urls ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/2 [jpg ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/3 [jpg_200 ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/4 [pdf ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/5 [html4 ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/6 [txt1 ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/7 [txt2 ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/8 [txt3 ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/9 [txt4 ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/10 [pb ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/11 [gaviota ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/12 [cp ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/13 [c ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/14 [lsp ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/15 [xls ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/16 [xls_200 ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/17 [bin ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/18 [bin_200 ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/19 [sum ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/20 [man ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UValidate/0 [html ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UValidate/1 [urls ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UValidate/2 [jpg ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UValidate/3 [jpg_200 ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UValidate/4 [pdf ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UIOVec/0 [html ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UIOVec/1 [urls ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UIOVec/2 [jpg ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UIOVec/3 [jpg_200 ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UIOVec/4 [pdf ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlatSink/0 [html ] 102k ± 0% 102k ± 0% ~ (all samples are equal) BM_UFlatSink/1 [urls ] 702k ± 0% 702k ± 0% ~ (all samples are equal) BM_UFlatSink/2 [jpg ] 123k ± 0% 123k ± 0% ~ (all samples are equal) BM_UFlatSink/3 [jpg_200 ] 201 ± 0% 201 ± 0% ~ (all samples are equal) BM_UFlatSink/4 [pdf ] 102k ± 0% 102k ± 0% ~ (all samples are equal) BM_UFlatSink/5 [html4 ] 410k ± 0% 410k ± 0% ~ (all samples are equal) BM_UFlatSink/6 [txt1 ] 152k ± 0% 152k ± 0% ~ (all samples are equal) BM_UFlatSink/7 [txt2 ] 125k ± 0% 125k ± 0% ~ (all samples are equal) BM_UFlatSink/8 [txt3 ] 427k ± 0% 427k ± 0% ~ (all samples are equal) BM_UFlatSink/9 [txt4 ] 482k ± 0% 482k ± 0% ~ (all samples are equal) BM_UFlatSink/10 [pb ] 119k ± 0% 119k ± 0% ~ (all samples are equal) BM_UFlatSink/11 [gaviota ] 184k ± 0% 184k ± 0% ~ (all samples are equal) BM_UFlatSink/12 [cp ] 24.6k ± 0% 24.6k ± 0% ~ (all samples are equal) BM_UFlatSink/13 [c ] 11.2k ± 0% 11.2k ± 0% ~ (all samples are equal) BM_UFlatSink/14 [lsp ] 3.72k ± 0% 3.72k ± 0% ~ (all samples are equal) BM_UFlatSink/15 [xls ] 1.03M ± 0% 1.03M ± 0% ~ (all samples are equal) BM_UFlatSink/16 [xls_200 ] 201 ± 0% 201 ± 0% ~ (all samples are equal) BM_UFlatSink/17 [bin ] 513k ± 0% 513k ± 0% ~ (all samples are equal) BM_UFlatSink/18 [bin_200 ] 201 ± 0% 201 ± 0% ~ (all samples are equal) BM_UFlatSink/19 [sum ] 38.2k ± 0% 38.2k ± 0% ~ (all samples are equal) BM_UFlatSink/20 [man ] 4.23k ± 0% 4.23k ± 0% ~ (all samples are equal) BM_ZFlat/0 [html (22.31 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/1 [urls (47.78 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/2 [jpg (99.95 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/3 [jpg_200 (73.00 %)] 30.7k ± 0% 30.7k ± 0% ~ (all samples are equal) BM_ZFlat/4 [pdf (83.30 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/5 [html4 (22.52 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/6 [txt1 (57.88 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/7 [txt2 (61.91 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/8 [txt3 (54.99 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/9 [txt4 (66.26 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/10 [pb (19.68 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/11 [gaviota (37.72 %)] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/12 [cp (48.12 %) ] 86.1k ± 0% 86.1k ± 0% ~ (all samples are equal) BM_ZFlat/13 [c (42.47 %) ] 57.0k ± 0% 57.0k ± 0% ~ (all samples are equal) BM_ZFlat/14 [lsp (48.37 %) ] 30.6k ± 0% 30.6k ± 0% ~ (all samples are equal) BM_ZFlat/15 [xls (41.23 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/16 [xls_200 (78.00 %)] 30.7k ± 0% 30.7k ± 0% ~ (all samples are equal) BM_ZFlat/17 [bin (18.11 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/18 [bin_200 (7.50 %) ] 30.7k ± 0% 30.7k ± 0% ~ (all samples are equal) BM_ZFlat/19 [sum (48.96 %) ] 116k ± 0% 116k ± 0% ~ (all samples are equal) BM_ZFlat/20 [man (59.21 %) ] 30.6k ± 0% 30.6k ± 0% ~ (all samples are equal) name old speed new speed delta BM_UFlat/0 [html ] 2.46GB/s ± 0% 2.45GB/s ± 1% ~ (p=0.841 n=5+5) BM_UFlat/1 [urls ] 1.19GB/s ± 1% 1.20GB/s ± 1% ~ (p=0.310 n=5+5) BM_UFlat/2 [jpg ] 17.3GB/s ± 1% 17.4GB/s ± 1% ~ (p=0.310 n=5+5) BM_UFlat/3 [jpg_200 ] 1.56GB/s ± 0% 1.56GB/s ± 0% ~ (p=0.190 n=4+5) BM_UFlat/4 [pdf ] 12.5GB/s ± 1% 12.5GB/s ± 0% ~ (p=0.548 n=5+5) BM_UFlat/5 [html4 ] 1.87GB/s ± 0% 1.87GB/s ± 1% ~ (p=1.000 n=5+5) BM_UFlat/6 [txt1 ] 791MB/s ± 1% 791MB/s ± 0% ~ (p=1.000 n=5+5) BM_UFlat/7 [txt2 ] 737MB/s ± 0% 738MB/s ± 0% ~ (p=0.841 n=5+5) BM_UFlat/8 [txt3 ] 839MB/s ± 0% 839MB/s ± 0% ~ (p=1.000 n=5+5) BM_UFlat/9 [txt4 ] 675MB/s ± 1% 674MB/s ± 0% ~ (p=0.730 n=5+4) BM_UFlat/10 [pb ] 3.08GB/s ± 1% 3.06GB/s ± 0% ~ (p=0.095 n=5+5) BM_UFlat/11 [gaviota ] 974MB/s ± 0% 976MB/s ± 0% ~ (p=0.238 n=5+5) BM_UFlat/12 [cp ] 1.70GB/s ± 0% 1.72GB/s ± 0% +1.07% (p=0.016 n=4+5) BM_UFlat/13 [c ] 1.53GB/s ± 0% 1.53GB/s ± 1% ~ (p=1.000 n=5+5) BM_UFlat/14 [lsp ] 1.62GB/s ± 1% 1.62GB/s ± 1% ~ (p=1.000 n=5+5) BM_UFlat/15 [xls ] 1.05GB/s ± 1% 1.05GB/s ± 0% ~ (p=0.556 n=5+4) BM_UFlat/16 [xls_200 ] 943MB/s ± 0% 940MB/s ± 0% ~ (p=0.151 n=5+5) BM_UFlat/17 [bin ] 1.86GB/s ± 1% 1.86GB/s ± 0% ~ (p=1.000 n=5+5) BM_UFlat/18 [bin_200 ] 1.99GB/s ± 0% 1.97GB/s ± 1% ~ (p=0.190 n=5+4) BM_UFlat/19 [sum ] 1.30GB/s ± 0% 1.30GB/s ± 1% ~ (p=0.151 n=5+5) BM_UFlat/20 [man ] 1.42GB/s ± 1% 1.42GB/s ± 0% ~ (p=1.000 n=5+5) BM_UValidate/0 [html ] 3.06GB/s ± 0% 3.06GB/s ± 1% ~ (p=1.000 n=5+5) BM_UValidate/1 [urls ] 1.59GB/s ± 0% 1.59GB/s ± 0% ~ (p=0.095 n=5+5) BM_UValidate/2 [jpg ] 845GB/s ± 0% 845GB/s ± 0% ~ (p=1.000 n=5+5) BM_UValidate/3 [jpg_200 ] 2.10GB/s ± 0% 2.10GB/s ± 0% ~ (p=0.310 n=5+5) BM_UValidate/4 [pdf ] 35.1GB/s ± 0% 35.1GB/s ± 1% ~ (p=0.690 n=5+5) BM_UIOVec/0 [html ] 843MB/s ± 0% 847MB/s ± 1% ~ (p=0.222 n=5+5) BM_UIOVec/1 [urls ] 652MB/s ± 1% 652MB/s ± 1% ~ (p=0.310 n=5+5) BM_UIOVec/2 [jpg ] 16.5GB/s ± 5% 16.0GB/s ±10% ~ (p=0.841 n=5+5) BM_UIOVec/3 [jpg_200 ] 606MB/s ± 1% 614MB/s ± 1% ~ (p=0.056 n=5+5) BM_UIOVec/4 [pdf ] 8.57GB/s ± 0% 8.57GB/s ± 0% ~ (p=0.343 n=4+4) BM_UFlatSink/0 [html ] 2.47GB/s ± 0% 2.45GB/s ± 0% -0.58% (p=0.016 n=5+5) BM_UFlatSink/1 [urls ] 1.19GB/s ± 0% 1.20GB/s ± 0% ~ (p=0.548 n=5+5) BM_UFlatSink/2 [jpg ] 16.4GB/s ±19% 16.9GB/s ± 4% ~ (p=0.690 n=5+5) BM_UFlatSink/3 [jpg_200 ] 1.50GB/s ± 2% 1.50GB/s ± 2% ~ (p=1.000 n=5+5) BM_UFlatSink/4 [pdf ] 12.5GB/s ± 0% 12.5GB/s ± 0% ~ (p=0.730 n=4+5) BM_UFlatSink/5 [html4 ] 1.87GB/s ± 1% 1.88GB/s ± 0% ~ (p=0.421 n=5+5) BM_UFlatSink/6 [txt1 ] 793MB/s ± 0% 792MB/s ± 1% ~ (p=0.690 n=5+5) BM_UFlatSink/7 [txt2 ] 736MB/s ± 0% 736MB/s ± 1% ~ (p=0.841 n=5+5) BM_UFlatSink/8 [txt3 ] 839MB/s ± 0% 839MB/s ± 0% ~ (p=0.548 n=5+5) BM_UFlatSink/9 [txt4 ] 675MB/s ± 0% 675MB/s ± 0% ~ (p=0.222 n=5+5) BM_UFlatSink/10 [pb ] 3.07GB/s ± 0% 3.09GB/s ± 0% +0.54% (p=0.016 n=5+5) BM_UFlatSink/11 [gaviota ] 973MB/s ± 0% 971MB/s ± 0% ~ (p=0.151 n=5+5) BM_UFlatSink/12 [cp ] 1.72GB/s ± 1% 1.71GB/s ± 1% ~ (p=0.421 n=5+5) BM_UFlatSink/13 [c ] 1.53GB/s ± 1% 1.52GB/s ± 0% ~ (p=0.841 n=5+5) BM_UFlatSink/14 [lsp ] 1.63GB/s ± 0% 1.62GB/s ± 1% ~ (p=0.222 n=5+5) BM_UFlatSink/15 [xls ] 1.06GB/s ± 0% 1.05GB/s ± 0% ~ (p=0.111 n=4+5) BM_UFlatSink/16 [xls_200 ] 932MB/s ± 1% 928MB/s ± 1% ~ (p=0.548 n=5+5) BM_UFlatSink/17 [bin ] 1.86GB/s ± 0% 1.86GB/s ± 1% ~ (p=1.000 n=5+5) BM_UFlatSink/18 [bin_200 ] 1.93GB/s ± 1% 1.94GB/s ± 1% ~ (p=0.730 n=5+4) BM_UFlatSink/19 [sum ] 1.30GB/s ± 0% 1.30GB/s ± 1% ~ (p=0.690 n=5+5) BM_UFlatSink/20 [man ] 1.41GB/s ± 1% 1.41GB/s ± 2% ~ (p=0.690 n=5+5) BM_ZFlat/0 [html (22.31 %) ] 815MB/s ± 1% 829MB/s ± 0% +1.78% (p=0.008 n=5+5) BM_ZFlat/1 [urls (47.78 %) ] 420MB/s ± 1% 432MB/s ± 1% +2.87% (p=0.008 n=5+5) BM_ZFlat/2 [jpg (99.95 %) ] 10.7GB/s ± 8% 10.9GB/s ± 6% ~ (p=0.421 n=5+5) BM_ZFlat/3 [jpg_200 (73.00 %)] 544MB/s ± 2% 590MB/s ± 1% +8.41% (p=0.008 n=5+5) BM_ZFlat/4 [pdf (83.30 %) ] 6.92GB/s ± 3% 7.16GB/s ± 1% +3.51% (p=0.008 n=5+5) BM_ZFlat/5 [html4 (22.52 %) ] 745MB/s ± 0% 755MB/s ± 0% +1.34% (p=0.008 n=5+5) BM_ZFlat/6 [txt1 (57.88 %) ] 282MB/s ± 0% 285MB/s ± 1% +1.04% (p=0.008 n=5+5) BM_ZFlat/7 [txt2 (61.91 %) ] 262MB/s ± 0% 265MB/s ± 0% +1.22% (p=0.008 n=5+5) BM_ZFlat/8 [txt3 (54.99 %) ] 297MB/s ± 0% 300MB/s ± 0% +1.09% (p=0.008 n=5+5) BM_ZFlat/9 [txt4 (66.26 %) ] 246MB/s ± 1% 248MB/s ± 0% +0.95% (p=0.008 n=5+5) BM_ZFlat/10 [pb (19.68 %) ] 1.08GB/s ± 1% 1.11GB/s ± 1% +2.57% (p=0.008 n=5+5) BM_ZFlat/11 [gaviota (37.72 %)] 449MB/s ± 1% 451MB/s ± 0% ~ (p=0.056 n=5+5) BM_ZFlat/12 [cp (48.12 %) ] 530MB/s ± 1% 552MB/s ± 0% +4.17% (p=0.008 n=5+5) BM_ZFlat/13 [c (42.47 %) ] 628MB/s ± 1% 640MB/s ± 0% +1.85% (p=0.008 n=5+5) BM_ZFlat/14 [lsp (48.37 %) ] 665MB/s ± 0% 697MB/s ± 1% +4.71% (p=0.008 n=5+5) BM_ZFlat/15 [xls (41.23 %) ] 635MB/s ± 0% 634MB/s ± 0% ~ (p=0.310 n=5+5) BM_ZFlat/16 [xls_200 (78.00 %)] 511MB/s ± 1% 522MB/s ± 2% +2.23% (p=0.008 n=5+5) BM_ZFlat/17 [bin (18.11 %) ] 1.01GB/s ± 1% 1.02GB/s ± 0% +1.67% (p=0.008 n=5+5) BM_ZFlat/18 [bin_200 (7.50 %) ] 2.41GB/s ± 3% 2.37GB/s ± 4% ~ (p=0.222 n=5+5) BM_ZFlat/19 [sum (48.96 %) ] 480MB/s ± 0% 490MB/s ± 1% +2.24% (p=0.008 n=5+5) BM_ZFlat/20 [man (59.21 %) ] 545MB/s ± 0% 569MB/s ± 1% +4.38% (p=0.008 n=5+5) |
||
|
|
3f194acb57 |
Convert DCHECK to assert.
A previous CL introduced a use of DCHECK. The open source build does not support DCHECK, and this project uses assert() instead of DCHECK. |
||
|
|
97a20b480f |
Reduce the LeftShiftOverflows() table size.
A previous CL introduced LeftShiftOverflows(), which takes a uint32 input. However, the value it operates on is guaranteed to only have 8 bits set. This CL takes advantage of this restriction to reduce the size of the static table used to compute LeftShiftOverflows(). The same methodology as the previous CL suggests a 0.6% improvement. The improvement is likely bigger on mobile CPUs that have much smaller caches. Benchmark results: name old time/op new time/op delta BM_UFlat/0 [html ] 42.5µs ± 1% 42.1µs ± 0% -0.87% (p=0.000 n=20+20) BM_UFlat/1 [urls ] 575µs ± 0% 574µs ± 0% -0.16% (p=0.000 n=20+19) BM_UFlat/2 [jpg ] 7.13µs ± 1% 7.20µs ± 5% ~ (p=0.422 n=16+19) BM_UFlat/3 [jpg_200 ] 129ns ± 0% 130ns ± 0% +0.82% (p=0.000 n=20+17) BM_UFlat/4 [pdf ] 8.22µs ± 1% 8.21µs ± 0% ~ (p=0.586 n=17+17) BM_UFlat/5 [html4 ] 222µs ± 0% 222µs ± 0% -0.11% (p=0.047 n=19+20) BM_UFlat/6 [txt1 ] 192µs ± 0% 191µs ± 0% -0.69% (p=0.000 n=20+20) BM_UFlat/7 [txt2 ] 169µs ± 0% 169µs ± 0% -0.28% (p=0.000 n=20+20) BM_UFlat/8 [txt3 ] 510µs ± 0% 507µs ± 0% -0.50% (p=0.000 n=20+20) BM_UFlat/9 [txt4 ] 707µs ± 0% 703µs ± 0% -0.53% (p=0.000 n=20+20) BM_UFlat/10 [pb ] 39.1µs ± 0% 38.5µs ± 0% -1.56% (p=0.000 n=20+20) BM_UFlat/11 [gaviota ] 189µs ± 0% 189µs ± 0% -0.42% (p=0.000 n=20+20) BM_UFlat/12 [cp ] 14.2µs ± 0% 14.2µs ± 1% -0.30% (p=0.001 n=18+19) BM_UFlat/13 [c ] 7.29µs ± 0% 7.34µs ± 1% +0.59% (p=0.000 n=19+20) BM_UFlat/14 [lsp ] 2.28µs ± 0% 2.29µs ± 1% +0.39% (p=0.000 n=19+18) BM_UFlat/15 [xls ] 905µs ± 0% 904µs ± 0% -0.12% (p=0.030 n=20+20) BM_UFlat/16 [xls_200 ] 213ns ± 2% 215ns ± 4% +0.92% (p=0.011 n=20+20) BM_UFlat/17 [bin ] 274µs ± 0% 275µs ± 0% +0.55% (p=0.000 n=20+20) BM_UFlat/18 [bin_200 ] 101ns ± 1% 101ns ± 1% ~ (p=0.913 n=18+18) BM_UFlat/19 [sum ] 27.9µs ± 1% 27.5µs ± 1% -1.38% (p=0.000 n=20+20) BM_UFlat/20 [man ] 2.97µs ± 1% 2.97µs ± 1% ~ (p=0.835 n=20+19) BM_UValidate/0 [html ] 33.5µs ± 0% 34.2µs ± 0% +2.32% (p=0.000 n=20+20) BM_UValidate/1 [urls ] 441µs ± 0% 442µs ± 0% +0.15% (p=0.010 n=20+20) BM_UValidate/2 [jpg ] 144ns ± 0% 146ns ± 0% +1.32% (p=0.000 n=20+20) BM_UValidate/3 [jpg_200 ] 95.3ns ± 0% 96.0ns ± 0% +0.68% (p=0.000 n=20+20) BM_UValidate/4 [pdf ] 2.86µs ± 0% 2.88µs ± 1% +0.67% (p=0.000 n=19+19) BM_UIOVec/0 [html ] 122µs ± 0% 122µs ± 0% -0.25% (p=0.000 n=20+20) BM_UIOVec/1 [urls ] 1.08ms ± 0% 1.08ms ± 0% ~ (p=0.068 n=20+20) BM_UIOVec/2 [jpg ] 7.63µs ± 7% 7.76µs ±11% ~ (p=0.396 n=19+20) BM_UIOVec/3 [jpg_200 ] 325ns ± 0% 326ns ± 0% +0.27% (p=0.000 n=20+18) BM_UIOVec/4 [pdf ] 12.1µs ± 2% 12.1µs ± 3% ~ (p=0.967 n=19+20) BM_UFlatSink/0 [html ] 42.4µs ± 0% 42.1µs ± 0% -0.89% (p=0.000 n=20+20) BM_UFlatSink/1 [urls ] 575µs ± 0% 575µs ± 0% ~ (p=0.883 n=20+20) BM_UFlatSink/2 [jpg ] 7.58µs ±16% 7.52µs ±15% ~ (p=0.945 n=19+20) BM_UFlatSink/3 [jpg_200 ] 133ns ± 4% 133ns ± 4% ~ (p=0.627 n=19+20) BM_UFlatSink/4 [pdf ] 8.29µs ± 4% 8.39µs ± 4% +1.14% (p=0.013 n=19+18) BM_UFlatSink/5 [html4 ] 223µs ± 0% 222µs ± 0% -0.18% (p=0.001 n=20+20) BM_UFlatSink/6 [txt1 ] 192µs ± 0% 191µs ± 0% -0.71% (p=0.000 n=20+20) BM_UFlatSink/7 [txt2 ] 169µs ± 0% 169µs ± 0% -0.26% (p=0.000 n=20+20) BM_UFlatSink/8 [txt3 ] 510µs ± 0% 508µs ± 0% -0.50% (p=0.000 n=20+20) BM_UFlatSink/9 [txt4 ] 707µs ± 0% 704µs ± 0% -0.44% (p=0.000 n=20+20) BM_UFlatSink/10 [pb ] 39.1µs ± 0% 38.5µs ± 1% -1.62% (p=0.000 n=19+20) BM_UFlatSink/11 [gaviota ] 189µs ± 0% 189µs ± 0% -0.39% (p=0.000 n=20+20) BM_UFlatSink/12 [cp ] 14.2µs ± 0% 14.2µs ± 1% ~ (p=0.435 n=19+19) BM_UFlatSink/13 [c ] 7.29µs ± 0% 7.33µs ± 1% +0.57% (p=0.000 n=19+20) BM_UFlatSink/14 [lsp ] 2.29µs ± 0% 2.29µs ± 1% ~ (p=0.791 n=18+18) BM_UFlatSink/15 [xls ] 903µs ± 0% 902µs ± 0% -0.11% (p=0.044 n=20+19) BM_UFlatSink/16 [xls_200 ] 215ns ± 1% 215ns ± 1% ~ (p=0.885 n=19+19) BM_UFlatSink/17 [bin ] 274µs ± 0% 275µs ± 0% +0.51% (p=0.000 n=20+20) BM_UFlatSink/18 [bin_200 ] 103ns ± 2% 103ns ± 0% -0.41% (p=0.016 n=20+15) BM_UFlatSink/19 [sum ] 27.9µs ± 1% 27.5µs ± 1% -1.34% (p=0.000 n=20+19) BM_UFlatSink/20 [man ] 2.98µs ± 1% 2.97µs ± 1% ~ (p=0.358 n=18+19) BM_ZFlat/0 [html (22.31 %) ] 126µs ± 0% 126µs ± 0% +0.14% (p=0.011 n=20+20) BM_ZFlat/1 [urls (47.78 %) ] 1.67ms ± 0% 1.67ms ± 0% +0.11% (p=0.043 n=20+20) BM_ZFlat/2 [jpg (99.95 %) ] 11.5µs ± 6% 11.7µs ± 7% ~ (p=0.142 n=20+20) BM_ZFlat/3 [jpg_200 (73.00 %)] 349ns ± 3% 351ns ± 3% ~ (p=0.573 n=18+20) BM_ZFlat/4 [pdf (83.30 %) ] 14.6µs ± 2% 14.7µs ± 4% ~ (p=0.879 n=19+20) BM_ZFlat/5 [html4 (22.52 %) ] 553µs ± 0% 552µs ± 0% -0.23% (p=0.000 n=20+20) BM_ZFlat/6 [txt1 (57.88 %) ] 540µs ± 0% 540µs ± 0% ~ (p=0.221 n=20+20) BM_ZFlat/7 [txt2 (61.91 %) ] 479µs ± 0% 481µs ± 1% +0.47% (p=0.000 n=20+20) BM_ZFlat/8 [txt3 (54.99 %) ] 1.44ms ± 0% 1.44ms ± 0% +0.13% (p=0.040 n=20+20) BM_ZFlat/9 [txt4 (66.26 %) ] 1.97ms ± 0% 1.97ms ± 0% +0.16% (p=0.009 n=20+20) BM_ZFlat/10 [pb (19.68 %) ] 110µs ± 1% 109µs ± 1% -0.79% (p=0.000 n=20+20) BM_ZFlat/11 [gaviota (37.72 %)] 410µs ± 0% 410µs ± 0% ~ (p=0.149 n=20+19) BM_ZFlat/12 [cp (48.12 %) ] 45.4µs ± 1% 44.9µs ± 1% -1.23% (p=0.000 n=20+20) BM_ZFlat/13 [c (42.47 %) ] 17.5µs ± 0% 17.5µs ± 1% ~ (p=0.883 n=20+20) BM_ZFlat/14 [lsp (48.37 %) ] 5.51µs ± 1% 5.46µs ± 1% -0.95% (p=0.000 n=20+18) BM_ZFlat/15 [xls (41.23 %) ] 1.61ms ± 0% 1.62ms ± 0% ~ (p=0.183 n=20+20) BM_ZFlat/16 [xls_200 (78.00 %)] 389ns ± 2% 391ns ± 3% ~ (p=0.740 n=18+20) BM_ZFlat/17 [bin (18.11 %) ] 508µs ± 0% 508µs ± 0% ~ (p=0.779 n=20+20) BM_ZFlat/18 [bin_200 (7.50 %) ] 87.4ns ± 5% 88.1ns ± 8% ~ (p=0.367 n=16+19) BM_ZFlat/19 [sum (48.96 %) ] 79.1µs ± 0% 80.2µs ± 0% +1.39% (p=0.000 n=20+20) BM_ZFlat/20 [man (59.21 %) ] 7.55µs ± 1% 7.57µs ± 1% +0.31% (p=0.025 n=19+19) name old speed new speed delta BM_UFlat/0 [html ] 2.42GB/s ± 0% 2.44GB/s ± 0% +0.77% (p=0.000 n=19+19) BM_UFlat/1 [urls ] 1.22GB/s ± 0% 1.23GB/s ± 0% +0.06% (p=0.000 n=20+19) BM_UFlat/2 [jpg ] 17.3GB/s ± 2% 17.2GB/s ± 4% ~ (p=0.433 n=17+19) BM_UFlat/3 [jpg_200 ] 1.56GB/s ± 0% 1.54GB/s ± 0% -0.82% (p=0.000 n=20+20) BM_UFlat/4 [pdf ] 12.5GB/s ± 1% 12.5GB/s ± 1% ~ (p=0.322 n=17+17) BM_UFlat/5 [html4 ] 1.85GB/s ± 0% 1.85GB/s ± 0% +0.16% (p=0.000 n=20+20) BM_UFlat/6 [txt1 ] 794MB/s ± 0% 800MB/s ± 0% +0.68% (p=0.000 n=18+20) BM_UFlat/7 [txt2 ] 741MB/s ± 0% 743MB/s ± 0% +0.30% (p=0.000 n=19+19) BM_UFlat/8 [txt3 ] 840MB/s ± 0% 844MB/s ± 0% +0.53% (p=0.000 n=18+20) BM_UFlat/9 [txt4 ] 684MB/s ± 0% 688MB/s ± 0% +0.57% (p=0.000 n=20+17) BM_UFlat/10 [pb ] 3.04GB/s ± 0% 3.09GB/s ± 0% +1.60% (p=0.000 n=19+20) BM_UFlat/11 [gaviota ] 977MB/s ± 0% 981MB/s ± 0% +0.45% (p=0.000 n=19+19) BM_UFlat/12 [cp ] 1.74GB/s ± 0% 1.74GB/s ± 0% +0.29% (p=0.000 n=20+19) BM_UFlat/13 [c ] 1.53GB/s ± 0% 1.52GB/s ± 1% -0.56% (p=0.000 n=19+20) BM_UFlat/14 [lsp ] 1.64GB/s ± 0% 1.63GB/s ± 1% -0.38% (p=0.000 n=19+20) BM_UFlat/15 [xls ] 1.14GB/s ± 0% 1.14GB/s ± 0% +0.11% (p=0.000 n=19+20) BM_UFlat/16 [xls_200 ] 941MB/s ± 1% 931MB/s ± 4% -1.02% (p=0.001 n=19+20) BM_UFlat/17 [bin ] 1.88GB/s ± 0% 1.87GB/s ± 0% -0.51% (p=0.000 n=20+20) BM_UFlat/18 [bin_200 ] 1.98GB/s ± 0% 1.98GB/s ± 1% ~ (p=0.767 n=18+18) BM_UFlat/19 [sum ] 1.37GB/s ± 0% 1.39GB/s ± 0% +1.46% (p=0.000 n=20+20) BM_UFlat/20 [man ] 1.43GB/s ± 0% 1.43GB/s ± 0% ~ (p=0.501 n=18+18) BM_UValidate/0 [html ] 3.07GB/s ± 0% 3.00GB/s ± 0% -2.25% (p=0.000 n=20+20) BM_UValidate/1 [urls ] 1.60GB/s ± 0% 1.59GB/s ± 0% -0.11% (p=0.000 n=18+19) BM_UValidate/2 [jpg ] 859GB/s ± 0% 848GB/s ± 0% -1.29% (p=0.000 n=20+19) BM_UValidate/3 [jpg_200 ] 2.10GB/s ± 0% 2.09GB/s ± 0% -0.68% (p=0.000 n=19+20) BM_UValidate/4 [pdf ] 35.9GB/s ± 0% 35.6GB/s ± 1% -0.71% (p=0.000 n=20+20) BM_UIOVec/0 [html ] 843MB/s ± 0% 844MB/s ± 0% +0.21% (p=0.000 n=20+20) BM_UIOVec/1 [urls ] 651MB/s ± 0% 650MB/s ± 0% -0.10% (p=0.000 n=20+20) BM_UIOVec/2 [jpg ] 16.2GB/s ± 6% 16.0GB/s ±10% ~ (p=0.380 n=19+20) BM_UIOVec/3 [jpg_200 ] 617MB/s ± 0% 615MB/s ± 0% -0.24% (p=0.000 n=20+17) BM_UIOVec/4 [pdf ] 8.52GB/s ± 3% 8.50GB/s ± 3% ~ (p=0.771 n=19+20) BM_UFlatSink/0 [html ] 2.42GB/s ± 0% 2.44GB/s ± 0% +0.93% (p=0.000 n=20+20) BM_UFlatSink/1 [urls ] 1.23GB/s ± 0% 1.23GB/s ± 0% +0.04% (p=0.006 n=20+20) BM_UFlatSink/2 [jpg ] 16.4GB/s ±14% 16.5GB/s ±13% ~ (p=0.879 n=19+20) BM_UFlatSink/3 [jpg_200 ] 1.51GB/s ± 4% 1.51GB/s ± 4% ~ (p=0.874 n=18+20) BM_UFlatSink/4 [pdf ] 12.4GB/s ± 4% 12.3GB/s ± 4% -1.11% (p=0.016 n=19+18) BM_UFlatSink/5 [html4 ] 1.85GB/s ± 0% 1.85GB/s ± 0% +0.20% (p=0.000 n=20+20) BM_UFlatSink/6 [txt1 ] 794MB/s ± 0% 799MB/s ± 0% +0.72% (p=0.000 n=19+20) BM_UFlatSink/7 [txt2 ] 741MB/s ± 0% 743MB/s ± 0% +0.30% (p=0.000 n=18+20) BM_UFlatSink/8 [txt3 ] 839MB/s ± 0% 843MB/s ± 0% +0.52% (p=0.000 n=20+18) BM_UFlatSink/9 [txt4 ] 684MB/s ± 0% 687MB/s ± 0% +0.46% (p=0.000 n=20+20) BM_UFlatSink/10 [pb ] 3.04GB/s ± 0% 3.09GB/s ± 0% +1.71% (p=0.000 n=20+19) BM_UFlatSink/11 [gaviota ] 976MB/s ± 0% 980MB/s ± 0% +0.45% (p=0.000 n=20+20) BM_UFlatSink/12 [cp ] 1.74GB/s ± 1% 1.74GB/s ± 1% ~ (p=0.904 n=20+20) BM_UFlatSink/13 [c ] 1.53GB/s ± 0% 1.53GB/s ± 1% -0.50% (p=0.000 n=19+20) BM_UFlatSink/14 [lsp ] 1.63GB/s ± 1% 1.63GB/s ± 1% ~ (p=0.358 n=19+18) BM_UFlatSink/15 [xls ] 1.14GB/s ± 0% 1.15GB/s ± 0% +0.12% (p=0.000 n=20+20) BM_UFlatSink/16 [xls_200 ] 931MB/s ± 1% 931MB/s ± 1% ~ (p=0.686 n=19+19) BM_UFlatSink/17 [bin ] 1.88GB/s ± 0% 1.87GB/s ± 0% -0.53% (p=0.000 n=20+20) BM_UFlatSink/18 [bin_200 ] 1.94GB/s ± 2% 1.95GB/s ± 1% +0.42% (p=0.014 n=20+15) BM_UFlatSink/19 [sum ] 1.37GB/s ± 0% 1.39GB/s ± 0% +1.38% (p=0.000 n=19+18) BM_UFlatSink/20 [man ] 1.42GB/s ± 1% 1.43GB/s ± 0% ~ (p=0.284 n=18+19) BM_ZFlat/0 [html (22.31 %) ] 815MB/s ± 0% 814MB/s ± 0% -0.15% (p=0.000 n=20+20) BM_ZFlat/1 [urls (47.78 %) ] 423MB/s ± 0% 422MB/s ± 0% -0.14% (p=0.000 n=20+20) BM_ZFlat/2 [jpg (99.95 %) ] 10.8GB/s ± 5% 10.6GB/s ± 7% ~ (p=0.142 n=20+20) BM_ZFlat/3 [jpg_200 (73.00 %)] 574MB/s ± 2% 572MB/s ± 2% ~ (p=0.613 n=18+20) BM_ZFlat/4 [pdf (83.30 %) ] 7.01GB/s ± 2% 7.01GB/s ± 4% ~ (p=0.593 n=18+20) BM_ZFlat/5 [html4 (22.52 %) ] 743MB/s ± 0% 745MB/s ± 0% +0.25% (p=0.000 n=20+19) BM_ZFlat/6 [txt1 (57.88 %) ] 283MB/s ± 0% 282MB/s ± 0% ~ (p=0.261 n=18+19) BM_ZFlat/7 [txt2 (61.91 %) ] 262MB/s ± 0% 261MB/s ± 0% -0.35% (p=0.000 n=20+19) BM_ZFlat/8 [txt3 (54.99 %) ] 298MB/s ± 0% 297MB/s ± 0% -0.11% (p=0.000 n=20+19) BM_ZFlat/9 [txt4 (66.26 %) ] 245MB/s ± 0% 245MB/s ± 0% -0.13% (p=0.000 n=19+20) BM_ZFlat/10 [pb (19.68 %) ] 1.08GB/s ± 0% 1.09GB/s ± 0% +0.82% (p=0.000 n=18+19) BM_ZFlat/11 [gaviota (37.72 %)] 451MB/s ± 0% 451MB/s ± 0% -0.05% (p=0.004 n=19+20) BM_ZFlat/12 [cp (48.12 %) ] 543MB/s ± 1% 550MB/s ± 1% +1.24% (p=0.000 n=20+20) BM_ZFlat/13 [c (42.47 %) ] 638MB/s ± 0% 637MB/s ± 0% ~ (p=0.708 n=19+19) BM_ZFlat/14 [lsp (48.37 %) ] 678MB/s ± 2% 684MB/s ± 1% +0.89% (p=0.000 n=20+19) BM_ZFlat/15 [xls (41.23 %) ] 640MB/s ± 0% 640MB/s ± 0% -0.10% (p=0.000 n=19+19) BM_ZFlat/16 [xls_200 (78.00 %)] 515MB/s ± 2% 514MB/s ± 3% ~ (p=0.916 n=18+19) BM_ZFlat/17 [bin (18.11 %) ] 1.01GB/s ± 0% 1.01GB/s ± 0% +0.03% (p=0.033 n=20+20) BM_ZFlat/18 [bin_200 (7.50 %) ] 2.30GB/s ± 6% 2.28GB/s ± 9% ~ (p=0.502 n=16+19) BM_ZFlat/19 [sum (48.96 %) ] 485MB/s ± 0% 478MB/s ± 0% -1.39% (p=0.000 n=19+20) BM_ZFlat/20 [man (59.21 %) ] 562MB/s ± 1% 560MB/s ± 1% -0.37% (p=0.016 n=18+19) |
||
|
|
4f0adca400 |
Wrap BMI2 instruction usage in support checks.
A previous version of this was submitted and rolled back due to breakage -- an attempt to accommodate Visual Studio resulted in compiler errors on GCC/Clang with -mavx2 but without -mbmi2. This version makes the BMI2 support check more strict, to avoid the errors. A previous CL introduced _bzhi_u32 (part of Intel's BMI2 instruction set, released in Haswell) gated by a check for the __BMI2__ preprocessor macro. This works for Clang and GCC, but does not work on Visual Studio, and may not work on other compilers. This CL plumbs the BMI2 support checks through the CMake configuration used by the open source build. It also replaces the <x86intrin.h> header, which does not exist on Visual Studio, with the more scoped headers <tmmintrin.h> (for SSSE3) and <immintrin.h> (for BMI2/AVX2). Asides from fixing the open source build, the more scoped headers make it slightly less likely that newer intrinsics will creep in without proper gating. |
||
|
|
46768e335d |
Optimize decompression by about 0.82%.
Assembly difference: https://godbolt.org/z/cvlH9b name old time/op new time/op delta BM_UFlat/0 [html ] 42.3µs ± 0% 42.5µs ± 0% +0.57% (p=0.008 n=5+5) BM_UFlat/1 [urls ] 590µs ± 0% 575µs ± 0% -2.60% (p=0.008 n=5+5) BM_UFlat/2 [jpg ] 7.16µs ± 1% 7.15µs ± 1% ~ (p=0.841 n=5+5) BM_UFlat/3 [jpg_200 ] 131ns ± 0% 129ns ± 0% -1.41% (p=0.008 n=5+5) BM_UFlat/4 [pdf ] 8.21µs ± 0% 8.22µs ± 1% ~ (p=0.690 n=5+5) BM_UFlat/5 [html4 ] 222µs ± 0% 223µs ± 0% ~ (p=0.841 n=5+5) BM_UFlat/6 [txt1 ] 193µs ± 0% 192µs ± 0% ~ (p=0.095 n=5+5) BM_UFlat/7 [txt2 ] 171µs ± 0% 169µs ± 0% -0.83% (p=0.008 n=5+5) BM_UFlat/8 [txt3 ] 511µs ± 0% 510µs ± 0% ~ (p=0.841 n=5+5) BM_UFlat/9 [txt4 ] 717µs ± 0% 707µs ± 0% -1.42% (p=0.008 n=5+5) BM_UFlat/10 [pb ] 38.8µs ± 0% 39.3µs ± 0% +1.26% (p=0.008 n=5+5) BM_UFlat/11 [gaviota ] 190µs ± 0% 189µs ± 0% -0.43% (p=0.032 n=5+5) BM_UFlat/12 [cp ] 14.3µs ± 0% 14.2µs ± 0% -0.92% (p=0.008 n=5+5) BM_UFlat/13 [c ] 7.35µs ± 1% 7.30µs ± 0% -0.66% (p=0.032 n=5+5) BM_UFlat/14 [lsp ] 2.30µs ± 1% 2.28µs ± 0% ~ (p=0.056 n=5+5) BM_UFlat/15 [xls ] 983µs ± 0% 904µs ± 0% -7.99% (p=0.008 n=5+5) BM_UFlat/16 [xls_200 ] 213ns ± 0% 213ns ± 1% ~ (p=0.690 n=5+5) BM_UFlat/17 [bin ] 278µs ± 0% 274µs ± 0% -1.56% (p=0.008 n=5+5) BM_UFlat/18 [bin_200 ] 101ns ± 0% 101ns ± 1% ~ (p=1.000 n=5+5) BM_UFlat/19 [sum ] 29.4µs ± 1% 28.0µs ± 1% -4.98% (p=0.008 n=5+5) BM_UFlat/20 [man ] 2.97µs ± 0% 2.97µs ± 0% ~ (p=0.421 n=5+5) BM_UValidate/0 [html ] 33.6µs ± 0% 33.6µs ± 0% ~ (p=0.548 n=5+5) BM_UValidate/1 [urls ] 443µs ± 0% 441µs ± 0% -0.43% (p=0.016 n=4+5) BM_UValidate/2 [jpg ] 146ns ± 0% 144ns ± 0% -1.63% (p=0.008 n=5+5) BM_UValidate/3 [jpg_200 ] 98.6ns ± 0% 95.3ns ± 0% -3.32% (p=0.008 n=5+5) BM_UValidate/4 [pdf ] 2.89µs ± 1% 2.85µs ± 0% -1.22% (p=0.008 n=5+5) BM_UIOVec/0 [html ] 122µs ± 0% 122µs ± 0% ~ (p=1.000 n=5+5) BM_UIOVec/1 [urls ] 1.08ms ± 0% 1.08ms ± 0% ~ (p=0.095 n=5+5) BM_UIOVec/2 [jpg ] 7.51µs ± 4% 7.69µs ± 6% ~ (p=0.421 n=5+5) BM_UIOVec/3 [jpg_200 ] 327ns ± 0% 327ns ± 1% ~ (p=0.730 n=4+5) BM_UIOVec/4 [pdf ] 12.0µs ± 1% 12.0µs ± 0% ~ (p=0.286 n=5+4) BM_UFlatSink/0 [html ] 42.3µs ± 0% 42.5µs ± 0% +0.46% (p=0.008 n=5+5) BM_UFlatSink/1 [urls ] 589µs ± 0% 575µs ± 0% -2.36% (p=0.008 n=5+5) BM_UFlatSink/2 [jpg ] 7.40µs ± 8% 7.74µs ± 9% ~ (p=0.310 n=5+5) BM_UFlatSink/3 [jpg_200 ] 134ns ± 0% 131ns ± 0% -1.78% (p=0.008 n=5+5) BM_UFlatSink/4 [pdf ] 8.28µs ± 3% 8.35µs ± 6% ~ (p=0.548 n=5+5) BM_UFlatSink/5 [html4 ] 222µs ± 0% 222µs ± 0% ~ (p=0.690 n=5+5) BM_UFlatSink/6 [txt1 ] 193µs ± 0% 192µs ± 0% ~ (p=0.222 n=5+5) BM_UFlatSink/7 [txt2 ] 171µs ± 0% 169µs ± 0% -0.91% (p=0.008 n=5+5) BM_UFlatSink/8 [txt3 ] 512µs ± 0% 510µs ± 0% -0.28% (p=0.032 n=5+5) BM_UFlatSink/9 [txt4 ] 717µs ± 0% 707µs ± 0% -1.32% (p=0.008 n=5+5) BM_UFlatSink/10 [pb ] 38.7µs ± 0% 39.2µs ± 0% +1.29% (p=0.008 n=5+5) BM_UFlatSink/11 [gaviota ] 190µs ± 0% 189µs ± 0% -0.47% (p=0.008 n=5+5) BM_UFlatSink/12 [cp ] 14.3µs ± 0% 14.2µs ± 0% -0.65% (p=0.008 n=5+5) BM_UFlatSink/13 [c ] 7.36µs ± 1% 7.29µs ± 0% -0.92% (p=0.008 n=5+5) BM_UFlatSink/14 [lsp ] 2.30µs ± 1% 2.29µs ± 0% ~ (p=0.841 n=5+5) BM_UFlatSink/15 [xls ] 980µs ± 0% 903µs ± 0% -7.92% (p=0.008 n=5+5) BM_UFlatSink/16 [xls_200 ] 217ns ± 0% 215ns ± 0% -0.94% (p=0.008 n=5+5) BM_UFlatSink/17 [bin ] 278µs ± 0% 273µs ± 0% -1.56% (p=0.008 n=5+5) BM_UFlatSink/18 [bin_200 ] 107ns ± 5% 104ns ± 0% ~ (p=0.056 n=5+5) BM_UFlatSink/19 [sum ] 29.5µs ± 0% 27.9µs ± 0% -5.32% (p=0.008 n=5+5) BM_UFlatSink/20 [man ] 3.01µs ± 0% 3.00µs ± 1% ~ (p=0.310 n=5+5) BM_ZFlat/0 [html (22.31 %) ] 127µs ± 0% 126µs ± 0% -0.46% (p=0.008 n=5+5) BM_ZFlat/1 [urls (47.78 %) ] 1.67ms ± 0% 1.67ms ± 0% ~ (p=0.548 n=5+5) BM_ZFlat/2 [jpg (99.95 %) ] 11.5µs ± 3% 11.6µs ± 6% ~ (p=0.841 n=5+5) BM_ZFlat/3 [jpg_200 (73.00 %)] 350ns ± 2% 347ns ± 0% ~ (p=0.905 n=5+4) BM_ZFlat/4 [pdf (83.30 %) ] 14.6µs ± 4% 14.6µs ± 1% ~ (p=0.421 n=5+5) BM_ZFlat/5 [html4 (22.52 %) ] 553µs ± 0% 553µs ± 0% ~ (p=0.690 n=5+5) BM_ZFlat/6 [txt1 (57.88 %) ] 540µs ± 0% 540µs ± 0% ~ (p=1.000 n=5+5) BM_ZFlat/7 [txt2 (61.91 %) ] 481µs ± 0% 479µs ± 0% -0.54% (p=0.008 n=5+5) BM_ZFlat/8 [txt3 (54.99 %) ] 1.44ms ± 0% 1.44ms ± 0% ~ (p=0.222 n=5+5) BM_ZFlat/9 [txt4 (66.26 %) ] 1.97ms ± 0% 1.97ms ± 0% ~ (p=0.222 n=5+5) BM_ZFlat/10 [pb (19.68 %) ] 110µs ± 0% 110µs ± 0% ~ (p=0.841 n=5+5) BM_ZFlat/11 [gaviota (37.72 %)] 411µs ± 0% 410µs ± 0% ~ (p=0.222 n=5+5) BM_ZFlat/12 [cp (48.12 %) ] 46.1µs ± 1% 45.8µs ± 0% ~ (p=0.056 n=5+5) BM_ZFlat/13 [c (42.47 %) ] 17.6µs ± 0% 17.6µs ± 1% ~ (p=0.310 n=5+5) BM_ZFlat/14 [lsp (48.37 %) ] 5.46µs ± 1% 5.49µs ± 0% ~ (p=0.222 n=5+5) BM_ZFlat/15 [xls (41.23 %) ] 1.62ms ± 0% 1.61ms ± 0% ~ (p=0.190 n=4+5) BM_ZFlat/16 [xls_200 (78.00 %)] 392ns ± 2% 385ns ± 1% ~ (p=0.200 n=4+4) BM_ZFlat/17 [bin (18.11 %) ] 509µs ± 0% 508µs ± 0% -0.26% (p=0.008 n=5+5) BM_ZFlat/18 [bin_200 (7.50 %) ] 90.2ns ±15% 80.8ns ± 0% -10.39% (p=0.016 n=5+4) BM_ZFlat/19 [sum (48.96 %) ] 81.1µs ± 0% 79.1µs ± 1% -2.37% (p=0.008 n=5+5) BM_ZFlat/20 [man (59.21 %) ] 7.61µs ± 1% 7.57µs ± 1% ~ (p=0.421 n=5+5) name old allocs/op new allocs/op delta BM_UFlat/0 [html ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/1 [urls ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/2 [jpg ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/3 [jpg_200 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/4 [pdf ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/5 [html4 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/6 [txt1 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/7 [txt2 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/8 [txt3 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/9 [txt4 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/10 [pb ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/11 [gaviota ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/12 [cp ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/13 [c ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/14 [lsp ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/15 [xls ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/16 [xls_200 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/17 [bin ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/18 [bin_200 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/19 [sum ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlat/20 [man ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UValidate/0 [html ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UValidate/1 [urls ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UValidate/2 [jpg ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UValidate/3 [jpg_200 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UValidate/4 [pdf ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UIOVec/0 [html ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UIOVec/1 [urls ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UIOVec/2 [jpg ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UIOVec/3 [jpg_200 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UIOVec/4 [pdf ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/0 [html ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/1 [urls ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/2 [jpg ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/3 [jpg_200 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/4 [pdf ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/5 [html4 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/6 [txt1 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/7 [txt2 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/8 [txt3 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/9 [txt4 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/10 [pb ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/11 [gaviota ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/12 [cp ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/13 [c ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/14 [lsp ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/15 [xls ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/16 [xls_200 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/17 [bin ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/18 [bin_200 ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/19 [sum ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_UFlatSink/20 [man ] 0.00 ±NaN% 0.00 ±NaN% ~ (all samples are equal) BM_ZFlat/0 [html (22.31 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/1 [urls (47.78 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/2 [jpg (99.95 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/3 [jpg_200 (73.00 %)] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/4 [pdf (83.30 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/5 [html4 (22.52 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/6 [txt1 (57.88 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/7 [txt2 (61.91 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/8 [txt3 (54.99 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/9 [txt4 (66.26 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/10 [pb (19.68 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/11 [gaviota (37.72 %)] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/12 [cp (48.12 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/13 [c (42.47 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/14 [lsp (48.37 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/15 [xls (41.23 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/16 [xls_200 (78.00 %)] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/17 [bin (18.11 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/18 [bin_200 (7.50 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/19 [sum (48.96 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) BM_ZFlat/20 [man (59.21 %) ] 1.00 ± 0% 1.00 ± 0% ~ (all samples are equal) name old peak-mem(Bytes)/op new peak-mem(Bytes)/op delta BM_UFlat/0 [html ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/1 [urls ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/2 [jpg ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/3 [jpg_200 ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/4 [pdf ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/5 [html4 ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/6 [txt1 ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/7 [txt2 ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/8 [txt3 ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/9 [txt4 ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/10 [pb ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/11 [gaviota ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/12 [cp ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/13 [c ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/14 [lsp ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/15 [xls ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/16 [xls_200 ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/17 [bin ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/18 [bin_200 ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/19 [sum ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlat/20 [man ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UValidate/0 [html ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UValidate/1 [urls ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UValidate/2 [jpg ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UValidate/3 [jpg_200 ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UValidate/4 [pdf ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UIOVec/0 [html ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UIOVec/1 [urls ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UIOVec/2 [jpg ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UIOVec/3 [jpg_200 ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UIOVec/4 [pdf ] 4.00 ± 0% 4.00 ± 0% ~ (all samples are equal) BM_UFlatSink/0 [html ] 102k ± 0% 102k ± 0% ~ (all samples are equal) BM_UFlatSink/1 [urls ] 702k ± 0% 702k ± 0% ~ (all samples are equal) BM_UFlatSink/2 [jpg ] 123k ± 0% 123k ± 0% ~ (all samples are equal) BM_UFlatSink/3 [jpg_200 ] 201 ± 0% 201 ± 0% ~ (all samples are equal) BM_UFlatSink/4 [pdf ] 102k ± 0% 102k ± 0% ~ (all samples are equal) BM_UFlatSink/5 [html4 ] 410k ± 0% 410k ± 0% ~ (all samples are equal) BM_UFlatSink/6 [txt1 ] 152k ± 0% 152k ± 0% ~ (all samples are equal) BM_UFlatSink/7 [txt2 ] 125k ± 0% 125k ± 0% ~ (all samples are equal) BM_UFlatSink/8 [txt3 ] 427k ± 0% 427k ± 0% ~ (all samples are equal) BM_UFlatSink/9 [txt4 ] 482k ± 0% 482k ± 0% ~ (all samples are equal) BM_UFlatSink/10 [pb ] 119k ± 0% 119k ± 0% ~ (all samples are equal) BM_UFlatSink/11 [gaviota ] 184k ± 0% 184k ± 0% ~ (all samples are equal) BM_UFlatSink/12 [cp ] 24.6k ± 0% 24.6k ± 0% ~ (all samples are equal) BM_UFlatSink/13 [c ] 11.2k ± 0% 11.2k ± 0% ~ (all samples are equal) BM_UFlatSink/14 [lsp ] 3.72k ± 0% 3.72k ± 0% ~ (all samples are equal) BM_UFlatSink/15 [xls ] 1.03M ± 0% 1.03M ± 0% ~ (all samples are equal) BM_UFlatSink/16 [xls_200 ] 201 ± 0% 201 ± 0% ~ (all samples are equal) BM_UFlatSink/17 [bin ] 513k ± 0% 513k ± 0% ~ (all samples are equal) BM_UFlatSink/18 [bin_200 ] 201 ± 0% 201 ± 0% ~ (all samples are equal) BM_UFlatSink/19 [sum ] 38.2k ± 0% 38.2k ± 0% ~ (all samples are equal) BM_UFlatSink/20 [man ] 4.23k ± 0% 4.23k ± 0% ~ (all samples are equal) BM_ZFlat/0 [html (22.31 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/1 [urls (47.78 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/2 [jpg (99.95 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/3 [jpg_200 (73.00 %)] 30.7k ± 0% 30.7k ± 0% ~ (all samples are equal) BM_ZFlat/4 [pdf (83.30 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/5 [html4 (22.52 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/6 [txt1 (57.88 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/7 [txt2 (61.91 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/8 [txt3 (54.99 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/9 [txt4 (66.26 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/10 [pb (19.68 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/11 [gaviota (37.72 %)] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/12 [cp (48.12 %) ] 86.1k ± 0% 86.1k ± 0% ~ (all samples are equal) BM_ZFlat/13 [c (42.47 %) ] 57.0k ± 0% 57.0k ± 0% ~ (all samples are equal) BM_ZFlat/14 [lsp (48.37 %) ] 30.6k ± 0% 30.6k ± 0% ~ (all samples are equal) BM_ZFlat/15 [xls (41.23 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/16 [xls_200 (78.00 %)] 30.7k ± 0% 30.7k ± 0% ~ (all samples are equal) BM_ZFlat/17 [bin (18.11 %) ] 175k ± 0% 175k ± 0% ~ (all samples are equal) BM_ZFlat/18 [bin_200 (7.50 %) ] 30.7k ± 0% 30.7k ± 0% ~ (all samples are equal) BM_ZFlat/19 [sum (48.96 %) ] 116k ± 0% 116k ± 0% ~ (all samples are equal) BM_ZFlat/20 [man (59.21 %) ] 30.6k ± 0% 30.6k ± 0% ~ (all samples are equal) name old speed new speed delta BM_UFlat/0 [html ] 2.43GB/s ± 0% 2.41GB/s ± 0% -0.59% (p=0.032 n=5+5) BM_UFlat/1 [urls ] 1.19GB/s ± 1% 1.22GB/s ± 0% +2.58% (p=0.008 n=5+5) BM_UFlat/2 [jpg ] 17.2GB/s ± 1% 17.3GB/s ± 1% ~ (p=0.421 n=5+5) BM_UFlat/3 [jpg_200 ] 1.54GB/s ± 1% 1.56GB/s ± 1% +1.23% (p=0.008 n=5+5) BM_UFlat/4 [pdf ] 12.5GB/s ± 1% 12.5GB/s ± 0% ~ (p=0.413 n=5+4) BM_UFlat/5 [html4 ] 1.85GB/s ± 1% 1.85GB/s ± 0% ~ (p=0.690 n=5+5) BM_UFlat/6 [txt1 ] 793MB/s ± 0% 794MB/s ± 0% ~ (p=0.690 n=5+5) BM_UFlat/7 [txt2 ] 738MB/s ± 0% 742MB/s ± 1% ~ (p=0.151 n=5+5) BM_UFlat/8 [txt3 ] 839MB/s ± 0% 838MB/s ± 0% ~ (p=0.310 n=5+5) BM_UFlat/9 [txt4 ] 674MB/s ± 0% 684MB/s ± 0% +1.55% (p=0.008 n=5+5) BM_UFlat/10 [pb ] 3.07GB/s ± 1% 3.03GB/s ± 1% -1.27% (p=0.008 n=5+5) BM_UFlat/11 [gaviota ] 974MB/s ± 0% 978MB/s ± 0% +0.50% (p=0.032 n=5+5) BM_UFlat/12 [cp ] 1.72GB/s ± 0% 1.74GB/s ± 1% +0.79% (p=0.008 n=5+5) BM_UFlat/13 [c ] 1.52GB/s ± 1% 1.53GB/s ± 1% ~ (p=0.421 n=5+5) BM_UFlat/14 [lsp ] 1.62GB/s ± 1% 1.64GB/s ± 0% ~ (p=0.151 n=5+5) BM_UFlat/15 [xls ] 1.05GB/s ± 0% 1.14GB/s ± 1% +8.60% (p=0.008 n=5+5) BM_UFlat/16 [xls_200 ] 942MB/s ± 0% 941MB/s ± 1% ~ (p=0.690 n=5+5) BM_UFlat/17 [bin ] 1.85GB/s ± 0% 1.88GB/s ± 0% +1.60% (p=0.008 n=5+5) BM_UFlat/18 [bin_200 ] 1.99GB/s ± 0% 1.99GB/s ± 0% ~ (p=0.421 n=5+5) BM_UFlat/19 [sum ] 1.30GB/s ± 1% 1.37GB/s ± 1% +5.28% (p=0.008 n=5+5) BM_UFlat/20 [man ] 1.43GB/s ± 1% 1.42GB/s ± 0% ~ (p=0.421 n=5+5) BM_UValidate/0 [html ] 3.07GB/s ± 0% 3.05GB/s ± 1% ~ (p=0.222 n=5+5) BM_UValidate/1 [urls ] 1.59GB/s ± 0% 1.60GB/s ± 0% ~ (p=0.310 n=5+5) BM_UValidate/2 [jpg ] 845GB/s ± 0% 860GB/s ± 0% +1.75% (p=0.008 n=5+5) BM_UValidate/3 [jpg_200 ] 2.04GB/s ± 1% 2.11GB/s ± 1% +3.61% (p=0.008 n=5+5) BM_UValidate/4 [pdf ] 35.6GB/s ± 1% 36.1GB/s ± 1% +1.40% (p=0.016 n=5+5) BM_UIOVec/0 [html ] 845MB/s ± 1% 843MB/s ± 1% ~ (p=0.310 n=5+5) BM_UIOVec/1 [urls ] 653MB/s ± 0% 651MB/s ± 1% ~ (p=0.190 n=4+5) BM_UIOVec/2 [jpg ] 16.4GB/s ± 4% 16.1GB/s ± 5% ~ (p=0.548 n=5+5) BM_UIOVec/3 [jpg_200 ] 611MB/s ± 2% 614MB/s ± 0% ~ (p=0.548 n=5+5) BM_UIOVec/4 [pdf ] 8.53GB/s ± 1% 8.52GB/s ± 3% ~ (p=0.841 n=5+5) BM_UFlatSink/0 [html ] 2.43GB/s ± 1% 2.42GB/s ± 0% ~ (p=0.222 n=5+5) BM_UFlatSink/1 [urls ] 1.20GB/s ± 0% 1.23GB/s ± 1% +2.38% (p=0.008 n=5+5) BM_UFlatSink/2 [jpg ] 16.7GB/s ± 8% 16.0GB/s ± 8% ~ (p=0.151 n=5+5) BM_UFlatSink/3 [jpg_200 ] 1.50GB/s ± 0% 1.53GB/s ± 0% +2.13% (p=0.008 n=5+5) BM_UFlatSink/4 [pdf ] 12.5GB/s ± 0% 12.3GB/s ± 5% ~ (p=0.730 n=4+5) BM_UFlatSink/5 [html4 ] 1.85GB/s ± 0% 1.84GB/s ± 0% ~ (p=0.151 n=5+5) BM_UFlatSink/6 [txt1 ] 791MB/s ± 0% 791MB/s ± 0% ~ (p=1.000 n=5+5) BM_UFlatSink/7 [txt2 ] 735MB/s ± 0% 739MB/s ± 0% +0.51% (p=0.016 n=5+4) BM_UFlatSink/8 [txt3 ] 838MB/s ± 0% 840MB/s ± 0% ~ (p=0.151 n=5+5) BM_UFlatSink/9 [txt4 ] 674MB/s ± 0% 683MB/s ± 0% +1.37% (p=0.008 n=5+5) BM_UFlatSink/10 [pb ] 3.07GB/s ± 0% 3.03GB/s ± 1% -1.34% (p=0.008 n=5+5) BM_UFlatSink/11 [gaviota ] 973MB/s ± 0% 975MB/s ± 0% ~ (p=0.310 n=5+5) BM_UFlatSink/12 [cp ] 1.73GB/s ± 1% 1.74GB/s ± 1% ~ (p=0.056 n=5+5) BM_UFlatSink/13 [c ] 1.52GB/s ± 1% 1.53GB/s ± 1% +0.76% (p=0.032 n=5+5) BM_UFlatSink/14 [lsp ] 1.62GB/s ± 0% 1.63GB/s ± 0% ~ (p=0.548 n=5+5) BM_UFlatSink/15 [xls ] 1.05GB/s ± 0% 1.14GB/s ± 0% +8.57% (p=0.008 n=5+5) BM_UFlatSink/16 [xls_200 ] 925MB/s ± 0% 933MB/s ± 0% +0.85% (p=0.008 n=5+5) BM_UFlatSink/17 [bin ] 1.85GB/s ± 1% 1.88GB/s ± 0% +1.47% (p=0.008 n=5+5) BM_UFlatSink/18 [bin_200 ] 1.88GB/s ± 5% 1.93GB/s ± 0% ~ (p=0.421 n=5+5) BM_UFlatSink/19 [sum ] 1.30GB/s ± 1% 1.37GB/s ± 1% +5.18% (p=0.008 n=5+5) BM_UFlatSink/20 [man ] 1.41GB/s ± 0% 1.41GB/s ± 1% ~ (p=0.222 n=5+5) BM_ZFlat/0 [html (22.31 %) ] 809MB/s ± 0% 814MB/s ± 1% +0.61% (p=0.016 n=5+5) BM_ZFlat/1 [urls (47.78 %) ] 423MB/s ± 0% 422MB/s ± 0% ~ (p=0.548 n=5+5) BM_ZFlat/2 [jpg (99.95 %) ] 10.8GB/s ± 3% 10.6GB/s ± 5% ~ (p=0.690 n=5+5) BM_ZFlat/3 [jpg_200 (73.00 %)] 575MB/s ± 2% 579MB/s ± 0% ~ (p=1.000 n=5+4) BM_ZFlat/4 [pdf (83.30 %) ] 7.06GB/s ± 4% 7.05GB/s ± 2% ~ (p=0.421 n=5+5) BM_ZFlat/5 [html4 (22.52 %) ] 745MB/s ± 0% 744MB/s ± 0% ~ (p=0.421 n=5+5) BM_ZFlat/6 [txt1 (57.88 %) ] 282MB/s ± 0% 282MB/s ± 1% ~ (p=1.000 n=5+5) BM_ZFlat/7 [txt2 (61.91 %) ] 261MB/s ± 0% 263MB/s ± 0% +0.55% (p=0.032 n=5+5) BM_ZFlat/8 [txt3 (54.99 %) ] 297MB/s ± 1% 297MB/s ± 0% ~ (p=1.000 n=5+5) BM_ZFlat/9 [txt4 (66.26 %) ] 245MB/s ± 0% 246MB/s ± 0% ~ (p=0.286 n=5+5) BM_ZFlat/10 [pb (19.68 %) ] 1.08GB/s ± 1% 1.08GB/s ± 0% ~ (p=0.056 n=5+5) BM_ZFlat/11 [gaviota (37.72 %)] 450MB/s ± 0% 452MB/s ± 0% +0.55% (p=0.016 n=5+5) BM_ZFlat/12 [cp (48.12 %) ] 537MB/s ± 1% 538MB/s ± 0% ~ (p=0.421 n=5+5) BM_ZFlat/13 [c (42.47 %) ] 637MB/s ± 1% 634MB/s ± 1% ~ (p=0.222 n=5+5) BM_ZFlat/14 [lsp (48.37 %) ] 684MB/s ± 1% 680MB/s ± 0% ~ (p=0.310 n=5+5) BM_ZFlat/15 [xls (41.23 %) ] 641MB/s ± 0% 640MB/s ± 1% ~ (p=0.310 n=5+5) BM_ZFlat/16 [xls_200 (78.00 %)] 501MB/s ± 9% 521MB/s ± 1% ~ (p=0.111 n=5+4) BM_ZFlat/17 [bin (18.11 %) ] 1.01GB/s ± 0% 1.02GB/s ± 1% ~ (p=0.151 n=5+5) BM_ZFlat/18 [bin_200 (7.50 %) ] 2.24GB/s ±14% 2.48GB/s ± 0% ~ (p=0.063 n=5+4) BM_ZFlat/19 [sum (48.96 %) ] 473MB/s ± 1% 485MB/s ± 1% +2.47% (p=0.008 n=5+5) BM_ZFlat/20 [man (59.21 %) ] 558MB/s ± 1% 558MB/s ± 1% ~ (p=1.000 n=5+5) |
||
|
|
81d444e4e4 |
Remove direct use of _builtin_clz.
A previous CL introduced _builtin_clz in zippy.cc. This is a GCC / Clang intrinsic, and is not supported in Visual Studio. The rest of the project uses bit manipulation intrinsics via the functions in Bits::, which are stubbed out for the open source build in zippy-stubs-internal.h. This CL extracts Bits::Log2FloorNonZero() out of Bits::Log2Floor() in the stubbed version of Bits, adds assertions to the Bits::*NonZero() functions in the stubs, and converts _builtin_clz to a Bits::Log2FloorNonZero() call. The latter part is not obvious. A mathematical proof of correctness is outlined in added comments. An empirical proof is available at https://godbolt.org/z/mPKWmh -- CalculateTableSizeOld(), which is the current code, compiles to the same assembly on Clang as CalculateTableSizeNew1(), which is the bigger jump in the proof. CalculateTableSizeNew2() is a fairly obvious transformation from CalculateTableSizeNew1(), and results in slightly better assembly on all supported compilers. Two benchmark runs with the same arguments as the original CL only showed differences in completely disjoint tests, suggesting that the differences are pure noise. |
||
|
|
925c3094c4 |
Convert DCHECK to assert.
The open source build does not support DCHECK, and this project uses assert() instead of DCHECK. |
||
|
|
f7aece15e2 | Add comment explaining MSan false-positive workaround |