Jun He
aeb5de55a9
decompress: refine data depdency
...
The final ip advance value doesn't have to wait for
the result of offset to load *tag. It can be computed
along with the offset, so the codegen will use one
csinc in parallel with ldrb. This will improve the
throughput.
With this change it is observed ~4.2% uplift in UFlat/10
and ~3.7% in UFlatMedley
Signed-off-by: Jun He <jun.he@arm.com >
Change-Id: I20ab211235bbf578c6c978f2bbd9160a49e920da
2021-08-30 09:51:37 +08:00
Victor Costan
b9c9a989b2
Merge pull request #135 from JunHe77:remove_extra
...
PiperOrigin-RevId: 390767998
2021-08-14 08:15:44 +00:00
Victor Costan
5c87bc61b6
Merge pull request #136 from JunHe77:ext_arm
...
PiperOrigin-RevId: 390715690
2021-08-13 23:24:49 +00:00
Jun He
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
2021-08-12 15:19:53 +08:00
Jun He
f52721b2b4
decompression: optimize ExtractOffset for Arm
...
Inspired by kExtractMasksCombined, this patch uses shift
to replace table lookup. On Arm the codegen is 2 shift ops
(lsl+lsr). Comparing to previous ldr which requires 4 cycles
latency, the lsl+lsr only need 2 cycles.
Slight (~0.3%) uplift observed on N1, and ~3% on A72.
Signed-off-by: Jun He <jun.he@arm.com >
Change-Id: I5b53632d22d9e5cf1a49d0c5cdd16265a15de23b
2021-08-06 15:44:27 +08:00
Snappy Team
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
2021-08-02 14:50:16 +00:00
Snappy Team
c8f7641646
Remove inline assembly as the bug in clang was fixed
...
PiperOrigin-RevId: 387356237
2021-08-02 14:50:09 +00:00
Snappy Team
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
2021-08-02 14:49:57 +00:00
Snappy Team
b4888f7616
Optimize tag extraction for ARM with conditional increment instruction generation (csinc). For codegen see https://gcc.godbolt.org/z/a8z9j95Pv
...
PiperOrigin-RevId: 382688740
2021-07-05 01:05:54 +00:00
atdt
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
2021-07-05 01:05:44 +00:00
Victor Costan
5f913be04e
Fix unused local variable warnings.
...
This will not change the compilation output.
PiperOrigin-RevId: 347525836
2020-12-15 04:14:46 +00:00
Victor Costan
8995ffabb9
Replace #pragma nounroll with equivalent used elsewhere.
...
PiperOrigin-RevId: 347341130
2020-12-14 09:59:34 +00:00
Victor Costan
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
2020-12-14 09:59:23 +00:00
Snappy Team
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
2020-12-14 02:48:03 +00:00
Shahriar Rouf
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
2020-12-14 02:47:49 +00:00
Snappy Team
56c2c247d0
Internal change
...
PiperOrigin-RevId: 345360683
2020-12-03 22:52:52 +00:00
Shahriar Rouf
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
2020-12-03 22:52:41 +00:00
Snappy Team
01a566f825
Fix opensource version
...
PiperOrigin-RevId: 343272548
2020-11-19 17:06:26 +00:00
Snappy Team
719bed0ae2
Bug fix. Error on 0 offset copies.
...
PiperOrigin-RevId: 342447553
2020-11-18 23:21:47 +00:00
Snappy Team
289c8a3c0a
Make zippy decompression branchless
...
PiperOrigin-RevId: 342423961
2020-11-18 23:21:38 +00:00
Snappy Team
3bfa265a04
Revert zippy optimization that causes heap buffer overflows.
...
PiperOrigin-RevId: 342283314
2020-11-18 23:21:30 +00:00
Shahriar Rouf
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
2020-11-18 23:21:21 +00:00
Luca Versari
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
2020-11-18 23:20:58 +00:00
Snappy Team
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
2020-11-03 20:30:24 +00:00
Luca Versari
0b990db2b8
Run clang-format
...
PiperOrigin-RevId: 339897712
2020-11-03 20:30:11 +00:00
Snappy Team
4dd277fed4
Replace the division with a constant table in IncrementalCopy
...
PiperOrigin-RevId: 320686580
2020-07-11 01:54:52 +00:00
Snappy Team
f16eda3466
Correct uninitialized variable.
...
PiperOrigin-RevId: 312741918
2020-06-01 23:46:44 +00:00
Victor Costan
c98344f626
Fix Clang/GCC compilation warnings.
...
This makes it easier to adopt snappy in other projects.
PiperOrigin-RevId: 309958249
2020-05-05 16:15:02 +00:00
Victor Costan
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
2020-05-04 12:32:00 +00:00
Victor Costan
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
2020-04-29 19:38:03 +00:00
Victor Costan
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
2020-04-13 19:51:05 +00:00
Victor Costan
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
2020-04-12 20:10:03 +00:00
Victor Costan
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
2020-04-12 00:06:15 +00:00
Snappy Team
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
2020-04-11 04:41:15 +00:00
Snappy Team
4dfcad9f4e
assertion failure on darwin_x86_64, have to investigage
...
PiperOrigin-RevId: 303428229
2020-04-11 04:41:07 +00:00
Snappy Team
e19178748f
assertion failure on darwin_x86_64, have to investigage
...
PiperOrigin-RevId: 303346402
2020-04-11 04:40:57 +00:00
Snappy Team
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
2020-04-11 04:40:48 +00:00
Snappy Team
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
2020-04-11 04:40:39 +00:00
Snappy Team
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
2020-04-11 04:40:29 +00:00
Snappy Team
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
2020-04-11 04:40:20 +00:00
Snappy Team
cddd9c0875
Improve comments in IncrementalCopy, add an assert.
...
PiperOrigin-RevId: 292506754
2020-04-11 04:40:09 +00:00
Snappy Team
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
2020-01-14 10:58:42 -08:00
Victor Costan
62363d9a79
Fully qualify std::string.
...
This is in preparation for removing the snappy::string alias
of std::string.
PiperOrigin-RevId: 271383199
2019-09-26 10:57:29 -07:00
Shahriar Rouf
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
2019-08-19 14:30:00 -07:00
Chris Mumford
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
2019-05-14 11:02:57 -07:00
atdt
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
2019-05-13 10:11:12 -07:00
nafi
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)
2019-02-26 18:27:31 -08:00
costan
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.
2019-01-08 13:49:15 -08:00
costan
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)
2019-01-08 13:48:30 -08:00
costan
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.
2019-01-08 06:44:11 -08:00