Actually, that is how I described it to Ed Glibert, and my name is Ed too, so your comment is correctRein Halbersma wrote:This is how Ed describes it:TAILLE wrote:How do you manage to have only 4 bytes for the starting index in the case of the 8 pieces db ? Each slices of this db have far more than 4G positions.Rein Halbersma wrote:For the larger databases (>6 pieces), they have for every database subdivision (wm, wk, bm, wk, wr, br tuple) a plain text index file with for every 4K block of data in the database the 32-bit index of the position that starts the block. Suppose you build the full 8 pc databases and ultimately have a 512 Gb database on disk. That means 128M blocks of indices, 4 bytes per starting index so about 512 Mb of indexing data to be in RAM at all times.
http://pages.prodigy.net/eyg/Checkers/10-pieceBuild.htm
"subdivide each slice into fixed size subdivisions of size 2^32. To find which subdivision of a slice a position is in, the 64-bit slice index is computed for the position, and this number is divided by 2^32. The integer quotient identifies which subdivision contains the index, and the 32-bit remainder from the division becomes the index of the position within that subdivision."
So you use 64-bit indices during building, but 32-bit indices in the index file.
[img]images/smilies/icon_smile.gif[/img]
However, Ed Gilbert eventually used 2^31 instead of 2^32 for reasons he mentioned later.