Subversion Repositories Games.Chess Giants

Rev

Rev 108 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #include "chess.h"
  2. #include "data.h"
  3. /* last modified 02/26/14 */
  4. /*
  5.  *******************************************************************************
  6.  *                                                                             *
  7.  *   Bench() runs a simple six-position benchmark to gauge Crafty's            *
  8.  *   performance.  The test positons are hard-coded, and the benchmark is      *
  9.  *   calculated much like it would with an external "test" file.  The test     *
  10.  *   is a mix of opening, middlegame, and endgame positions, with both         *
  11.  *   tactical and positional aspects.  (For those interested, the positions    *
  12.  *   chosen are Bratko-Kopec 2, 4, 8, 12, 22 and 23.)  This test is a speed    *
  13.  *   measure only; the actual solutions to the positions are ignored.          *
  14.  *                                                                             *
  15.  *******************************************************************************
  16.  */
  17. void Bench(int increase) {
  18.   uint64_t nodes = 0;
  19.   int old_do, old_st, old_sd, total_time_used, pos;
  20.   FILE *old_books, *old_book;
  21.   TREE *const tree = block[0];
  22.   char fen[6][80] = {
  23.     {"3r1k2/4npp1/1ppr3p/p6P/P2PPPP1/1NR5/5K2/2R5 w - - 0 1"},
  24.     {"rnbqkb1r/p3pppp/1p6/2ppP3/3N4/2P5/PPP1QPPP/R1B1KB1R w KQkq - 0 1"},
  25.     {"4b3/p3kp2/6p1/3pP2p/2pP1P2/4K1P1/P3N2P/8 w - - 0 1"},
  26.     {"r3r1k1/ppqb1ppp/8/4p1NQ/8/2P5/PP3PPP/R3R1K1 b - - 0 1"},
  27.     {"2r2rk1/1bqnbpp1/1p1ppn1p/pP6/N1P1P3/P2B1N1P/1B2QPP1/R2R2K1 b - - 0 1"},
  28.     {"r1bqk2r/pp2bppp/2p5/3pP3/P2Q1P2/2N1B3/1PP3PP/R4RK1 b kq - 0 1"}
  29.   };
  30.   int fen_depth[6] = { 21, 19, 25, 19, 19, 18 };
  31.  
  32. /*
  33.  ************************************************************
  34.  *                                                          *
  35.  *  Initialize.                                             *
  36.  *                                                          *
  37.  ************************************************************
  38.  */
  39.   total_time_used = 0;
  40.   old_st = search_time_limit;
  41.   old_sd = search_depth;
  42.   old_do = display_options;
  43.   search_time_limit = 90000;
  44.   display_options = 1;
  45.   old_book = book_file;
  46.   book_file = 0;
  47.   old_books = books_file;
  48.   books_file = 0;
  49.   if (increase)
  50.     Print(4095, "Running benchmark %d. . .\n", increase);
  51.   else
  52.     Print(4095, "Running benchmark. . .\n");
  53.   printf(".");
  54.   fflush(stdout);
  55. /*
  56.  ************************************************************
  57.  *                                                          *
  58.  *  Now we loop through the six positions.  We use the      *
  59.  *  ReadParse() procedure to break the FEN into tokens and  *
  60.  *  then call SetBoard() to set up the positions.  Then a   *
  61.  *  call to Iterate() and we are done.                      *
  62.  *                                                          *
  63.  ************************************************************
  64.  */
  65.   for (pos = 0; pos < 6; pos++) {
  66.     strcpy(buffer, fen[pos]);
  67.     nargs = ReadParse(buffer, args, " \t;=");
  68.     SetBoard(tree, nargs, args, 0);
  69.     search_depth = fen_depth[pos] + increase;
  70.     InitializeHashTables();
  71.     last_pv.pathd = 0;
  72.     thinking = 1;
  73.     tree->status[1] = tree->status[0];
  74.     (void) Iterate(game_wtm, think, 0);
  75.     thinking = 0;
  76.     nodes += tree->nodes_searched;
  77.     total_time_used += (program_end_time - program_start_time);
  78.     printf(".");
  79.     fflush(stdout);
  80.   }
  81. /*
  82.  ************************************************************
  83.  *                                                          *
  84.  *  Benchmark done.  Now dump the results.                  *
  85.  *                                                          *
  86.  ************************************************************
  87.  */
  88.   printf("\n");
  89.   Print(4095, "Total nodes: %" PRIu64 "\n", nodes);
  90.   Print(4095, "Raw nodes per second: %d\n",
  91.       (int) ((double) nodes / ((double) total_time_used / (double) 100.0)));
  92.   Print(4095, "Total elapsed time: %.2f\n",
  93.       ((double) total_time_used / (double) 100.0));
  94.   input_stream = stdin;
  95.   early_exit = 99;
  96.   display_options = old_do;
  97.   search_time_limit = old_st;
  98.   search_depth = old_sd;
  99.   books_file = old_books;
  100.   book_file = old_book;
  101.   NewGame(0);
  102. }
  103.