From 664d99bdfd7e0cce9daefbb27127476ea121f08b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Fri, 13 May 2016 00:35:44 +0200 Subject: [PATCH] Added BENCH_SORT|MERGE_UNIQUE_VALUES to speed up regression tests --- proj/vc7ide/Move.sln | 4 ++-- test/bench_merge.cpp | 31 +++++++++++++++++++++---------- test/bench_sort.cpp | 25 ++++++++++++++++++++++--- 3 files changed, 45 insertions(+), 15 deletions(-) diff --git a/proj/vc7ide/Move.sln b/proj/vc7ide/Move.sln index 6a1d7a4..cde7565 100644 --- a/proj/vc7ide/Move.sln +++ b/proj/vc7ide/Move.sln @@ -283,8 +283,8 @@ Global ..\..\..\..\boost\move\detail\iterator_traits.hpp = ..\..\..\..\boost\move\detail\iterator_traits.hpp ..\..\doc\Jamfile.v2 = ..\..\doc\Jamfile.v2 ..\..\..\..\boost\move\make_unique.hpp = ..\..\..\..\boost\move\make_unique.hpp - ..\..\..\..\boost\move\algo\merge.hpp = ..\..\..\..\boost\move\algo\merge.hpp - ..\..\..\..\boost\move\algo\merge_sort.hpp = ..\..\..\..\boost\move\algo\merge_sort.hpp + ..\..\..\..\boost\move\algo\detail\merge.hpp = ..\..\..\..\boost\move\algo\detail\merge.hpp + ..\..\..\..\boost\move\algo\detail\merge_sort.hpp = ..\..\..\..\boost\move\algo\detail\merge_sort.hpp ..\..\..\..\boost\move\detail\meta_utils.hpp = ..\..\..\..\boost\move\detail\meta_utils.hpp ..\..\..\..\boost\move\detail\meta_utils_core.hpp = ..\..\..\..\boost\move\detail\meta_utils_core.hpp ..\..\..\..\boost\move\move.hpp = ..\..\..\..\boost\move\move.hpp diff --git a/test/bench_merge.cpp b/test/bench_merge.cpp index d9d3272..1ef92cd 100644 --- a/test/bench_merge.cpp +++ b/test/bench_merge.cpp @@ -68,23 +68,23 @@ void adaptive_merge_buffered(T *elements, T *mid, T *last, Compare comp, std::si enum AlgoType { - InplaceMerge, + StdMerge, AdaptiveMerge, SqrtHAdaptiveMerge, SqrtAdaptiveMerge, Sqrt2AdaptiveMerge, QuartAdaptiveMerge, - BuflessMerge, + StdInplaceMerge, MaxMerge }; -const char *AlgoNames [] = { "InplaceMerge " +const char *AlgoNames [] = { "StdMerge " , "AdaptMerge " , "SqrtHAdaptMerge " , "SqrtAdaptMerge " , "Sqrt2AdaptMerge " , "QuartAdaptMerge " - , "BuflessMerge " + , "StdInplaceMerge " }; BOOST_STATIC_ASSERT((sizeof(AlgoNames)/sizeof(*AlgoNames)) == MaxMerge); @@ -102,7 +102,7 @@ bool measure_algo(T *elements, std::size_t key_reps[], std::size_t element_count timer.resume(); switch(alg) { - case InplaceMerge: + case StdMerge: std::inplace_merge(elements, elements+split_pos, elements+element_count, order_type_less()); break; case AdaptiveMerge: @@ -124,8 +124,8 @@ bool measure_algo(T *elements, std::size_t key_reps[], std::size_t element_count adaptive_merge_buffered( elements, elements+split_pos, elements+element_count, order_type_less() , (element_count-1)/4+1); break; - case BuflessMerge: - boost::movelib::merge_bufferless(elements, elements+split_pos, elements+element_count, order_type_less()); + case StdInplaceMerge: + boost::movelib::merge_bufferless_ONlogN(elements, elements+split_pos, elements+element_count, order_type_less()); break; } timer.stop(); @@ -177,7 +177,7 @@ bool measure_all(std::size_t L, std::size_t NK) nanosecond_type prev_clock = 0; nanosecond_type back_clock; bool res = true; - res = res && measure_algo(A,Keys,L,NK,InplaceMerge, prev_clock); + res = res && measure_algo(A,Keys,L,NK,StdMerge, prev_clock); back_clock = prev_clock;/* // prev_clock = back_clock; @@ -195,8 +195,8 @@ bool measure_all(std::size_t L, std::size_t NK) prev_clock = back_clock; res = res && measure_algo(A,Keys,L,NK,AdaptiveMerge, prev_clock); // - //prev_clock = back_clock; - //res = res && measure_algo(A,Keys,L,NK,BuflessMerge, prev_clock); + prev_clock = back_clock; + res = res && measure_algo(A,Keys,L,NK,StdInplaceMerge, prev_clock); // if(!res) throw int(0); @@ -205,43 +205,54 @@ bool measure_all(std::size_t L, std::size_t NK) //Undef it to run the long test #define BENCH_MERGE_SHORT +#define BENCH_SORT_UNIQUE_VALUES int main() { try{ + #ifndef BENCH_SORT_UNIQUE_VALUES measure_all(101,1); measure_all(101,7); measure_all(101,31); + #endif measure_all(101,0); // + #ifndef BENCH_SORT_UNIQUE_VALUES measure_all(1101,1); measure_all(1001,7); measure_all(1001,31); measure_all(1001,127); measure_all(1001,511); + #endif measure_all(1001,0); // #ifndef BENCH_MERGE_SHORT + #ifndef BENCH_SORT_UNIQUE_VALUES measure_all(10001,65); measure_all(10001,255); measure_all(10001,1023); measure_all(10001,4095); + #endif measure_all(10001,0); // + #ifndef BENCH_SORT_UNIQUE_VALUES measure_all(100001,511); measure_all(100001,2047); measure_all(100001,8191); measure_all(100001,32767); + #endif measure_all(100001,0); // #ifdef NDEBUG + #ifndef BENCH_SORT_UNIQUE_VALUES measure_all(1000001,1); measure_all(1000001,1024); measure_all(1000001,32768); measure_all(1000001,524287); + #endif measure_all(1000001,0); measure_all(1500001,0); //measure_all(10000001,0); diff --git a/test/bench_sort.cpp b/test/bench_sort.cpp index 4945efa..630da4f 100644 --- a/test/bench_sort.cpp +++ b/test/bench_sort.cpp @@ -80,6 +80,7 @@ enum AlgoType Sqrt2AdaptiveSort, QuartAdaptiveSort, NoBufMergeSort, + InplaceStableSort, SlowStableSort, HeapSort, MaxSort @@ -93,6 +94,7 @@ const char *AlgoNames [] = { "MergeSort " , "Sqrt2AdaptSort " , "QuartAdaptSort " , "NoBufMergeSort " + , "InplStableSort " , "SlowSort " , "HeapSort " }; @@ -140,6 +142,9 @@ bool measure_algo(T *elements, std::size_t key_reps[], std::size_t element_count case NoBufMergeSort: boost::movelib::bufferless_merge_sort(elements, elements+element_count, order_type_less()); break; + case InplaceStableSort: + boost::movelib::inplace_stable_sort(elements, elements+element_count, order_type_less()); + break; case SlowStableSort: boost::movelib::detail_adaptive::slow_stable_sort(elements, elements+element_count, order_type_less()); break; @@ -222,6 +227,9 @@ bool measure_all(std::size_t L, std::size_t NK) res = res && measure_algo(A,Keys,L,NK,AdaptiveSort, prev_clock); // prev_clock = back_clock; + res = res && measure_algo(A,Keys,L,NK,InplaceStableSort, prev_clock); + // + prev_clock = back_clock; res = res && measure_algo(A,Keys,L,NK,NoBufMergeSort, prev_clock); // //prev_clock = back_clock; @@ -234,46 +242,57 @@ bool measure_all(std::size_t L, std::size_t NK) //Undef it to run the long test #define BENCH_SORT_SHORT +#define BENCH_SORT_UNIQUE_VALUES int main() { - measure_all(101,1); + #ifndef BENCH_SORT_UNIQUE_VALUES + //measure_all(101,1); measure_all(101,7); measure_all(101,31); + #endif measure_all(101,0); // + #ifndef BENCH_SORT_UNIQUE_VALUES measure_all(1101,1); measure_all(1001,7); measure_all(1001,31); measure_all(1001,127); measure_all(1001,511); + #endif measure_all(1001,0); // #ifndef BENCH_SORT_SHORT + #ifndef BENCH_SORT_UNIQUE_VALUES measure_all(10001,65); measure_all(10001,255); measure_all(10001,1023); measure_all(10001,4095); measure_all(10001,0); + #endif // + #ifndef BENCH_SORT_UNIQUE_VALUES measure_all(100001,511); measure_all(100001,2047); measure_all(100001,8191); measure_all(100001,32767); + #endif measure_all(100001,0); // - #ifdef NDEBUG + //#ifdef NDEBUG + #ifndef BENCH_SORT_UNIQUE_VALUES measure_all(1000001,1); measure_all(1000001,1024); measure_all(1000001,32768); measure_all(1000001,524287); + #endif measure_all(1000001,0); measure_all(1500001,0); //measure_all(10000001,0); - #endif //NDEBUG + //#endif //NDEBUG #endif //#ifndef BENCH_SORT_SHORT