Author: Brian Richardson
Date: 10:51:06 02/11/00
Go up one level in this thread
I looked at bitmaps vs fanout vs pointer (but not x88 I must confess) and other methods fairly extensively about 2 yrs ago when first deciding to resurrect my chess program. Bitmaps are not clear winners when only looking at move generation (in fact Gnuchess' pointer scheme is quite fast and rather elegant). However, bitmap's real advantages come, IMHO, in the eval(). As Bob Hyatt as pointed out, testing for a passed pawn is simple and fast: if(!And(mask_pawn_passed_b[sq],tree->wpawns)) What would this test look like with the pointer/piece list scheme? I can't speak for other programs, but I suspect most programs spend most (est 40+%) of their time in eval(), or comparable functions. With Intel being the ONLY significant architecture not already fully 64bit, and soon to be 64 bit with IA-64, why not take advantage of the trend? Of course, one reason is complexity. I agree, and chose not to implement full-blown rotated bitmaps, nevermind incremental attack bitmap updates. But, nonrotated are rather straightforward, and that is what I chose to use (at least initally) with Tinker. Although I started working on my first chess program in 1971, I am still a relative newbie by current standards. Nonetheless, my thinking is that one or two additional, effective eval terms will more than make up for at most a 20-30% raw move generation speed difference.
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.