Skip to content

Commit

Permalink
delta represenation
Browse files Browse the repository at this point in the history
  • Loading branch information
PatrickSteil committed Feb 11, 2025
1 parent 879162b commit 12c83b2
Show file tree
Hide file tree
Showing 8 changed files with 223 additions and 173 deletions.
35 changes: 15 additions & 20 deletions benchmark/benchmark_compress_vector.csv
Original file line number Diff line number Diff line change
@@ -1,21 +1,16 @@
name,iterations,real_time,cpu_time,time_unit,bytes_per_second,items_per_second,label,error_occurred,error_message
"BM_CreateCompressedVector/1024",139717,4984.88,4984.77,ns,,,,,
"BM_CreateCompressedVector/4096",35233,19875.4,19875.1,ns,,,,,
"BM_CreateCompressedVector/32768",4422,158386,158383,ns,,,,,
"BM_CreateCompressedVector/262144",552,1.26949e+06,1.26943e+06,ns,,,,,
"BM_CreateCompressedVector/1048576",134,5.13389e+06,5.10495e+06,ns,,,,,
"BM_IterateCompressedVector/1024",291954,2389.78,2389.75,ns,,,,,
"BM_IterateCompressedVector/4096",73441,9548.54,9548.39,ns,,,,,
"BM_IterateCompressedVector/32768",9166,76217.9,76216.2,ns,,,,,
"BM_IterateCompressedVector/262144",1142,613460,613436,ns,,,,,
"BM_IterateCompressedVector/1048576",285,2.4491e+06,2.44908e+06,ns,,,,,
"BM_Intersect_Vector/1024",935627,749.629,749.611,ns,,,,,
"BM_Intersect_Vector/4096",235347,2968.11,2968.06,ns,,,,,
"BM_Intersect_Vector/32768",29571,23672.7,23671.8,ns,,,,,
"BM_Intersect_Vector/262144",3682,190389,190384,ns,,,,,
"BM_Intersect_Vector/1048576",911,762303,762280,ns,,,,,
"BM_Intersect_CompressedVector/1024",267307,2617.4,2617.35,ns,,,,,
"BM_Intersect_CompressedVector/4096",66082,10584.1,10583.9,ns,,,,,
"BM_Intersect_CompressedVector/32768",7218,96488.4,96483.7,ns,,,,,
"BM_Intersect_CompressedVector/262144",845,831661,831650,ns,,,,,
"BM_Intersect_CompressedVector/1048576",210,3.33463e+06,3.33442e+06,ns,,,,,
"BM_Intersect_Vector/1024",847345,825.328,825.302,ns,,,,,
"BM_Intersect_Vector/4096",214503,3264.31,3264.25,ns,,,,,
"BM_Intersect_Vector/32768",26870,26127.8,26127,ns,,,,,
"BM_Intersect_Vector/262144",3348,209051,209047,ns,,,,,
"BM_Intersect_Vector/1048576",836,837596,837549,ns,,,,,
"BM_Intersect_CompressedVector/1024",240423,2917.13,2917.05,ns,,,,,
"BM_Intersect_CompressedVector/4096",59281,11782,11781.7,ns,,,,,
"BM_Intersect_CompressedVector/32768",6618,106281,106279,ns,,,,,
"BM_Intersect_CompressedVector/262144",755,924260,924248,ns,,,,,
"BM_Intersect_CompressedVector/1048576",178,3.92306e+06,3.92293e+06,ns,,,,,
"BM_Intersect_DeltaCompressedVector/1024",278786,2521.11,2521.06,ns,,,,,
"BM_Intersect_DeltaCompressedVector/4096",69740,10050.3,10050,ns,,,,,
"BM_Intersect_DeltaCompressedVector/32768",8702,80355.7,80353.9,ns,,,,,
"BM_Intersect_DeltaCompressedVector/262144",1089,641559,641524,ns,,,,,
"BM_Intersect_DeltaCompressedVector/1048576",271,2.56625e+06,2.56618e+06,ns,,,,,
160 changes: 80 additions & 80 deletions benchmark/benchmark_edge_tree.csv
Original file line number Diff line number Diff line change
@@ -1,81 +1,81 @@
name,iterations,real_time,cpu_time,time_unit,bytes_per_second,items_per_second,label,error_occurred,error_message
"BM_ComputeDescendants_Seq<EdgeTreeVec>/32",11116862,51.3409,51.3384,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeVec>/64",6306554,111.207,111.185,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeVec>/128",3008037,237.193,237.186,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeVec>/256",1393967,502.353,502.343,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeVec>/512",691157,1014.35,1014.34,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeVec>/1024",338259,2063.56,2063.51,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeVec>/2048",170331,4107.53,4107.5,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeVec>/4096",84146,8282.65,8282.52,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeVec>/8192",42138,16625.2,16622.4,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeVec>/16384",20975,33360.8,33359.8,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeMap>/32",3434303,203.827,203.8,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeMap>/64",1699882,408.19,408.172,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeMap>/128",853162,821.155,821.023,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeMap>/256",401730,1740.9,1740.86,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeMap>/512",210343,3329.56,3329.12,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeMap>/1024",102555,6823.93,6823.82,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeMap>/2048",51457,13582.8,13580.6,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeMap>/4096",25131,27916.5,27915.9,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeMap>/8192",12469,56133.1,56129.8,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeMap>/16384",6242,111727,111710,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeVec>/32",13659484,51.1033,51.102,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeVec>/64",6279807,107.411,107.392,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeVec>/128",3025104,230.568,230.564,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeVec>/256",1396885,497.958,497.928,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeVec>/512",687428,1015.59,1015.57,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeVec>/1024",338793,2068.35,2068.3,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeVec>/2048",170389,4112.45,4112.38,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeVec>/4096",84198,8242.83,8242.58,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeVec>/8192",41906,16725.1,16722.8,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeVec>/16384",20416,34230.2,34229.2,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeMap>/32",3256535,214.509,214.475,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeMap>/64",1606952,433,432.974,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeMap>/128",777787,934.074,933.968,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeMap>/256",387624,1875.04,1875,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeMap>/512",187752,3596.35,3595.71,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeMap>/1024",100210,7021.5,7021.33,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeMap>/2048",47018,14628.9,14626.5,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeMap>/4096",24377,28655.1,28654.6,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeMap>/8192",11992,58356.4,58354.9,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeMap>/16384",5779,120599,120596,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeVec>/32",924947,757.347,757.314,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeVec>/64",500845,1396.26,1396.06,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeVec>/128",278464,2519.08,2519.01,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeVec>/256",143377,4876.13,4875.38,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeVec>/512",73516,9533.06,9532.76,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeVec>/1024",37956,18479.5,18476.2,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeVec>/2048",19657,35626.7,35625.9,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeVec>/4096",9737,71416.8,71406.5,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeVec>/8192",4903,143802,143798,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeVec>/16384",1045,669437,669336,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeMap>/32",311398,2247.11,2247.07,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeMap>/64",162875,4296.95,4296.25,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeMap>/128",84638,8270.16,8270.01,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeMap>/256",44096,15999.1,15998.6,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeMap>/512",22046,31408.4,31407.7,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeMap>/1024",11382,61513.3,61511.9,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeMap>/2048",5755,122009,121987,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeMap>/4096",2891,241242,241234,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeMap>/8192",1446,484634,484562,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeMap>/16384",458,1.52102e+06,1.52097e+06,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeVec>/32",167089,4191.12,4190.47,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeVec>/64",137061,5107.36,5107.24,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeVec>/128",109877,6384.28,6382.87,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeVec>/256",88062,7948.24,7948.11,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeVec>/512",63931,10897,10896.7,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeVec>/1024",41686,16798.4,16795.8,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeVec>/2048",24268,28834.2,28833.2,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeVec>/4096",12754,54851.6,54843,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeVec>/8192",6416,108986,108981,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeVec>/16384",3146,222629,222593,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeMap>/32",127268,5497.18,5497.06,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeMap>/64",91226,7678.44,7678.21,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeMap>/128",63778,10983.9,10981.8,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeMap>/256",46710,14994.8,14994.5,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeMap>/512",30324,23078.1,23074,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeMap>/1024",18243,38388.8,38387.5,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeMap>/2048",10012,69951.5,69939.8,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeMap>/4096",5149,135940,135938,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeMap>/8192",2579,271514,271466,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeMap>/16384",633,1.10674e+06,1.10667e+06,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeVec>/32",10291940,51.1993,51.1988,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeVec>/64",6338523,110.695,110.689,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeVec>/128",3010411,237.117,237.113,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeVec>/256",1392559,502.159,502.15,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeVec>/512",688421,1013.63,1013.61,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeVec>/1024",339495,2063,2062.89,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeVec>/2048",170403,4105.78,4105.7,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeVec>/4096",84386,8295.87,8295.69,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeVec>/8192",42110,16695.2,16695,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeVec>/16384",20978,33425.1,33424.3,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeMap>/32",3308531,211.821,211.815,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeMap>/64",1709498,408.276,408.267,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeMap>/128",853602,820.885,820.866,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeMap>/256",400049,1740.78,1740.76,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeMap>/512",211071,3318.39,3318.28,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeMap>/1024",98740,7089.21,7089.07,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeMap>/2048",51570,13568.6,13568.1,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeMap>/4096",25191,27641.9,27641.1,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeMap>/8192",12564,55607.6,55604.1,ns,,,,,
"BM_ComputeDescendants_Seq<EdgeTreeMap>/16384",6250,111715,111711,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeVec>/32",13617397,51.0806,51.0799,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeVec>/64",6180092,109.684,109.681,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeVec>/128",3037198,230.824,230.82,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeVec>/256",1401386,499.964,499.947,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeVec>/512",690064,1013.67,1013.64,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeVec>/1024",338973,2066.44,2066.39,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeVec>/2048",170367,4105.97,4105.91,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeVec>/4096",84762,8264.72,8264.24,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeVec>/8192",41890,16684.4,16683.9,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeVec>/16384",20832,33676.1,33675.1,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeMap>/32",3146879,214.691,214.688,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeMap>/64",1607362,437.204,437.18,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeMap>/128",806388,868.714,868.694,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeMap>/256",376685,1867.79,1867.74,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeMap>/512",195013,3598.4,3598.32,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeMap>/1024",98858,7030.15,7029.65,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeMap>/2048",48087,14494.2,14493.7,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeMap>/4096",24522,28431,28430.5,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeMap>/8192",12090,57692.7,57690.9,ns,,,,,
"BM_ComputeDescendants_Rand<EdgeTreeMap>/16384",5856,118151,118148,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeVec>/32",920181,759.758,759.724,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeVec>/64",499069,1389.13,1389.09,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeVec>/128",278618,2516.5,2516.41,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeVec>/256",146805,4753.72,4753.55,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeVec>/512",74666,9373.13,9372.64,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeVec>/1024",37921,18451.9,18451.4,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeVec>/2048",19611,35697.3,35696.5,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeVec>/4096",9710,71936.1,71935.2,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeVec>/8192",4881,143929,143927,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeVec>/16384",1048,669108,668996,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeMap>/32",311500,2248.41,2248.33,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeMap>/64",163485,4281.06,4280.98,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeMap>/128",84567,8286.55,8286.41,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeMap>/256",43528,16114.1,16113.2,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeMap>/512",22461,31059.1,31058.4,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeMap>/1024",11415,61420.7,61419,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeMap>/2048",5775,121241,121238,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeMap>/4096",2906,241605,241596,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeMap>/8192",1439,485935,485913,ns,,,,,
"BM_RemoveSubtree_Seq<EdgeTreeMap>/16384",460,1.51944e+06,1.51933e+06,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeVec>/32",167471,4172.24,4172.14,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeVec>/64",137265,5106.25,5106.07,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeVec>/128",109267,6384.97,6384.77,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeVec>/256",88060,7944.26,7944.06,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeVec>/512",64257,10910.1,10909.9,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeVec>/1024",41387,16869.8,16869.4,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeVec>/2048",24377,28739.8,28738,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeVec>/4096",12762,54706.1,54704.7,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeVec>/8192",6484,109512,109505,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeVec>/16384",3165,220932,220928,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeMap>/32",127863,5480.85,5480.77,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeMap>/64",91851,7669.83,7669.33,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeMap>/128",63831,10960.5,10960.2,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeMap>/256",46523,15050.8,15050.4,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeMap>/512",30246,23118.8,23118.3,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeMap>/1024",18108,38612.1,38608.7,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeMap>/2048",10010,69953.8,69951.5,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeMap>/4096",5199,135010,135008,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeMap>/8192",2576,271772,271765,ns,,,,,
"BM_Remove100Subtree_Rand<EdgeTreeMap>/16384",634,1.10085e+06,1.10083e+06,ns,,,,,
Binary file modified benchmark/benchmark_intersect_plot.pdf
Binary file not shown.
84 changes: 48 additions & 36 deletions benchmark/compress_vector_bench.cpp
Original file line number Diff line number Diff line change
@@ -1,78 +1,90 @@
#include <benchmark/benchmark.h>

#include <numeric>
#include <random>
#include <vector>

#include "../datastructures/compressed_vector.h"
#include "../datastructures/utils.h"

std::vector<std::uint32_t> generateRandomNumbers(
std::size_t size, std::uint32_t max_value = 1'000'000) {
std::vector<std::uint32_t> numbers(size);
std::mt19937 rng(42);
std::uniform_int_distribution<std::uint32_t> dist(0, max_value);

for (auto& num : numbers) {
num = dist(rng);
std::vector<std::uint32_t> generateEvenNumbers(std::size_t size) {
std::vector<std::uint32_t> numbers;
numbers.reserve(size);
for (std::uint32_t i = 0; i < size - 1; i += 2) {
numbers.push_back(i);
}
numbers.push_back(size - 1); // Ensure N-1 is included
return numbers;
}

static void BM_CreateCompressedVector(benchmark::State& state) {
std::vector<std::uint32_t> numbers = generateRandomNumbers(state.range(0));

for (auto _ : state) {
CompressedVector compressed(numbers);
benchmark::DoNotOptimize(compressed);
}
}

static void BM_IterateCompressedVector(benchmark::State& state) {
std::vector<std::uint32_t> numbers = generateRandomNumbers(state.range(0));
CompressedVector compressed(numbers);

for (auto _ : state) {
std::uint32_t sum = 0;
for (auto num : compressed) {
sum += num;
}
benchmark::DoNotOptimize(sum);
std::vector<std::uint32_t> generateOddNumbers(std::size_t size) {
std::vector<std::uint32_t> numbers;
numbers.reserve(size);
for (std::uint32_t i = 1; i < size - 1; i += 2) {
numbers.push_back(i);
}
numbers.push_back(size - 1); // Ensure N-1 is included
return numbers;
}

static void BM_Intersect_Vector(benchmark::State& state) {
std::size_t N = state.range(0);
std::vector<std::uint32_t> vec(N);
std::iota(vec.begin(), vec.end(), 0); // Fill with [0, 1, 2, ..., N-1]

std::vector<std::uint32_t> query = {static_cast<std::uint32_t>(N) - 1};
std::vector<std::uint32_t> vec = generateEvenNumbers(N);
std::vector<std::uint32_t> query = generateOddNumbers(N);

for (auto _ : state) {
bool result = intersect(vec.begin(), vec.end(), query.begin(), query.end());
assert(result);
benchmark::DoNotOptimize(result);
}
}

static void BM_Intersect_CompressedVector(benchmark::State& state) {
std::size_t N = state.range(0);
std::vector<std::uint32_t> numbers(N);
std::iota(numbers.begin(), numbers.end(), 0); // Fill with [0, 1, ..., N-1]
std::vector<std::uint32_t> numbers = generateEvenNumbers(N);
std::vector<std::uint32_t> query = generateOddNumbers(N);

CompressedVector compressed(numbers);
std::vector<std::uint32_t> query = {static_cast<std::uint32_t>(N) - 1};
CompressedVector compressed_query(query);

for (auto _ : state) {
bool result = intersect(compressed.begin(), compressed.end(),
compressed_query.begin(), compressed_query.end());
assert(result);
benchmark::DoNotOptimize(result);
}
}

BENCHMARK(BM_CreateCompressedVector)->Range(1 << 10, 1 << 20);
BENCHMARK(BM_IterateCompressedVector)->Range(1 << 10, 1 << 20);
static void BM_Intersect_DeltaCompressedVector(benchmark::State& state) {
std::size_t N = state.range(0);
std::vector<std::uint32_t> numbers = generateEvenNumbers(N);
std::vector<std::uint32_t> query = generateOddNumbers(N);

CompressedVector delta_compressed;
delta_compressed.reserve(N * 5);
delta_compressed.push_back(numbers.front());
for (std::size_t i = 1; i < numbers.size(); ++i) {
delta_compressed.push_back(numbers[i] - numbers[i - 1] - 1);
}

CompressedVector delta_query;
delta_query.reserve(N * 5);
delta_query.push_back(query.front());
for (std::size_t i = 1; i < query.size(); ++i) {
delta_query.push_back(query[i] - query[i - 1] - 1);
}

for (auto _ : state) {
bool result =
intersect_delta(delta_compressed.begin(), delta_compressed.end(),
delta_query.begin(), delta_query.end());
assert(result);
benchmark::DoNotOptimize(result);
}
}

BENCHMARK(BM_Intersect_Vector)->Range(1 << 10, 1 << 20);
BENCHMARK(BM_Intersect_CompressedVector)->Range(1 << 10, 1 << 20);
BENCHMARK(BM_Intersect_DeltaCompressedVector)->Range(1 << 10, 1 << 20);

BENCHMARK_MAIN();
Loading

0 comments on commit 12c83b2

Please sign in to comment.