From 3a2cd370802db61dc3060b81d613444363cf0371 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Fri, 6 Aug 2010 10:47:42 +0100 Subject: [PATCH 1/1] Faster perft Skip moves scoring and sorting: this more then doubles the speed ! Verified is correct. Signed-off-by: Marco Costalba --- src/search.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index 6f9c8b2b..2ab98397 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -366,26 +366,27 @@ void init_search() { int perft(Position& pos, Depth depth) { + MoveStack mlist[256]; StateInfo st; - Move move; + Move m; int sum = 0; - MovePicker mp(pos, MOVE_NONE, depth, H); + + // Generate all legal moves + MoveStack* last = generate_moves(pos, mlist); // If we are at the last ply we don't need to do and undo // the moves, just to count them. - if (depth <= OnePly) // Replace with '<' to test also qsearch - { - while (mp.get_next_move()) sum++; - return sum; - } + if (depth <= OnePly) + return int(last - mlist); // Loop through all legal moves CheckInfo ci(pos); - while ((move = mp.get_next_move()) != MOVE_NONE) + for (MoveStack* cur = mlist; cur != last; cur++) { - pos.do_move(move, st, ci, pos.move_is_check(move, ci)); + m = cur->move; + pos.do_move(m, st, ci, pos.move_is_check(m, ci)); sum += perft(pos, depth - OnePly); - pos.undo_move(move); + pos.undo_move(m); } return sum; } -- 2.39.2