Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Chess engine speed up tricks

Author: Charles Roberson

Date: 15:27:35 02/15/05

Go up one level in this thread



  I had to fix a line of code to get it to compile, then I had to turn off
 all the debug statments to get a reasonable profile. But, it profiled without
 a problem for me.

   Also, I get several "will never be executed" warning messages. Maybe you
  should look at them.

    Since you lack a benchmark routine and your perft doesn't call
  the eval function, I set up a new board and set search depth to 11 ply. Then
  typed e2e4.

  Here are the big hitters for debug version:
     % time             routine
      43.91             simple_pos_eval
      18.83             gen_captures
       9.33             isattacked
       5.12             make_move
       4.76             order_search
       4.5              search
       4.03             get_next_move
       3.10             gen_moves
       1.44             undo_moves

  Here are the big hitters for the O2 version:
     % time             routine
      41.07              simple_pos_eval
      16.65              gen_captures
       7.23              search
       6.77              isattacked
       6.64              ordered_search
       5.88              make_move
       4.33              gen_next_move
       2.40              gen_moves
       2.10              qsearch
       1.77              undo_move

     Eventhough I told it sd 11 and made the same move in both runs, the
    number of calls to each routine were drastically different between the
    debug profile and the optimized profile. If you can't answer why then
    you should. If sd is a suggested depth as opposed to a fixed depth
    then I understand. From your help lines it looks like it is a suggested
    depth. I would suggest putting in a fixed depth so that the call counts
    for each routine come out the same no matter the level of optimization.
    At that time, if they come out different -> you have bugs.

     Looks like your work is cut out for you if you want a 2x speedup.
    Amdahl's law says you are going to need to work on several of the
    routines or fine some tricks that are core to several of them.
    Speeding up the pos eval can only take 44% off the run time with
    infinite speedup. From the looks of your data structures you could
    be spending a lot of time falling out of registers to cache. Remember
    Crafty is a bitboard program thus many of its operations stay in the
    registers which are faster than cache.

    If you make your piece eval into functions and get rid of the goto's
    you could see better where the problem is. A quick glance shows you
    use int where a char or short will do. Also, some ptr arithmetic may
    help. There are several boolean tricks you could use such as:
        if ((x+y)>0) could be  if (x|y)
        now this assumes that both x and y can never be negative.

   Wow, I meant for this to be short and sweet. I apologize for getting
  carried away.

     Charles







This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.