[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: computer-go: Languages for programming go are?



How about profiling?

I get a bit less NPS as that, but i'm also doing
influence function incrementally, which takes all
the system time.

At 04:19 PM 1/2/01 -0500, you wrote:
>
>I  did some  more  investigating,  to  determine where  my program was
>spending its time.  I tried a couple of simple things to start with:

>  1) To get a rough idea of how expensive my state copy is, I run
>     some tests on a much smaller board.  This has the effect of
>     sharply reducing the size of the state and also sharply reduces
>     the size of the array that keeps up with string information.
>     The reduction is approximately 6 to 1.   If copying state is
>     where my program spends most of its time, I should get a
>     substantial speedup.   
>
>     . The 19x19 program does about 330,000 nodes per second in the
>       opening position.
>
>     . The 7x7 version with sharply reduced state does 420,000 in the
>       same position.   
>
>     Conclusion:  I am spending roughly 20% of my time copying state.
>                  This buys me a lot,  unmake is free and the move
>                  make logic is greatly simplified.  I still don't know
>                  if it's a win in terms of performance,  but I do know
>                  based on this test, that there is very little I could
>                  hope to gain by updating in place.
>
>  2) As a test, I removed the global evaluator.  The routine actually does
>     very little, but much to my surprise the program is spending a
substantial
>     amount of time here.  I am able to achieve about 550,000 nodes per
second
>     on the 19x19 version with big state!
>
>Everything  is relative.  If I isolate  everything to just the process
>of making moves   without evaluation or  any  other factors, then  the
>state copy  is fairly significant.  I  don't know  if the speedup that
>results from simpler move appliction and free unmakes is worth it, but
>I know that I don't really care if my program  is spending most of its
>time doing other things.  It's  certainly not worth the resulting bugs
>and complexities  of dealing   with  a crufty  un-maker  and  all  the
>associated logic.
>
>Of course none of this has to do with how badly my program plays!  How
>fast you can make moves has little if  anything to do  with how good a
>program plays.  My  stuff   is fast because    it doesn't do  much  of
>anything.  I incrementally maintain  string counts, and liberty counts
>for each string existing  on the board and that's  about it.   Most of
>the move making decisions are made before the search even begins.
>
>
>Don
>
>
>
>
>   From: Don Dailey <drd@xxxxxxxxxxxxxxxxx>
>
>      From: "Anders Kierulf" <anders@xxxxxxxxxxxxxxxxx>
>
>      > Anyway, I'm curious about what other knowledge is incrementally
updated
>      > by my fellow Go programmers, and how, if you don't mind.
>
>      SmartGo currently keeps the following information up-to-date:
>      - Number of black and white stones on the board.
>      - Zobrist hash code (64 bits).
>      - Number of empty neighbors for each point.
>      - The stones in each block (in a circular linked list).
>      - The anchor (smallest stone in a block) of each stone.
>      - The liberties and liberty count of each block (in an array).
>      - (Optional) Bitboards for all black, white, and empty points.
>
>      > Just for some sporty fun, my Go program on PIII-500 can execute about
>      > one million random moves in under 5 seconds:
>      >
>      > Board::TimingTests()
>      > ---> Playing Random Game
>      > ***> 1000000 Turns
>      > ***> 4.625 seconds.
>      > ***> 216216 turns per second.
>
>      Can you elaborate on what you mean by playing random games? To make
it a
>      more realistic test, it should probably include taking back the moves
>      played, and also check some random liberty counts and iterate through
>      liberties between moves.
>
>      Anders Kierulf
>      www.smartgo.com
>
>
>   Are these numbers based on taking back moves or just making them?
>
>   I would like to emphasize that my test  does both.  Even though taking
>   back moves is free for me,  I presumably pay for this  up front with a
>   slower move maker.   (Actually, is my move  maker really slower?   I'm
>   not convinced of   this  because every   program  has to  provide   an
>   equivalent mechanism  and extra logic for taking  back moves.)
>
>   I get 300,000 nodes per second, on a pentium II  laptop running at 400
>   MGH which includes evaluation,  which is  fast  and simple, but  by no
>   means free.
>
>   Phil's program  is  doing some  work mine does  not do,  because he is
>   keeping some  bit boards  updated too.   So it's  hard to construct an
>   apples to apples test unless he can  turn that stuff  off.  I have yet
>   to see a good   reason to turn   my program into  a hackery  of global
>   variables that are updated  in place, but I would  do this if it meant
>   extra speed.  I don't know of a fair way to test this without actually
>   going through this excercise, but I  need a lot of motivation, because
>   I think my program is at least pretty fast, if nothing else.
>
>
>   Don
>
>
>