Compare commits
32 Commits
ceecc62a63
...
inline-lea
Author | SHA1 | Date | |
---|---|---|---|
55e23bafba | |||
235938b5aa | |||
8b71852495 | |||
e5e6402b43 | |||
61f5612e1f | |||
406b27936c | |||
7972ed919b | |||
0619b6325c | |||
7b14c8f9d5 | |||
22632fc9f2 | |||
1fccb65bd8 | |||
ee5972f946 | |||
7166811387 | |||
d68f208d9b | |||
81323972aa | |||
8694ba8b6a | |||
0cea5565b5 | |||
972f16ed8f | |||
2412684316 | |||
8190d2f24e | |||
8251631087 | |||
90fb2a9542 | |||
7c01f8ba0f | |||
0df2db7f8a | |||
5e975f3b2b | |||
bcbae026b2 | |||
e125b599b5 | |||
3f4d3b685a | |||
4198b8b090 | |||
8757d2387c | |||
4a22b95d53 | |||
03d6c7e471 |
@@ -32,12 +32,8 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||
endif()
|
||||
|
||||
add_compile_options(
|
||||
-Werror=switch-enum
|
||||
-Wswitch-enum
|
||||
-Wunused-variable
|
||||
-fPIC
|
||||
-fdata-sections
|
||||
-ffunction-sections
|
||||
# -Werror=switch-enum
|
||||
-Wswitch-enum -Wunused-variable -fPIC -fdata-sections -ffunction-sections
|
||||
-fno-jump-tables # https://github.com/llvm/llvm-project/issues/54247
|
||||
)
|
||||
|
||||
@@ -102,8 +98,6 @@ option(DISABLE_TSAN "Disable TSAN" OFF)
|
||||
# https://valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.clientreq
|
||||
include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/third_party/valgrind)
|
||||
|
||||
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Wno-invalid-offsetof>)
|
||||
|
||||
if(APPLE)
|
||||
add_link_options(-Wl,-dead_strip)
|
||||
else()
|
||||
|
2540
ConflictSet.cpp
2540
ConflictSet.cpp
File diff suppressed because it is too large
Load Diff
44
README.md
44
README.md
@@ -7,7 +7,7 @@ Hardware for all benchmarks is an AMD Ryzen 9 7900 with (2x32GB) 5600MT/s CL28-3
|
||||
```
|
||||
$ clang++ --version
|
||||
|
||||
Ubuntu clang version 20.0.0 (++20241119082716+7e85cb8a8a9d-1~exp1~20241119082825.551)
|
||||
Ubuntu clang version 20.0.0 (++20241120082228+86734c857724-1~exp1~20241120202359.554)
|
||||
Target: x86_64-pc-linux-gnu
|
||||
Thread model: posix
|
||||
InstalledDir: /usr/lib/llvm-20/bin
|
||||
@@ -19,30 +19,30 @@ InstalledDir: /usr/lib/llvm-20/bin
|
||||
|
||||
| ns/op | op/s | err% | ins/op | cyc/op | IPC | bra/op | miss% | total | benchmark
|
||||
|--------------------:|--------------------:|--------:|----------------:|----------------:|-------:|---------------:|--------:|----------:|:----------
|
||||
| 169.16 | 5,911,582.44 | 0.0% | 3,014.03 | 855.12 | 3.525 | 504.59 | 0.0% | 2.02 | `point reads`
|
||||
| 167.17 | 5,981,796.19 | 0.0% | 2,954.16 | 845.14 | 3.495 | 490.17 | 0.0% | 2.00 | `prefix reads`
|
||||
| 250.44 | 3,992,954.35 | 0.1% | 3,592.41 | 1,265.18 | 2.839 | 629.31 | 0.0% | 2.99 | `range reads`
|
||||
| 467.10 | 2,140,846.36 | 0.0% | 4,450.57 | 2,488.36 | 1.789 | 707.92 | 2.1% | 5.62 | `point writes`
|
||||
| 465.18 | 2,149,723.11 | 0.2% | 4,410.22 | 2,474.92 | 1.782 | 694.74 | 2.1% | 5.55 | `prefix writes`
|
||||
| 297.45 | 3,361,954.05 | 0.1% | 2,315.38 | 1,581.64 | 1.464 | 396.69 | 3.3% | 3.57 | `range writes`
|
||||
| 476.56 | 2,098,370.82 | 1.0% | 6,999.33 | 2,492.26 | 2.808 | 1,251.74 | 1.3% | 0.06 | `monotonic increasing point writes`
|
||||
| 129,455.00 | 7,724.69 | 1.0% | 807,446.67 | 698,559.40 | 1.156 | 144,584.60 | 0.8% | 0.01 | `worst case for radix tree`
|
||||
| 44.67 | 22,384,996.63 | 0.5% | 902.00 | 235.18 | 3.835 | 132.00 | 0.0% | 0.01 | `create and destroy`
|
||||
| 161.29 | 6,200,056.17 | 0.1% | 3,014.03 | 831.04 | 3.627 | 504.59 | 0.0% | 1.93 | `point reads`
|
||||
| 158.32 | 6,316,160.64 | 0.1% | 2,954.16 | 815.80 | 3.621 | 490.17 | 0.0% | 1.89 | `prefix reads`
|
||||
| 237.39 | 4,212,409.50 | 0.2% | 3,592.41 | 1,233.96 | 2.911 | 629.31 | 0.0% | 2.84 | `range reads`
|
||||
| 442.11 | 2,261,878.94 | 0.0% | 4,450.57 | 2,314.25 | 1.923 | 707.92 | 2.1% | 5.28 | `point writes`
|
||||
| 439.89 | 2,273,308.53 | 0.1% | 4,410.22 | 2,302.29 | 1.916 | 694.74 | 2.1% | 5.25 | `prefix writes`
|
||||
| 290.96 | 3,436,936.78 | 0.0% | 2,315.38 | 1,528.68 | 1.515 | 396.69 | 3.3% | 3.49 | `range writes`
|
||||
| 476.93 | 2,096,762.02 | 0.6% | 6,999.33 | 2,484.94 | 2.817 | 1,251.73 | 1.3% | 0.06 | `monotonic increasing point writes`
|
||||
| 131,736.57 | 7,590.91 | 1.1% | 807,444.50 | 704,941.71 | 1.145 | 144,584.60 | 0.9% | 0.01 | `worst case for radix tree`
|
||||
| 45.50 | 21,978,369.95 | 1.1% | 902.00 | 232.36 | 3.882 | 132.00 | 0.0% | 0.01 | `create and destroy`
|
||||
|
||||
## Radix tree (this implementation)
|
||||
|
||||
|
||||
| ns/op | op/s | err% | ins/op | cyc/op | IPC | bra/op | miss% | total | benchmark
|
||||
|--------------------:|--------------------:|--------:|----------------:|----------------:|-------:|---------------:|--------:|----------:|:----------
|
||||
| 14.11 | 70,857,435.19 | 0.1% | 247.13 | 71.03 | 3.479 | 32.64 | 0.8% | 0.17 | `point reads`
|
||||
| 15.63 | 63,997,306.79 | 0.0% | 299.99 | 78.59 | 3.817 | 42.50 | 0.4% | 0.19 | `prefix reads`
|
||||
| 36.24 | 27,590,266.59 | 0.1% | 782.70 | 182.21 | 4.296 | 106.65 | 0.2% | 0.43 | `range reads`
|
||||
| 22.72 | 44,004,627.40 | 0.1% | 376.04 | 114.33 | 3.289 | 49.97 | 0.8% | 0.27 | `point writes`
|
||||
| 40.83 | 24,494,110.04 | 0.0% | 666.07 | 205.35 | 3.244 | 101.33 | 0.3% | 0.49 | `prefix writes`
|
||||
| 43.45 | 23,016,324.00 | 0.0% | 732.33 | 218.41 | 3.353 | 111.64 | 0.1% | 0.53 | `range writes`
|
||||
| 81.46 | 12,276,650.63 | 3.6% | 1,458.85 | 411.52 | 3.545 | 280.42 | 0.1% | 0.01 | `monotonic increasing point writes`
|
||||
| 314,217.00 | 3,182.51 | 1.2% | 4,043,063.50 | 1,593,715.00 | 2.537 | 714,828.00 | 0.1% | 0.01 | `worst case for radix tree`
|
||||
| 106.79 | 9,364,602.60 | 0.5% | 2,046.00 | 539.75 | 3.791 | 329.00 | 0.0% | 0.01 | `create and destroy`
|
||||
| 12.36 | 80,885,626.43 | 0.2% | 243.56 | 63.62 | 3.828 | 31.07 | 0.6% | 0.15 | `point reads`
|
||||
| 14.18 | 70,502,196.81 | 0.1% | 297.72 | 73.13 | 4.071 | 40.31 | 0.5% | 0.17 | `prefix reads`
|
||||
| 33.44 | 29,901,623.04 | 0.1% | 767.90 | 172.42 | 4.454 | 101.32 | 0.2% | 0.40 | `range reads`
|
||||
| 19.48 | 51,342,564.70 | 0.3% | 374.45 | 100.43 | 3.728 | 48.92 | 0.5% | 0.23 | `point writes`
|
||||
| 37.46 | 26,694,471.44 | 0.1% | 672.00 | 193.14 | 3.479 | 101.28 | 0.3% | 0.45 | `prefix writes`
|
||||
| 38.78 | 25,784,784.34 | 0.0% | 738.26 | 199.93 | 3.693 | 111.59 | 0.1% | 0.47 | `range writes`
|
||||
| 76.05 | 13,148,995.74 | 0.7% | 1,450.77 | 397.16 | 3.653 | 275.72 | 0.0% | 0.01 | `monotonic increasing point writes`
|
||||
| 286,920.33 | 3,485.29 | 0.4% | 4,117,948.00 | 1,521,352.00 | 2.707 | 714,833.00 | 0.1% | 0.01 | `worst case for radix tree`
|
||||
| 95.66 | 10,453,798.72 | 0.5% | 1,986.00 | 495.04 | 4.012 | 315.00 | 0.0% | 0.01 | `create and destroy`
|
||||
|
||||
# "Real data" test
|
||||
|
||||
@@ -51,13 +51,13 @@ Point queries only. Gc ratio is the ratio of time spent doing garbage collection
|
||||
## skip list
|
||||
|
||||
```
|
||||
Check: 4.62434 seconds, 364.633 MB/s, Add: 3.90399 seconds, 147.371 MB/s, Gc ratio: 33.6898%, Peak idle memory: 5.61007e+06
|
||||
Check: 4.53508 seconds, 371.81 MB/s, Add: 3.81222 seconds, 150.919 MB/s, Gc ratio: 33.66%, Peak idle memory: 5.61007e+06
|
||||
```
|
||||
|
||||
## radix tree
|
||||
|
||||
```
|
||||
Check: 0.956689 seconds, 1762.52 MB/s, Add: 1.35744 seconds, 423.84 MB/s, Gc ratio: 35.0946%, Peak idle memory: 2.32922e+06
|
||||
Check: 0.957735 seconds, 1760.6 MB/s, Add: 1.19942 seconds, 479.678 MB/s, Gc ratio: 38.6069%, Peak idle memory: 2.05667e+06
|
||||
```
|
||||
|
||||
## hash table
|
||||
@@ -65,6 +65,6 @@ Check: 0.956689 seconds, 1762.52 MB/s, Add: 1.35744 seconds, 423.84 MB/s, Gc rat
|
||||
(The hash table implementation doesn't work on range queries, and its purpose is to provide an idea of how fast point queries can be)
|
||||
|
||||
```
|
||||
Check: 0.799863 seconds, 2108.09 MB/s, Add: 0.667736 seconds, 861.621 MB/s, Gc ratio: 35.0666%, Peak idle memory: 0
|
||||
Check: 0.804598 seconds, 2095.69 MB/s, Add: 0.671221 seconds, 857.147 MB/s, Gc ratio: 35.0034%, Peak idle memory: 0
|
||||
```
|
||||
|
||||
|
@@ -161,8 +161,8 @@ template <class... Ts> std::string tupleKey(const Ts &...ts) {
|
||||
|
||||
constexpr int kTotalKeyRange = 1'000'000'000;
|
||||
constexpr int kWindowSize = 1'000'000;
|
||||
constexpr int kNumReadKeysPerTx = 10;
|
||||
constexpr int kNumWriteKeysPerTx = 5;
|
||||
constexpr int kNumReadKeysPerTx = 5;
|
||||
constexpr int kNumWriteKeysPerTx = 10;
|
||||
|
||||
struct Transaction {
|
||||
std::vector<std::string> keys;
|
||||
|
BIN
corpus/05802ff3945dce77412442bf5888cc26c29c56f1
Normal file
BIN
corpus/05802ff3945dce77412442bf5888cc26c29c56f1
Normal file
Binary file not shown.
BIN
corpus/09eb955d066ba378b772ae39b5402fc346869b92
Normal file
BIN
corpus/09eb955d066ba378b772ae39b5402fc346869b92
Normal file
Binary file not shown.
BIN
corpus/13c843559282b726977d85eacaf35a826527c96b
Normal file
BIN
corpus/13c843559282b726977d85eacaf35a826527c96b
Normal file
Binary file not shown.
BIN
corpus/146b83c2813999c1edb8899343c627c6ef69a4fa
Normal file
BIN
corpus/146b83c2813999c1edb8899343c627c6ef69a4fa
Normal file
Binary file not shown.
BIN
corpus/162e6a41d2e4317685a27915decf6b12320101f6
Normal file
BIN
corpus/162e6a41d2e4317685a27915decf6b12320101f6
Normal file
Binary file not shown.
BIN
corpus/1b4963ae3d371d8859507f41a768fee48abb63c6
Normal file
BIN
corpus/1b4963ae3d371d8859507f41a768fee48abb63c6
Normal file
Binary file not shown.
BIN
corpus/1bb0d3ae30bcfd86a68f38da3ea1fa492ab00d91
Normal file
BIN
corpus/1bb0d3ae30bcfd86a68f38da3ea1fa492ab00d91
Normal file
Binary file not shown.
BIN
corpus/2147648e2dedf87695ab37da36c261249409429e
Normal file
BIN
corpus/2147648e2dedf87695ab37da36c261249409429e
Normal file
Binary file not shown.
BIN
corpus/2fc82c545b7655644d89bfb2e992a0407f33609e
Normal file
BIN
corpus/2fc82c545b7655644d89bfb2e992a0407f33609e
Normal file
Binary file not shown.
BIN
corpus/356670ac6fc960add9fbd8b2919603ac553f44b0
Normal file
BIN
corpus/356670ac6fc960add9fbd8b2919603ac553f44b0
Normal file
Binary file not shown.
BIN
corpus/3650fdfa4404236224ceb7755858bf97e0171640
Normal file
BIN
corpus/3650fdfa4404236224ceb7755858bf97e0171640
Normal file
Binary file not shown.
BIN
corpus/38afc68aed0f7a24120276e1de6b070eff89bb68
Normal file
BIN
corpus/38afc68aed0f7a24120276e1de6b070eff89bb68
Normal file
Binary file not shown.
BIN
corpus/3e3d7a860105072df5049a18635b1d98b55bcb2e
Normal file
BIN
corpus/3e3d7a860105072df5049a18635b1d98b55bcb2e
Normal file
Binary file not shown.
BIN
corpus/3f8dc957d2c454fbb3a09c3da9228581e22c6f19
Normal file
BIN
corpus/3f8dc957d2c454fbb3a09c3da9228581e22c6f19
Normal file
Binary file not shown.
BIN
corpus/4344bc3acd529fa28222f5c19dd3be7baa1ee830
Normal file
BIN
corpus/4344bc3acd529fa28222f5c19dd3be7baa1ee830
Normal file
Binary file not shown.
BIN
corpus/4775359275828b7bde4f01b66ad298f698a33235
Normal file
BIN
corpus/4775359275828b7bde4f01b66ad298f698a33235
Normal file
Binary file not shown.
BIN
corpus/5ed2ebf1ca3bed6ae913c97c653617e831eca3e8
Normal file
BIN
corpus/5ed2ebf1ca3bed6ae913c97c653617e831eca3e8
Normal file
Binary file not shown.
BIN
corpus/5fdc212fccd64161b4988746fd6f639478b10b1f
Normal file
BIN
corpus/5fdc212fccd64161b4988746fd6f639478b10b1f
Normal file
Binary file not shown.
BIN
corpus/68ef897400d07d5efd787fa3ebe973461a50335f
Normal file
BIN
corpus/68ef897400d07d5efd787fa3ebe973461a50335f
Normal file
Binary file not shown.
BIN
corpus/6ba4970c96fe05f6fc21e1abf8cbdbc8754a5cd5
Normal file
BIN
corpus/6ba4970c96fe05f6fc21e1abf8cbdbc8754a5cd5
Normal file
Binary file not shown.
BIN
corpus/74797d0059e6507099d8630a55539d7a33604e87
Normal file
BIN
corpus/74797d0059e6507099d8630a55539d7a33604e87
Normal file
Binary file not shown.
BIN
corpus/7b5306785245d610602d365730a26403731c76ed
Normal file
BIN
corpus/7b5306785245d610602d365730a26403731c76ed
Normal file
Binary file not shown.
BIN
corpus/81dde1ddd68ae192289b273027f960ebb8d31a9d
Normal file
BIN
corpus/81dde1ddd68ae192289b273027f960ebb8d31a9d
Normal file
Binary file not shown.
BIN
corpus/9797810807ffe3367320b92bdcddbde793d7d69a
Normal file
BIN
corpus/9797810807ffe3367320b92bdcddbde793d7d69a
Normal file
Binary file not shown.
BIN
corpus/9c4cd5f6eff5d90f61b4cbd2ea6c2df3f0f4e0e0
Normal file
BIN
corpus/9c4cd5f6eff5d90f61b4cbd2ea6c2df3f0f4e0e0
Normal file
Binary file not shown.
BIN
corpus/9d20e4df4fc4313547dec93c4d96b08af04b0a01
Normal file
BIN
corpus/9d20e4df4fc4313547dec93c4d96b08af04b0a01
Normal file
Binary file not shown.
BIN
corpus/a27d4173b97e66466a11cd319643a1fe284c703d
Normal file
BIN
corpus/a27d4173b97e66466a11cd319643a1fe284c703d
Normal file
Binary file not shown.
BIN
corpus/a7b2e20b5a102718652bd06aab011b899b5e7f16
Normal file
BIN
corpus/a7b2e20b5a102718652bd06aab011b899b5e7f16
Normal file
Binary file not shown.
BIN
corpus/ae740dc97d10c4533b2d621b5e8c6eb180e0ac3f
Normal file
BIN
corpus/ae740dc97d10c4533b2d621b5e8c6eb180e0ac3f
Normal file
Binary file not shown.
BIN
corpus/b180fbf3ea318586bfb000ee40d03ba190b5339b
Normal file
BIN
corpus/b180fbf3ea318586bfb000ee40d03ba190b5339b
Normal file
Binary file not shown.
BIN
corpus/ba7b425a709f448aa87f6f7bf7bbd10b5aa92562
Normal file
BIN
corpus/ba7b425a709f448aa87f6f7bf7bbd10b5aa92562
Normal file
Binary file not shown.
BIN
corpus/c0a13d84dc3ddbda6cf633eebe566f8d196c37c0
Normal file
BIN
corpus/c0a13d84dc3ddbda6cf633eebe566f8d196c37c0
Normal file
Binary file not shown.
BIN
corpus/c6d06bfdcd88cecf03435c20fd960c289c785f1e
Normal file
BIN
corpus/c6d06bfdcd88cecf03435c20fd960c289c785f1e
Normal file
Binary file not shown.
BIN
corpus/e411378b91e516d38344bc091db259ea55fbbb5e
Normal file
BIN
corpus/e411378b91e516d38344bc091db259ea55fbbb5e
Normal file
Binary file not shown.
BIN
corpus/e9cdcce34e9115d6e5ce5757d85e5524b32f9519
Normal file
BIN
corpus/e9cdcce34e9115d6e5ce5757d85e5524b32f9519
Normal file
Binary file not shown.
BIN
corpus/ed8ceeff3c0f16c3d414819853a9025686564b4e
Normal file
BIN
corpus/ed8ceeff3c0f16c3d414819853a9025686564b4e
Normal file
Binary file not shown.
BIN
corpus/f5b07cda741a6d421b6152aac79020b8247a9160
Normal file
BIN
corpus/f5b07cda741a6d421b6152aac79020b8247a9160
Normal file
Binary file not shown.
Reference in New Issue
Block a user