From fbd5f7d18980528fa0e2cc6f462c14604a34ff50 Mon Sep 17 00:00:00 2001 From: joaquintides Date: Fri, 2 Jun 2023 18:35:07 +0200 Subject: [PATCH] optimized benchmarking --- parallel_load.cpp | 91 ++++++++++++++++++++++++++++------------------- 1 file changed, 55 insertions(+), 36 deletions(-) diff --git a/parallel_load.cpp b/parallel_load.cpp index ff479766..9fde112f 100644 --- a/parallel_load.cpp +++ b/parallel_load.cpp @@ -20,7 +20,7 @@ double measure(F f) using namespace std::chrono; static const int num_trials=10; - static const milliseconds min_time_per_trial(200); + static const milliseconds min_time_per_trial(10); std::array trials; for(int i=0;i #include #include +#include #include #include #include @@ -151,43 +152,61 @@ struct parallel_load { using result_type=std::size_t; - result_type operator()(int N,double theta,int num_threads)const + BOOST_NOINLINE result_type operator()(int N,double theta,int num_threads)const { - pause_timing(); /* initializing zipf distributions is costly */ - - Map m; - std::vector threads; - std::vector results(num_threads); - zipfian_int_distribution zipf1{1,N,theta}, - zipf2{N+1,2*N,theta}; - - resume_timing(); - - for(int i=0;i dist({10,45,45}); - std::mt19937_64 gen(std::size_t(282472+i*213731)); - - updater update{zipf1}; - finder successful_find{zipf1}, - unsuccessful_find{zipf2}; - - int n=i==0?(N+num_threads-1)/num_threads:N/num_threads; - - for(int j=0;j threads; + std::vector results(num_threads); + zipfian_int_distribution zipf1{1,N,theta}, + zipf2{N+1,2*N,theta}; + std::latch ready(num_threads), + start(1), + completed(num_threads), + die(1); + + if constexpr(std::is_same_v)m.rehash(N); + + for(int i=0;i dist({10,45,45}); + std::mt19937_64 gen(std::size_t(282472+i*213731)); + + updater update{zipf1}; + finder successful_find{zipf1}, + unsuccessful_find{zipf2}; + + ready.arrive_and_wait(); + start.wait(); + + int n=i==0?(N+num_threads-1)/num_threads:N/num_threads; + + for(int j=0;j class Tester, typename Container1,typename Container2,typename Container3 > -void test( +BOOST_NOINLINE void test( const char* title,int N,double theta, const char* name1,const char* name2,const char* name3) {