mirror of
https://github.com/boostorg/move.git
synced 2025-08-02 13:44:28 +02:00
Added BENCH_SORT|MERGE_UNIQUE_VALUES to speed up regression tests
This commit is contained in:
@@ -283,8 +283,8 @@ Global
|
|||||||
..\..\..\..\boost\move\detail\iterator_traits.hpp = ..\..\..\..\boost\move\detail\iterator_traits.hpp
|
..\..\..\..\boost\move\detail\iterator_traits.hpp = ..\..\..\..\boost\move\detail\iterator_traits.hpp
|
||||||
..\..\doc\Jamfile.v2 = ..\..\doc\Jamfile.v2
|
..\..\doc\Jamfile.v2 = ..\..\doc\Jamfile.v2
|
||||||
..\..\..\..\boost\move\make_unique.hpp = ..\..\..\..\boost\move\make_unique.hpp
|
..\..\..\..\boost\move\make_unique.hpp = ..\..\..\..\boost\move\make_unique.hpp
|
||||||
..\..\..\..\boost\move\algo\merge.hpp = ..\..\..\..\boost\move\algo\merge.hpp
|
..\..\..\..\boost\move\algo\detail\merge.hpp = ..\..\..\..\boost\move\algo\detail\merge.hpp
|
||||||
..\..\..\..\boost\move\algo\merge_sort.hpp = ..\..\..\..\boost\move\algo\merge_sort.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.hpp = ..\..\..\..\boost\move\detail\meta_utils.hpp
|
||||||
..\..\..\..\boost\move\detail\meta_utils_core.hpp = ..\..\..\..\boost\move\detail\meta_utils_core.hpp
|
..\..\..\..\boost\move\detail\meta_utils_core.hpp = ..\..\..\..\boost\move\detail\meta_utils_core.hpp
|
||||||
..\..\..\..\boost\move\move.hpp = ..\..\..\..\boost\move\move.hpp
|
..\..\..\..\boost\move\move.hpp = ..\..\..\..\boost\move\move.hpp
|
||||||
|
@@ -68,23 +68,23 @@ void adaptive_merge_buffered(T *elements, T *mid, T *last, Compare comp, std::si
|
|||||||
|
|
||||||
enum AlgoType
|
enum AlgoType
|
||||||
{
|
{
|
||||||
InplaceMerge,
|
StdMerge,
|
||||||
AdaptiveMerge,
|
AdaptiveMerge,
|
||||||
SqrtHAdaptiveMerge,
|
SqrtHAdaptiveMerge,
|
||||||
SqrtAdaptiveMerge,
|
SqrtAdaptiveMerge,
|
||||||
Sqrt2AdaptiveMerge,
|
Sqrt2AdaptiveMerge,
|
||||||
QuartAdaptiveMerge,
|
QuartAdaptiveMerge,
|
||||||
BuflessMerge,
|
StdInplaceMerge,
|
||||||
MaxMerge
|
MaxMerge
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *AlgoNames [] = { "InplaceMerge "
|
const char *AlgoNames [] = { "StdMerge "
|
||||||
, "AdaptMerge "
|
, "AdaptMerge "
|
||||||
, "SqrtHAdaptMerge "
|
, "SqrtHAdaptMerge "
|
||||||
, "SqrtAdaptMerge "
|
, "SqrtAdaptMerge "
|
||||||
, "Sqrt2AdaptMerge "
|
, "Sqrt2AdaptMerge "
|
||||||
, "QuartAdaptMerge "
|
, "QuartAdaptMerge "
|
||||||
, "BuflessMerge "
|
, "StdInplaceMerge "
|
||||||
};
|
};
|
||||||
|
|
||||||
BOOST_STATIC_ASSERT((sizeof(AlgoNames)/sizeof(*AlgoNames)) == MaxMerge);
|
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();
|
timer.resume();
|
||||||
switch(alg)
|
switch(alg)
|
||||||
{
|
{
|
||||||
case InplaceMerge:
|
case StdMerge:
|
||||||
std::inplace_merge(elements, elements+split_pos, elements+element_count, order_type_less<T>());
|
std::inplace_merge(elements, elements+split_pos, elements+element_count, order_type_less<T>());
|
||||||
break;
|
break;
|
||||||
case AdaptiveMerge:
|
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<T>()
|
adaptive_merge_buffered( elements, elements+split_pos, elements+element_count, order_type_less<T>()
|
||||||
, (element_count-1)/4+1);
|
, (element_count-1)/4+1);
|
||||||
break;
|
break;
|
||||||
case BuflessMerge:
|
case StdInplaceMerge:
|
||||||
boost::movelib::merge_bufferless(elements, elements+split_pos, elements+element_count, order_type_less<T>());
|
boost::movelib::merge_bufferless_ONlogN(elements, elements+split_pos, elements+element_count, order_type_less<T>());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
timer.stop();
|
timer.stop();
|
||||||
@@ -177,7 +177,7 @@ bool measure_all(std::size_t L, std::size_t NK)
|
|||||||
nanosecond_type prev_clock = 0;
|
nanosecond_type prev_clock = 0;
|
||||||
nanosecond_type back_clock;
|
nanosecond_type back_clock;
|
||||||
bool res = true;
|
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;/*
|
back_clock = prev_clock;/*
|
||||||
//
|
//
|
||||||
prev_clock = back_clock;
|
prev_clock = back_clock;
|
||||||
@@ -195,8 +195,8 @@ bool measure_all(std::size_t L, std::size_t NK)
|
|||||||
prev_clock = back_clock;
|
prev_clock = back_clock;
|
||||||
res = res && measure_algo(A,Keys,L,NK,AdaptiveMerge, prev_clock);
|
res = res && measure_algo(A,Keys,L,NK,AdaptiveMerge, prev_clock);
|
||||||
//
|
//
|
||||||
//prev_clock = back_clock;
|
prev_clock = back_clock;
|
||||||
//res = res && measure_algo(A,Keys,L,NK,BuflessMerge, prev_clock);
|
res = res && measure_algo(A,Keys,L,NK,StdInplaceMerge, prev_clock);
|
||||||
//
|
//
|
||||||
if(!res)
|
if(!res)
|
||||||
throw int(0);
|
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
|
//Undef it to run the long test
|
||||||
#define BENCH_MERGE_SHORT
|
#define BENCH_MERGE_SHORT
|
||||||
|
#define BENCH_SORT_UNIQUE_VALUES
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
try{
|
try{
|
||||||
|
#ifndef BENCH_SORT_UNIQUE_VALUES
|
||||||
measure_all<order_type>(101,1);
|
measure_all<order_type>(101,1);
|
||||||
measure_all<order_type>(101,7);
|
measure_all<order_type>(101,7);
|
||||||
measure_all<order_type>(101,31);
|
measure_all<order_type>(101,31);
|
||||||
|
#endif
|
||||||
measure_all<order_type>(101,0);
|
measure_all<order_type>(101,0);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
#ifndef BENCH_SORT_UNIQUE_VALUES
|
||||||
measure_all<order_type>(1101,1);
|
measure_all<order_type>(1101,1);
|
||||||
measure_all<order_type>(1001,7);
|
measure_all<order_type>(1001,7);
|
||||||
measure_all<order_type>(1001,31);
|
measure_all<order_type>(1001,31);
|
||||||
measure_all<order_type>(1001,127);
|
measure_all<order_type>(1001,127);
|
||||||
measure_all<order_type>(1001,511);
|
measure_all<order_type>(1001,511);
|
||||||
|
#endif
|
||||||
measure_all<order_type>(1001,0);
|
measure_all<order_type>(1001,0);
|
||||||
//
|
//
|
||||||
#ifndef BENCH_MERGE_SHORT
|
#ifndef BENCH_MERGE_SHORT
|
||||||
|
#ifndef BENCH_SORT_UNIQUE_VALUES
|
||||||
measure_all<order_type>(10001,65);
|
measure_all<order_type>(10001,65);
|
||||||
measure_all<order_type>(10001,255);
|
measure_all<order_type>(10001,255);
|
||||||
measure_all<order_type>(10001,1023);
|
measure_all<order_type>(10001,1023);
|
||||||
measure_all<order_type>(10001,4095);
|
measure_all<order_type>(10001,4095);
|
||||||
|
#endif
|
||||||
measure_all<order_type>(10001,0);
|
measure_all<order_type>(10001,0);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
#ifndef BENCH_SORT_UNIQUE_VALUES
|
||||||
measure_all<order_type>(100001,511);
|
measure_all<order_type>(100001,511);
|
||||||
measure_all<order_type>(100001,2047);
|
measure_all<order_type>(100001,2047);
|
||||||
measure_all<order_type>(100001,8191);
|
measure_all<order_type>(100001,8191);
|
||||||
measure_all<order_type>(100001,32767);
|
measure_all<order_type>(100001,32767);
|
||||||
|
#endif
|
||||||
measure_all<order_type>(100001,0);
|
measure_all<order_type>(100001,0);
|
||||||
|
|
||||||
//
|
//
|
||||||
#ifdef NDEBUG
|
#ifdef NDEBUG
|
||||||
|
#ifndef BENCH_SORT_UNIQUE_VALUES
|
||||||
measure_all<order_type>(1000001,1);
|
measure_all<order_type>(1000001,1);
|
||||||
measure_all<order_type>(1000001,1024);
|
measure_all<order_type>(1000001,1024);
|
||||||
measure_all<order_type>(1000001,32768);
|
measure_all<order_type>(1000001,32768);
|
||||||
measure_all<order_type>(1000001,524287);
|
measure_all<order_type>(1000001,524287);
|
||||||
|
#endif
|
||||||
measure_all<order_type>(1000001,0);
|
measure_all<order_type>(1000001,0);
|
||||||
measure_all<order_type>(1500001,0);
|
measure_all<order_type>(1500001,0);
|
||||||
//measure_all<order_type>(10000001,0);
|
//measure_all<order_type>(10000001,0);
|
||||||
|
@@ -80,6 +80,7 @@ enum AlgoType
|
|||||||
Sqrt2AdaptiveSort,
|
Sqrt2AdaptiveSort,
|
||||||
QuartAdaptiveSort,
|
QuartAdaptiveSort,
|
||||||
NoBufMergeSort,
|
NoBufMergeSort,
|
||||||
|
InplaceStableSort,
|
||||||
SlowStableSort,
|
SlowStableSort,
|
||||||
HeapSort,
|
HeapSort,
|
||||||
MaxSort
|
MaxSort
|
||||||
@@ -93,6 +94,7 @@ const char *AlgoNames [] = { "MergeSort "
|
|||||||
, "Sqrt2AdaptSort "
|
, "Sqrt2AdaptSort "
|
||||||
, "QuartAdaptSort "
|
, "QuartAdaptSort "
|
||||||
, "NoBufMergeSort "
|
, "NoBufMergeSort "
|
||||||
|
, "InplStableSort "
|
||||||
, "SlowSort "
|
, "SlowSort "
|
||||||
, "HeapSort "
|
, "HeapSort "
|
||||||
};
|
};
|
||||||
@@ -140,6 +142,9 @@ bool measure_algo(T *elements, std::size_t key_reps[], std::size_t element_count
|
|||||||
case NoBufMergeSort:
|
case NoBufMergeSort:
|
||||||
boost::movelib::bufferless_merge_sort(elements, elements+element_count, order_type_less<T>());
|
boost::movelib::bufferless_merge_sort(elements, elements+element_count, order_type_less<T>());
|
||||||
break;
|
break;
|
||||||
|
case InplaceStableSort:
|
||||||
|
boost::movelib::inplace_stable_sort(elements, elements+element_count, order_type_less<T>());
|
||||||
|
break;
|
||||||
case SlowStableSort:
|
case SlowStableSort:
|
||||||
boost::movelib::detail_adaptive::slow_stable_sort(elements, elements+element_count, order_type_less<T>());
|
boost::movelib::detail_adaptive::slow_stable_sort(elements, elements+element_count, order_type_less<T>());
|
||||||
break;
|
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);
|
res = res && measure_algo(A,Keys,L,NK,AdaptiveSort, prev_clock);
|
||||||
//
|
//
|
||||||
prev_clock = back_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);
|
res = res && measure_algo(A,Keys,L,NK,NoBufMergeSort, prev_clock);
|
||||||
//
|
//
|
||||||
//prev_clock = back_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
|
//Undef it to run the long test
|
||||||
#define BENCH_SORT_SHORT
|
#define BENCH_SORT_SHORT
|
||||||
|
#define BENCH_SORT_UNIQUE_VALUES
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
measure_all<order_type>(101,1);
|
#ifndef BENCH_SORT_UNIQUE_VALUES
|
||||||
|
//measure_all<order_type>(101,1);
|
||||||
measure_all<order_type>(101,7);
|
measure_all<order_type>(101,7);
|
||||||
measure_all<order_type>(101,31);
|
measure_all<order_type>(101,31);
|
||||||
|
#endif
|
||||||
measure_all<order_type>(101,0);
|
measure_all<order_type>(101,0);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
#ifndef BENCH_SORT_UNIQUE_VALUES
|
||||||
measure_all<order_type>(1101,1);
|
measure_all<order_type>(1101,1);
|
||||||
measure_all<order_type>(1001,7);
|
measure_all<order_type>(1001,7);
|
||||||
measure_all<order_type>(1001,31);
|
measure_all<order_type>(1001,31);
|
||||||
measure_all<order_type>(1001,127);
|
measure_all<order_type>(1001,127);
|
||||||
measure_all<order_type>(1001,511);
|
measure_all<order_type>(1001,511);
|
||||||
|
#endif
|
||||||
measure_all<order_type>(1001,0);
|
measure_all<order_type>(1001,0);
|
||||||
//
|
//
|
||||||
#ifndef BENCH_SORT_SHORT
|
#ifndef BENCH_SORT_SHORT
|
||||||
|
#ifndef BENCH_SORT_UNIQUE_VALUES
|
||||||
measure_all<order_type>(10001,65);
|
measure_all<order_type>(10001,65);
|
||||||
measure_all<order_type>(10001,255);
|
measure_all<order_type>(10001,255);
|
||||||
measure_all<order_type>(10001,1023);
|
measure_all<order_type>(10001,1023);
|
||||||
measure_all<order_type>(10001,4095);
|
measure_all<order_type>(10001,4095);
|
||||||
measure_all<order_type>(10001,0);
|
measure_all<order_type>(10001,0);
|
||||||
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
|
#ifndef BENCH_SORT_UNIQUE_VALUES
|
||||||
measure_all<order_type>(100001,511);
|
measure_all<order_type>(100001,511);
|
||||||
measure_all<order_type>(100001,2047);
|
measure_all<order_type>(100001,2047);
|
||||||
measure_all<order_type>(100001,8191);
|
measure_all<order_type>(100001,8191);
|
||||||
measure_all<order_type>(100001,32767);
|
measure_all<order_type>(100001,32767);
|
||||||
|
#endif
|
||||||
measure_all<order_type>(100001,0);
|
measure_all<order_type>(100001,0);
|
||||||
|
|
||||||
//
|
//
|
||||||
#ifdef NDEBUG
|
//#ifdef NDEBUG
|
||||||
|
#ifndef BENCH_SORT_UNIQUE_VALUES
|
||||||
measure_all<order_type>(1000001,1);
|
measure_all<order_type>(1000001,1);
|
||||||
measure_all<order_type>(1000001,1024);
|
measure_all<order_type>(1000001,1024);
|
||||||
measure_all<order_type>(1000001,32768);
|
measure_all<order_type>(1000001,32768);
|
||||||
measure_all<order_type>(1000001,524287);
|
measure_all<order_type>(1000001,524287);
|
||||||
|
#endif
|
||||||
measure_all<order_type>(1000001,0);
|
measure_all<order_type>(1000001,0);
|
||||||
measure_all<order_type>(1500001,0);
|
measure_all<order_type>(1500001,0);
|
||||||
//measure_all<order_type>(10000001,0);
|
//measure_all<order_type>(10000001,0);
|
||||||
#endif //NDEBUG
|
//#endif //NDEBUG
|
||||||
|
|
||||||
#endif //#ifndef BENCH_SORT_SHORT
|
#endif //#ifndef BENCH_SORT_SHORT
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user