Computer Chess Club Archives


Search

Terms

Messages

Subject: huge speedup by using pointers instead of arrays

Author: Roman Hartmann

Date: 02:33:46 09/28/04


About half a year ago I started to write a move generator from scratch (to be
honest that was allready my second attempt) and soon I realized that this would
not be an easy task as progress was very slow. But anyway a few days ago I
finnished this task also due the help of this forum (I found the EP and castling
bug with the help of the divide command of Sharper).

Anyway, as I’m not using biboards in my program I was sure my move generator
would be rather slow compared to state of the art bitboard programs. The move
generator ended up beeing about 5 times slower than the one from crafty. I
didn’t expect it to do any better.

Yesterday evening I thought I could speed up things a bit by using pointers. I
didn’t expect too much from this attempt, though.
But only changing my attack function to pass pointers instead of passing the
structure gave me a allready a huge speedup. Today I changend also my testmove
function to use a pointer to a struct instead of passing the structure and got
another 100% Speedup!

I didn’t expect this huge speedup but I guess it’s because I had functions
calling other functions with passing values from function to function.

Layout before:
int makemovelist(...) {
        ...
	testmove(struct point p, int von, int nach);
}
int testmove(struct point, int von, int nach) {
	...
	imschach(struct point p);
}
int imschach(struct point p) {
	...
	attack(struct point p, p.k_w);
}

int attack(struct point p, int i) {
    	...
}
Not a very fast approach, obviously.
But only by changing this to passing a pointer to the struct p now instead of
call by value the move generation process is about seven times faster than it
was before. I tried several compilers to check that.

A few perft values:
roce: setboard 8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w -
roce: perft 5
Perft 5: 674624 (0.16s)
roce: perft 6
Perft 6: 11030083 (2.83s)
roce: perft 7
Perft 7: 178633661 (39.50s)
roce: setboard r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq -
Perft 5: 193690690 (29.09s)
roce: setboard rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
roce: perft 6
Perft 6: 119060324 (21.56s)
roce: setboard rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
roce: perft 6
Perft 6: 119060324 (21.56s)
roce: setboard 8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - -
roce: perft 6
Perft 6: 11030083 (2.83s)
roce: perft 7
Perft 7: 178633661 (39.42s)

Not too bad for a non bitboard engine IMO. Now, finally, I can have a look at
the more ineresting things in chess programming.

Cheers
Roman

PS: roce stands for Roman’s own chess engine



This page took 0.01 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.