Commit Graph
523 Commits
Author SHA1 Message Date
andrew 567d385fbd WIP create child in getOrCreateChild 2024-08-12 16:11:16 -07:00
andrew 8a44055533 Consume first byte in insert iteration 2024-08-12 15:39:09 -07:00
andrew 3d592bd6a9 Move longestCommonPrefix to its own file 2024-08-12 15:10:05 -07:00
andrew f5f5fb620b Run gc at 200%
150% pessimized the "real data" benchmark
2024-08-12 10:48:24 -07:00
andrew 182c065c8e Insert common prefix in addWriteRange
This allows us to use our optimized implementation for setting max
version along the search path instead of a one-off loop
2024-08-09 14:57:04 -07:00
andrew 2dba0d5be3 Have insert return a pointer to the in-tree pointer 2024-08-09 13:58:31 -07:00
andrew a1dfdf355c Use metrics to count change in entry count
This lets us run gc slower safely
2024-08-09 13:44:49 -07:00
andrew ac98d4a443 Remove always_inline attribute - it wasn't affecting codegen 2024-08-08 10:44:54 -07:00
andrew 7d86beb14c Revert 29c05187fb
We're already doing this in checkRangeStartsWith
2024-08-07 16:51:23 -07:00
andrew 2fa954ed36 Fix compiler warning 2024-08-07 16:25:49 -07:00
andrew ded6e7fc2c Require entry present for fixupMaxVersion 2024-08-06 17:59:38 -07:00
andrew 781ba15cae Enforce that root does not have a partial key 2024-08-06 17:55:33 -07:00
andrew 29c05187fb Early return if common prefix isn't a prefix of an entry
For range reads
2024-08-06 15:32:44 -07:00
andrew d89028dd2f Inline SearchStepWise into checkRangeRead
This improves clang codegen
2024-08-06 14:45:52 -07:00
andrew 09cf807747 Avoid some branches on node type while inserting 2024-08-06 13:51:49 -07:00
andrew 051eb5919d Extract consumePartialKey to its own function 2024-08-06 13:20:44 -07:00
andrew ed5589e4ed Specialize partial key split for newly created Node3 2024-08-06 13:04:19 -07:00
andrew a7b3d8fe4c Clarify insert documentation 2024-08-06 11:29:33 -07:00
andrew c3a047fdf8 Handle newly-created node partial key immediately 2024-08-06 09:22:21 -07:00
andrew b4b469a175 Use maxOfMax in fixupMaxVersion 2024-08-05 21:41:49 -07:00
andrew 0201e27498 Remove redundant setMaxVersion calls 2024-08-05 19:29:38 -07:00
andrew 2010920a2c Correct comment 2024-08-05 19:28:24 -07:00
andrew 19af8da65c Fix endNode's max version after the fact
This sets us up to unconditionally update the max version along the
search path for inserts, and avoid dispatching on type twice per
iteration.
2024-08-05 17:50:26 -07:00
andrew 80785e3c3b Avoid switch on parent type for max version during search 2024-08-05 16:40:58 -07:00
andrew f5d021d6b6 Add multi-version rezero16 2024-08-03 14:22:50 -07:00
andrew 1c41605b53 Use std::countr_zero instead of __builtin_ctz
Doesn't seem to affect codegen in these cases.
2024-08-03 10:01:12 -07:00
andrew 8f03a105bb Use target avx512f,avx512bw
Appears to fix gcc build
2024-08-02 21:47:23 -07:00
andrew 0e574856be Make checkMaxBetweenExclusive a multi-version function
This introduces more branches but reduces code size
2024-08-02 21:09:55 -07:00
andrew 493a6572ad Only exclude avx512-targeted functions from coverage 2024-08-02 20:53:30 -07:00
andrew abce4591d0 Fix preprocessor guard for avx512 longestCommonPrefix 2024-08-02 20:46:32 -07:00
andrew f1ad68109a Skip lcp call in SearchStepWise if no partial key 2024-08-02 18:16:55 -07:00
andrew c4443bc355 Remove len < 8 check in longestCommonPrefix
Micro benchmarks look a tiny bit better /shrug
2024-08-02 18:16:55 -07:00
andrew 857b402fe2 Add an avx512bw longestCommonPrefix 2024-08-02 18:16:55 -07:00
andrew 9b3e1b219b Remove small memmoves in erase 2024-08-02 18:16:55 -07:00
andrew ab52c63935 Move local accum's into ReadContext 2024-08-02 18:16:55 -07:00
andrew bad9d7ced8 Avoid some tls lookups for InternalVersionT::zero 2024-08-02 18:16:55 -07:00
andrew c8d9dc034d Remove memmove call for inserting into Node16 2024-08-02 18:16:55 -07:00
andrew 72168ef6a3 Avoid memmove when inserting into Node3 2024-08-02 18:16:55 -07:00
andrew 7351b6e417 More gcovr exclusions for function multi-versioning 2024-08-01 15:53:38 -07:00
andrew ca804f28c0 Get back to 100% line coverage locally 2024-08-01 15:31:38 -07:00
andrew 3898cb596a Use _mm512_loadu_epi32 instead of memcpy
The latter somehow generated a vmovdqa64 instruction that segfaulted on
unaligned memory, with gcc and --coverage. Hmm.
2024-08-01 15:24:09 -07:00
andrew b8edd92698 Fix warning 2024-08-01 15:23:43 -07:00
andrew 4113183155 Attempt to fix likely arm bug 2024-08-01 14:01:41 -07:00
andrew adb8fdc5e9 Simplify nextPhysical 2024-08-01 14:00:02 -07:00
andrew c86e407985 Return Node from getChildGeq
It seems all callers ultimately want this
2024-08-01 13:53:18 -07:00
andrew 71a84057cb Find two more call sites for getFirstChildExists 2024-08-01 13:37:44 -07:00
andrew 9c5e5863c2 Simplify remaining "down left spine" loops 2024-08-01 13:17:33 -07:00
andrew be67555756 Simplify more "down left spine" loops 2024-08-01 13:13:55 -07:00
andrew 988ec5ce69 Add getFirstChildExists 2024-08-01 13:05:40 -07:00
andrew f5a0d81c52 Remove some redundant branches
I think they were getting optimized out, but still
2024-08-01 12:37:57 -07:00