323 Commits
Author SHA1 Message Date
andrew 782abc70d6 Remove custom allocator
To prepare for variable size partial keys
2024-03-08 13:02:33 -08:00
andrew 8802d17acd Remove Node::Invalid 2024-03-08 12:57:06 -08:00
andrew 02afd47d8f Node1 -> Node0 2024-03-08 12:07:47 -08:00
andrew 87dd70c4b6 Fix bug introduced in 5e1fb1dac5 2024-03-07 17:43:34 -08:00
andrew a8042ab20d Simplify firstGeq - make it not stepwise 2024-03-07 16:05:38 -08:00
andrew 1519216d08 Replace is_pod_v with is_trivial_v 2024-03-07 14:26:01 -08:00
andrew f2cd05c29d Move Node::type to beginning of Node
This prepares us to have a variable size leaf type
2024-03-07 14:17:14 -08:00
andrew 5e1fb1dac5 Use entry bytes in partial key if entry not present
Closes #8
2024-03-07 13:47:37 -08:00
andrew d1a6b293e9 Revert "Add getChildNodeGeq, use in nextLogical"
This reverts commit 53bc36f628.

Apparently this used more instructions. Not sure I understand.
2024-03-07 12:41:34 -08:00
andrew be43143891 Tidying 2024-03-07 12:33:34 -08:00
andrew 53bc36f628 Add getChildNodeGeq, use in nextLogical 2024-03-07 12:12:02 -08:00
andrew be5f1b67c8 Interface change! addWrites now takes a single write version 2024-03-05 16:55:27 -08:00
andrew ec3aec4dff Assume writeVersion highest-ever to avoid max calculation
This is measurably faster
2024-03-05 16:06:50 -08:00
andrew 760a99098a Improve coverage slightly
By moving test-only code to a test-only region. Also the skip_list
shared lib can depend on libstdc++ etc.
2024-03-04 17:04:06 -08:00
andrew e6a88852b3 Add comment explaining interface of maxBetweenExclusive 2024-03-04 16:47:30 -08:00
andrew a4b03bc216 Add example augmented radix tree figure 2024-02-29 16:35:07 -08:00
andrew 68bd39e130 Put skip list in its own shared lib
Now we can right benchmarks against one api, and just change the library
path
2024-02-27 12:02:01 -08:00
andrew 25a1226667 Fix setOldestVersion bug
We should update the oldest version even if we don't have enough
keyUpdates to do
2024-02-27 10:59:59 -08:00
andrew f38198a39d Amortize cost of pausing gc in setOldestVersion 2024-02-26 19:23:29 -08:00
andrew 3f45535f89 Fix setOldestVersion
We were not accumulating keyUpdates strictly faster than we were
spending them for a monotonically increasing workload.
2024-02-26 13:51:03 -08:00
andrew 2b0dbabb5c Add public showMemory symbol (when SHOW_MEMORY=1) 2024-02-26 13:48:20 -08:00
andrew be7f643f14 Add Node1 and SHOW_MEMORY 2024-02-26 12:25:06 -08:00
andrew 6a08bdd40e Add bitSet asserts for Node256 paths 2024-02-26 10:58:16 -08:00
andrew 333ac74d91 Use forEachInRange for overfill for Node48 2024-02-26 10:55:50 -08:00
andrew 17ac9b38fb Use forEachInRange in setChildrenParents 2024-02-26 10:37:28 -08:00
andrew 172dd40648 Check for full words on boundaries 2024-02-26 10:36:45 -08:00
andrew c97c7eee8e Speed up sparse queries 2024-02-25 23:08:01 -08:00
andrew 9fcfc44dc3 Add forEachInRange 2024-02-25 21:04:39 -08:00
andrew 0d3475e229 Use uint64_t array and fewer branches in BitSet 2024-02-24 18:20:00 -08:00
andrew adaa652d0d Remove Node::maxVersion 2024-02-23 17:27:19 -08:00
andrew 921005edb3 Add childMaxVersion 2024-02-23 17:02:46 -08:00
andrew df8d092a84 Avoid some unnecessary work 2024-02-23 14:49:42 -08:00
andrew 438a2e2abc Make sure setOldestVersion has work to do in bench 2024-02-23 14:41:05 -08:00
andrew 305c218888 Skip checking for partial key match if partial key len == 0
This saves instructions according to cachegrind
2024-02-23 14:27:20 -08:00
andrew db60782c48 Use **self directly in insert 2024-02-23 14:09:04 -08:00
andrew 4f32ecc26e Make "begin" a template parameter to insert
cachegrind says this saves instructions
2024-02-23 14:00:55 -08:00
andrew f84aa88202 Copy old node to new more efficiently
Presumably it's generating good code for the memcpy with a static size,
and hopefully also eliminating redundant stores
2024-02-23 13:31:05 -08:00
andrew 921da1cb3f Remove redundant code 2024-02-23 13:13:48 -08:00
andrew 14de4ee297 Specialize setChildrenParents for each node type
cachegrind says this increases the instruction count somehow. I'm not
sure what's going on there.
2024-02-23 13:09:42 -08:00
andrew 7136b5a450 Save more instructions in getOrCreateChild
Take advantage of the property that Node4 is a prefix of Node16
2024-02-23 12:39:24 -08:00
andrew 116c79d3de Optimize getOrCreateChild
Add fast path for if it exists

Avoid some unnecessary branches

Try to simplify some
2024-02-23 12:34:28 -08:00
andrew aaf0283f66 Prefer getChild to getChildGeq in happy path
Saves instructions according to cachegrind
2024-02-23 12:12:01 -08:00
andrew 259f47664a Save some instructions in getOrCreateChild 2024-02-22 22:46:08 -08:00
andrew 9a47f2d03a Fixed missed usages of longestCommonPrefixPartialKey 2024-02-22 16:24:26 -08:00
andrew b5d5085fd5 Add precondition back to firstNeqStride 2024-02-22 16:16:42 -08:00
andrew 40dca168ba Add precondition to longestCommonPrefixPartialKey 2024-02-22 16:07:20 -08:00
andrew 7a8233ac61 More unnesting 2024-02-22 15:50:54 -08:00
andrew 3c93b9a3ce Unnest some in checkPointRead 2024-02-22 15:43:13 -08:00
andrew c16feda9f8 Use longestCommonPrefixPartialKey in SearchStepWise 2024-02-22 15:41:39 -08:00
andrew 4c3e7aef30 Save a few instructions in SearchStepWise 2024-02-22 15:30:24 -08:00