From 5840fa30d2f37cc3f329b9cddc0162a5f1e32800 Mon Sep 17 00:00:00 2001 From: Douglas Rumbaugh Date: Wed, 26 Jul 2023 12:04:49 -0400 Subject: Alex warmup via bulkloading --- benchmarks/alex_rq_bench.cpp | 56 +++++++++++++++++--------------------------- 1 file changed, 22 insertions(+), 34 deletions(-) (limited to 'benchmarks/alex_rq_bench.cpp') diff --git a/benchmarks/alex_rq_bench.cpp b/benchmarks/alex_rq_bench.cpp index 54df024..f75afa6 100644 --- a/benchmarks/alex_rq_bench.cpp +++ b/benchmarks/alex_rq_bench.cpp @@ -41,40 +41,26 @@ static bool build_insert_vec(std::fstream &file, std::vector &vec, size_t n, } -static bool warmup(std::fstream &file, Alex &alex, size_t count, +static Alex *warmup(std::fstream &file, size_t count, double delete_prop, std::vector to_delete, bool progress=true, bool binary=false) { size_t batch = std::min(.1 * count, 25000.0); - std::vector insert_vec; - std::vector delete_vec; - insert_vec.reserve(batch); - delete_vec.reserve(batch*delete_prop); + std::pair *insert_vec = new std::pair[count]; + Alex *alex = new Alex(); - size_t inserted = 0; - size_t delete_idx = 0; + size_t cnt = 0; + record rec; + while (cnt < count && next_record(file, rec)) { + insert_vec[cnt] = {rec.key, rec.value}; + cnt++; + } - double last_percent = 0; - while (inserted < count) { - // Build vector of records to insert and potentially delete - auto continue_warmup = build_insert_vec(file, insert_vec, batch, delete_prop, to_delete, binary); - if (inserted > batch) { - build_delete_vec(to_delete, delete_vec, batch*delete_prop); - delete_idx = 0; - } + std::sort(insert_vec, insert_vec + count); - for (size_t i=0; ibulk_load(insert_vec, count); + delete[] insert_vec; - return true; + return alex; } @@ -183,13 +169,11 @@ int main(int argc, char **argv) double max_delete_prop = delete_prop; bool use_osm = false; - double insert_batch = 0.1; + double insert_batch = 0.8; init_bench_env(record_count, true, use_osm); auto queries = read_range_queries(qfilename, .0001); - Alex alex; - std::fstream datafile; datafile.open(filename, std::ios::in | std::ios::binary); @@ -198,18 +182,22 @@ int main(int argc, char **argv) // warm up the tree with initial_insertions number of initially inserted // records size_t warmup_cnt = insert_batch * record_count; - warmup(datafile, alex, warmup_cnt, delete_prop, to_delete, true, true); + auto alex = warmup(datafile, warmup_cnt, delete_prop, to_delete, true, true); + fprintf(stderr, "Size: %ld\n", alex->size()); size_t insert_cnt = record_count - warmup_cnt; - alex_rq_insert(alex, datafile, insert_cnt, delete_prop, to_delete, true); - size_t memory_usage = alex.model_size() + alex.data_size(); + alex_rq_insert(*alex, datafile, insert_cnt, delete_prop, to_delete, true); + size_t memory_usage = alex->model_size() + alex->data_size(); + + fprintf(stderr, "Size: %ld\n", alex->size()); fprintf(stdout, "%ld\t", memory_usage); - alex_rq_bench(alex, queries); + alex_rq_bench(*alex, queries); fprintf(stdout, "\n"); delete_bench_env(); + delete alex; fflush(stdout); fflush(stderr); -- cgit v1.2.3