andrew
bb84792cff
Use avx512f across entire checkRangeRead call tree
...
Keeping the avx fallback
2024-07-01 13:07:34 -07:00
andrew
66bd799f05
Fix hasty change about end invariants
...
`end` is allowed to be <= 0 at the beginning of
checkMaxBetweenExclusive, but not later after checking for the first
range version.
2024-06-30 21:20:05 -07:00
andrew
2646d5eaf1
Get back to 100% coverage
...
Closes #30
This is achieved by running libfuzzer with USE_32_BIT_VERSIONS={OFF,ON},
and then combining the corpora. I suspect that the problem earlier was
that we only had the 32 bit corpus but were measuring coverage for 64
bit in jenkins.
2024-06-30 21:15:42 -07:00
andrew
0367ba9856
Fast path for prefix reads
2024-06-30 20:33:54 -07:00
andrew
a68ad5dd17
Interface change! Return TooOld after 2e9 versions
...
Event if setOldestVersion wasn't called
2024-06-30 15:28:51 -07:00
andrew
8e3eacb54f
Apply function multi versioning higher in call stack to save branches
2024-06-30 13:30:44 -07:00
andrew
c52d50f4f9
Remove bounds from forEachInRange
2024-06-29 22:53:51 -07:00
andrew
447da11d59
Remove obsolete optimizations
...
These are a relic of when we used forEachInRange for checkMaxBetween
2024-06-29 22:47:42 -07:00
andrew
daa8e02d4f
Fixes from testing on an avx512f-capable machine
2024-06-29 22:41:39 -07:00
andrew
fd3ea2c2a8
clang-format fixes
2024-06-29 22:21:50 -07:00
andrew
0b839b9d7e
Fixes for symbol multi-versioning with avx512f
2024-06-29 22:20:50 -07:00
andrew
11a022dcf7
Attempt at avx512f 32bit compare
2024-06-29 21:56:21 -07:00
andrew
94da4c72a5
Fix clang-format
2024-06-29 15:11:40 -07:00
andrew
461e07822a
32-bit x86 simd for the other scan16 too
2024-06-29 15:10:36 -07:00
andrew
75499543e7
Fix clang-format
2024-06-29 15:03:44 -07:00
andrew
81f44d352f
SIMD scan16 for x86 + 32-bit versions
2024-06-29 15:01:18 -07:00
andrew
45da8fb996
Use the faster unvectorized implementation for Node3
2024-06-28 22:52:39 -07:00
andrew
4958a4cced
Make always_inline function inline
...
Try to fix warning in jenkins
2024-06-28 22:42:01 -07:00
andrew
648b0b9238
Add an always_inline, with explanatory comment
2024-06-28 19:55:33 -07:00
andrew
d3f4afa167
More SIMD for scanning Node256 with 32-bit versions
2024-06-28 19:48:06 -07:00
andrew
f762add4d6
Write vectorized 32-bit compare by hand for arm in scan16
2024-06-28 17:28:59 -07:00
andrew
b311e5f1f0
Add an experimental, disabled 32 bit internal version
...
I think it's only missing detection for full-precision versions more
than 2e9 apart
2024-06-28 15:53:35 -07:00
andrew
ff81890921
Rename MaxVersionT to InternalVersionT
2024-06-28 14:34:48 -07:00
andrew
0e96177f5c
Allow to easily experiment with 32 bit "max version" type
2024-06-28 13:54:12 -07:00
andrew
efb0e52a0a
SIMD implementation of scan16 for x86
...
Closes #29
2024-06-27 22:21:41 -07:00
andrew
2df7000090
Remove switch on phase from Stepwise left/right step
2024-06-27 20:51:35 -07:00
andrew
5378a06c39
Vectorize all bounds checks for Node256 scan
2024-06-27 17:40:23 -07:00
andrew
12c6ed2568
Reorganize to prepare for better vectorized first/last page
2024-06-27 17:21:41 -07:00
andrew
c065b185ae
Vectorize inner page check for Node256
2024-06-27 17:09:45 -07:00
andrew
639518bed4
Share "scan16" between Node16 and Node48
2024-06-27 13:22:51 -07:00
andrew
7de983cc15
Simd bounds checking for scan for Node16
2024-06-27 13:08:12 -07:00
andrew
1b4b61ddc6
Write Node16 scan in a "more vectorized" style
2024-06-27 12:07:38 -07:00
andrew
bff7b85de2
Remove "Child" struct
2024-06-27 10:03:14 -07:00
andrew
9108ee209a
SoA instead of AoS for child, maxVersion
2024-06-27 09:57:54 -07:00
andrew
f8bf1c6eb4
Remove unreachable code
2024-06-26 22:14:27 -07:00
andrew
4da2a01614
Use single &, to show branch-free intent
2024-06-26 22:14:05 -07:00
andrew
bb0e654040
Fix missed update for Node48::maxOfMax
2024-06-26 22:11:33 -07:00
andrew
02866a8cae
Save some bounds checking for scanning Node256
2024-06-26 20:55:18 -07:00
andrew
fa86d3e707
"max of max" for Node48 again, but physical instead of logical
2024-06-26 20:41:27 -07:00
andrew
7d1d1d7b2a
Maintain childMaxVersion == 0 for unused children in Node48
2024-06-26 20:16:50 -07:00
andrew
789ecc29b3
Use unsigned compare trick to check in bounds
2024-06-26 19:41:25 -07:00
andrew
08f2998a85
Use 8 byte pages for "max of max"
...
This seems to benchmark better
2024-06-26 19:18:38 -07:00
andrew
c882d7663d
Maintain "reverseIndex" in Node48
2024-06-26 19:11:34 -07:00
andrew
bfea4384ba
Branchless inner page check for Node256
2024-06-26 18:28:41 -07:00
andrew
6520e3d734
"max of max" for Node48
2024-06-26 17:54:03 -07:00
andrew
22e4ab01a1
Track "max of max" versions in Node256
2024-06-26 16:28:24 -07:00
andrew
b3aeed0caa
Warning: interface change! Require versions >= 0
2024-06-26 15:46:36 -07:00
andrew
5f3833e965
Change maxVersion to return by value, and add setMaxVersion
2024-06-26 15:33:15 -07:00
andrew
8b1cd9c052
Minor improvements to checkMaxBetweenExclusive
2024-06-26 15:06:50 -07:00
andrew
488c723726
Improve worst-case radix tree checkRangeRead
2024-06-25 21:22:55 -07:00