From d6b04c27989bba77b23474f5b6f75974c7199644 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sun, 11 Oct 2009 10:35:41 +0200 Subject: [PATCH] Revert "Use std::stable_sort() instead of std::sort()" Unfortunatly std::stable_sort() implementation in gcc is horrendously slow. We have a big performance regression on Linux systems (-20% !) So revert the commit and wait to fix the issue in a different way, perhaps with an our home grown sorting, that should be comparable in speed with std::sort() Signed-off-by: Marco Costalba --- src/move.h | 2 +- src/movepick.cpp | 10 +++++----- src/ucioption.cpp | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/move.h b/src/move.h index 03df770d..672eade6 100644 --- a/src/move.h +++ b/src/move.h @@ -62,7 +62,7 @@ struct MoveStack { int score; }; -// Note that operator< is set up such that std::stable_sort() will sort in descending order +// Note that operator< is set up such that std::sort() will sort in descending order inline bool operator<(const MoveStack& f, const MoveStack& s) { return s.score < f.score; } diff --git a/src/movepick.cpp b/src/movepick.cpp index 0dd44bbd..ea435026 100644 --- a/src/movepick.cpp +++ b/src/movepick.cpp @@ -123,7 +123,7 @@ void MovePicker::go_next_phase() { case PH_GOOD_CAPTURES: lastMove = generate_captures(pos, moves); score_captures(); - std::stable_sort(moves, lastMove); + std::sort(moves, lastMove); return; case PH_KILLERS: @@ -134,7 +134,7 @@ void MovePicker::go_next_phase() { case PH_NONCAPTURES: lastMove = generate_noncaptures(pos, moves); score_noncaptures(); - std::stable_sort(moves, lastMove); + std::sort(moves, lastMove); return; case PH_BAD_CAPTURES: @@ -142,20 +142,20 @@ void MovePicker::go_next_phase() { // to get SEE move ordering. curMove = badCaptures; lastMove = lastBadCapture; - std::stable_sort(badCaptures, lastMove); + std::sort(badCaptures, lastMove); return; case PH_EVASIONS: assert(pos.is_check()); lastMove = generate_evasions(pos, moves, pinned); score_evasions(); - std::stable_sort(moves, lastMove); + std::sort(moves, lastMove); return; case PH_QCAPTURES: lastMove = generate_captures(pos, moves); score_captures(); - std::stable_sort(moves, lastMove); + std::sort(moves, lastMove); return; case PH_QCHECKS: diff --git a/src/ucioption.cpp b/src/ucioption.cpp index 6e727954..1b866554 100644 --- a/src/ucioption.cpp +++ b/src/ucioption.cpp @@ -210,7 +210,7 @@ void print_uci_options() { for (Options::const_iterator it = options.begin(); it != options.end(); ++it) vec.push_back(it->second); - std::stable_sort(vec.begin(), vec.end()); + std::sort(vec.begin(), vec.end()); for (std::vector