From b1e4182825e6c162571b7cc4efaf8bc44055b49c Mon Sep 17 00:00:00 2001 From: Douglas Rumbaugh Date: Mon, 22 Jan 2024 12:10:54 -0500 Subject: Adjusted recon_benchmark and properly shutdown FIFOScheduler --- benchmarks/reconstruction_interference.cpp | 36 ++++++++++++++++++---------- include/framework/scheduling/FIFOScheduler.h | 1 + 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/benchmarks/reconstruction_interference.cpp b/benchmarks/reconstruction_interference.cpp index 5cf364a..c4c8c1b 100644 --- a/benchmarks/reconstruction_interference.cpp +++ b/benchmarks/reconstruction_interference.cpp @@ -19,6 +19,8 @@ typedef de::ISAMTree ISAM; typedef de::rc::Query Q; typedef de::DynamicExtension Ext; +volatile std::atomic queries_done; + void query_thread(Ext *extension, double selectivity, size_t k) { TIMER_INIT(); @@ -60,10 +62,9 @@ Ext *build_structure(size_t n) { return extension; } -void query_benchmark(double selectivity, size_t k, Ext *extension) { +void query_benchmark(double selectivity, size_t k, Ext *extension, size_t query_thrd_cnt) { TIMER_INIT(); - size_t query_thrd_cnt = 4; std::vector thrds(query_thrd_cnt); TIMER_START(); @@ -78,6 +79,8 @@ void query_benchmark(double selectivity, size_t k, Ext *extension) { auto query_lat = TIMER_RESULT(); fprintf(stdout, "Q\t%ld\t%ld\t%ld\t%ld\n", extension->get_record_count(), query_lat, k, query_thrd_cnt); + + queries_done.store(true); } int main(int argc, char **argv) { @@ -91,21 +94,30 @@ int main(int argc, char **argv) { /* build initial structure */ auto extension = build_structure(n); - /* benchmark queries w/o any interference from reconstructions */ - query_benchmark(selectivity, per_trial, extension); + std::vector thread_counts = {8, 16, 32, 64, 128}; + + for (auto &threads : thread_counts) { + /* benchmark queries w/o any interference from reconstructions */ + query_benchmark(selectivity, per_trial, extension, threads); + + fprintf(stderr, "Running interference test...\n"); - fprintf(stderr, "Running interference test...\n"); + queries_done.store(false); + /* trigger a worst-case reconstruction and benchmark the queries */ - /* trigger a worst-case reconstruction and benchmark the queries */ - std::thread q_thrd(query_benchmark, selectivity, per_trial, extension); - auto s = extension->create_static_structure(); - fprintf(stderr, "Construction complete\n"); - q_thrd.join(); + std::thread q_thrd(query_benchmark, selectivity, per_trial, extension, threads); + + while (!queries_done.load()) { + auto s = extension->create_static_structure(); + delete s; + } + + fprintf(stderr, "Construction complete\n"); + q_thrd.join(); + } extension->print_scheduler_statistics(); - delete extension; - delete s; fflush(stderr); } diff --git a/include/framework/scheduling/FIFOScheduler.h b/include/framework/scheduling/FIFOScheduler.h index b77a8a1..0df4d3c 100644 --- a/include/framework/scheduling/FIFOScheduler.h +++ b/include/framework/scheduling/FIFOScheduler.h @@ -45,6 +45,7 @@ public: } m_sched_thrd.join(); + m_sched_wakeup_thrd.join(); } void schedule_job(std::function job, size_t size, void *args, size_t type=0) { -- cgit v1.2.3