Perft(14) revisited

Discussion of chess software programming and technical issues.

Moderators: hgm, Rebel, chrisw

User avatar
sje
Posts: 4675
Joined: Mon Mar 13, 2006 7:43 pm

Re: Status

Post by sje »

ZirconiumX wrote:Why not CUDA? It's a good stopgap, and you won't have to do any work.

https://github.com/ankan-ban/perft_gpu
It's not an OpenCL program ("kernel"), and OpenCL is what I need.

http://www.khronos.org/registry/cl/specs/opencl-1.2.pdf
User avatar
Ajedrecista
Posts: 1969
Joined: Wed Jul 13, 2011 9:04 pm
Location: Madrid, Spain.

Re: Status.

Post by Ajedrecista »

Hello Matthew:
ZirconiumX wrote:Got any particular recommendations for fast perft programs?
I would recommend the following three perft counters:

gperft 1.0.3

JetChess 1.0.0.0

qperft

I ordered them in alphabetic order but I think that in terms of speed: gperft > JetChess > qperft. The doubt is if any of these counters can support a script that allows an automated process of read FEN strings and save results in an output file. The issue of multiplications is minor (easy to solve for a competent programmer) from my POV.

Regards from Spain.

Ajedrecista.
User avatar
sje
Posts: 4675
Joined: Mon Mar 13, 2006 7:43 pm

Re: Status.

Post by sje »

Ajedrecista wrote:I would recommend the following three perft counters:

gperft 1.0.3

JetChess 1.0.0.0

qperft
Where possible, it would be best for the original authors of each of these to make the appropriate modifications to better automate work unit processing. Ideally, an end user should be able to run a perft program like this:

Code: Select all

doperft -i <input-work-unit-file> &#91;-o <output-file>&#93; &#91;-r <recovery-file>&#93;
Where recovery-file is a partial result from an earlier run on the same work unit input file.
ZirconiumX
Posts: 1334
Joined: Sun Jul 17, 2011 11:14 am

Re: Status.

Post by ZirconiumX »

Here's a python program I wrote to attempt to automate this

Code: Select all

#!/usr/bin/python

import sys
import subprocess

print&#40;sys.argv&#41;

with open&#40;sys.argv&#91;1&#93;) as file&#58;
    with open&#40;sys.argv&#91;2&#93;, 'a') as results&#58;
        with open&#40;sys.argv&#91;3&#93;, 'w+') as marker&#58;
            tmp = marker.read&#40;)
            skip = 0
            line_nb = 0
            if tmp != ''&#58;
                skip = int&#40;tmp&#41;
            for line in file.read&#40;).splitlines&#40;)&#58;
                line_nb += 1
                if line_nb < skip&#58;
                    continue
                tmp = line.split&#40;' ')
                count = int&#40;tmp&#91;-1&#93;)
                fen = ' '.join&#40;tmp&#91;&#58;-1&#93;)
                output = subprocess.check_output&#40;&#91;"/home/matthew/Downloads/gperft_1.0.3_linux/helper.sh", fen&#93;)
                for outline in output.splitlines&#40;)&#58;
                    outline = str&#40;outline, encoding='utf8')
                    if outline.find&#40;'TOTAL')&#58;
                        continue
                    table = dict.fromkeys&#40;map&#40;ord, ','), None&#41;
                    perft = int&#40;outline.translate&#40;table&#41;.split&#40;' ')&#91;-1&#93;)
                    results.write&#40;"%s %d %d\n" % &#40;fen, perft, perft*count&#41;)
                    print&#40;"%s %d %d\n" % &#40;fen, perft, perft*count&#41;)
                marker.seek&#40;0&#41;
                marker.write&#40;str&#40;line_nb&#41;)
helper.sh is essentially a one liner that I use to call gperft with the desired arguments. It can just as easily be adjusted to use

I'm currently working on WU 400, as it's a nice even number that you probably haven't gottent to yet. As of time of writing, the program is 0.7% complete. I reckon this will take a while.

Matthew:out
Some believe in the almighty dollar.

I believe in the almighty printf statement.
User avatar
sje
Posts: 4675
Joined: Mon Mar 13, 2006 7:43 pm

Work unit wu7.984

Post by sje »

ZirconiumX wrote:I'm currently working on WU 400, as it's a nice even number that you probably haven't gottent to yet. As of time of writing, the program is 0.7% complete. I reckon this will take a while.
I recommend running the wu7.964 work unit which has only 68 records then comparing the result to the posted, uncompressed version of same. The two files should be byte-for-byte identical. Word count and signature:

Code: Select all

$ wc wu7.964.sum
      68     612    6426 wu7.964.sum
$ md5 wu7.964.sum
MD5 &#40;wu7.964.sum&#41; = 1b329dcb65c93460e614a88823854578
The whole thing:

Code: Select all

$ cat wu7.964.sum
rnbqkbnr/ppp1pppp/8/3p4/4P3/6P1/PPPP1P1P/RNBQKBNR b KQkq - 2 4 1814 25480664076 46221924633864
rnbqkbnr/ppp1pppp/8/3p4/8/4P1P1/PPPP1P1P/RNBQKBNR b KQkq - 2 4 1814 21532409086 39059790082004
rnbqkbnr/ppp1pppp/8/3p4/1P6/4P3/P1PP1PPP/RNBQKBNR b KQkq - 2 4 1818 22385375254 40696612211772
rnbqkbnr/ppp1pppp/8/3p4/4P3/1P6/P1PP1PPP/RNBQKBNR b KQkq - 2 4 1818 26837335560 48790276048080
rnbqkbnr/ppp1pppp/8/3p4/8/1P2P3/P1PP1PPP/RNBQKBNR b KQkq - 2 4 1818 22745542738 41351396697684
rnbqkbnr/ppp1pppp/3p4/8/1P2P3/8/P1PP1PPP/RNBQKBNR b KQkq - 2 4 1840 18050327389 33212602395760
rnbqkbnr/pppp1ppp/4p3/8/3P4/1P6/P1P1PPPP/RNBQKBNR b KQkq - 2 4 1842 21145790077 38950545321834
rnbqkbnr/pppp1ppp/8/4p3/3P4/1P6/P1P1PPPP/RNBQKBNR b KQkq - 2 4 1842 25573440561 47106277513362
rnbqkbnr/pppp1ppp/4p3/8/3P4/6P1/PPP1PP1P/RNBQKBNR b KQkq - 2 4 1846 22885046723 42245796250658
rnbqkbnr/pppp1ppp/8/4p3/3P4/6P1/PPP1PP1P/RNBQKBNR b KQkq - 2 4 1846 27730635163 51190752510898
rnbqkbnr/pppp1ppp/4p3/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 4 1859 25458082252 47326574906468
rnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 4 1859 21181685531 39376753402129
rnbqkbnr/ppp1pppp/8/3p4/1P1P4/8/P1P1PPPP/RNBQKBNR b KQkq - 2 4 1860 16312377070 30341021350200
rnbqkbnr/pppp1ppp/4p3/8/4PP2/8/PPPP2PP/RNBQKBNR b KQkq - 2 4 1871 23074478624 43172349505504
rnbqkbnr/pppp1ppp/8/4p3/4PP2/8/PPPP2PP/RNBQKBNR b KQkq - 2 4 1871 23276488373 43550309745883
rnbqkbnr/pppp1ppp/4p3/8/1P1P4/8/P1P1PPPP/RNBQKBNR b KQkq - 2 4 1880 19555808844 36764920626720
rnbqkbnr/pppp1ppp/8/4p3/1P1P4/8/P1P1PPPP/RNBQKBNR b KQkq - 2 4 1880 23646380066 44455194524080
rnbqkbnr/pppp1ppp/4p3/8/4P2P/8/PPPP1PP1/RNBQKBNR b KQkq - 2 4 1895 28517925251 54041468350645
rnbqkbnr/pppp1ppp/8/4p3/4P2P/8/PPPP1PP1/RNBQKBNR b KQkq - 2 4 1895 23807279740 45114795107300
rnbqkbnr/pppp1ppp/4p3/8/2P5/4P3/PP1P1PPP/RNBQKBNR b KQkq - 2 4 1901 23200744413 44104615129113
rnbqkbnr/pppp1ppp/8/4p3/2P5/4P3/PP1P1PPP/RNBQKBNR b KQkq - 2 4 1901 23105052708 43922705197908
rnbqkbnr/ppp1pppp/3p4/8/4P3/3P4/PPP2PPP/RNBQKBNR b KQkq - 2 4 1913 22085756567 42250052312671
rnbqkbnr/ppp1pppp/3p4/8/3P4/4P3/PPP2PPP/RNBQKBNR b KQkq - 2 4 1932 22898829240 44240538091680
rnbqkbnr/ppp1pppp/8/3p4/1P2P3/8/P1PP1PPP/RNBQKBNR b KQkq - 2 4 1938 26682890088 51711440990544
rnbqkbnr/pppp1ppp/4p3/8/P3P3/8/1PPP1PPP/RNBQKBNR b KQkq - 2 4 1939 28528777945 55317300435355
rnbqkbnr/pppp1ppp/8/4p3/P3P3/8/1PPP1PPP/RNBQKBNR b KQkq - 2 4 1939 23813494835 46174366485065
rnbqkbnr/pppp1ppp/4p3/8/8/3PP3/PPP2PPP/RNBQKBNR b KQkq - 2 4 1950 22368711603 43618987625850
rnbqkbnr/pppp1ppp/8/4p3/8/3PP3/PPP2PPP/RNBQKBNR b KQkq - 2 4 1950 22625464911 44119656576450
rnbqkbnr/pppp1ppp/4p3/8/1P6/4P3/P1PP1PPP/RNBQKBNR b KQkq - 2 4 1952 25674449928 50116526259456
rnbqkbnr/pppp1ppp/8/4p3/1P6/4P3/P1PP1PPP/RNBQKBNR b KQkq - 2 4 1952 25367786786 49517919806272
rnbqkbnr/pppp1ppp/4p3/8/6P1/4P3/PPPP1P1P/RNBQKBNR b KQkq - 2 4 1960 21116152737 41387659364520
rnbqkbnr/pppp1ppp/8/4p3/6P1/4P3/PPPP1P1P/RNBQKBNR b KQkq - 2 4 1960 21021712137 41202555788520
rnbqkbnr/pppp1ppp/4p3/8/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 2 4 1972 24470344119 48255518602668
rnbqkbnr/pppp1ppp/4p3/8/3P2P1/8/PPP1PP1P/RNBQKBNR b KQkq - 2 4 1972 21801796063 42993141836236
rnbqkbnr/pppp1ppp/8/4p3/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 2 4 1972 29432314139 58040523482108
rnbqkbnr/pppp1ppp/8/4p3/3P2P1/8/PPP1PP1P/RNBQKBNR b KQkq - 2 4 1972 26120214599 51509063189228
rnbqkbnr/pppp1ppp/4p3/8/4P3/2N5/PPPP1PPP/R1BQKBNR b KQkq - 2 4 1988 29575701542 58796494665496
rnbqkbnr/pppp1ppp/8/4p3/4P3/2N5/PPPP1PPP/R1BQKBNR b KQkq - 2 4 1988 24654821849 49013785835812
rnbqkbnr/pppp1ppp/4p3/8/4P3/2P5/PP1P1PPP/RNBQKBNR b KQkq - 2 4 2004 26884485317 53876508575268
rnbqkbnr/pppp1ppp/4p3/8/8/2P1P3/PP1P1PPP/RNBQKBNR b KQkq - 2 4 2004 27764421036 55639899756144
rnbqkbnr/pppp1ppp/8/4p3/4P3/2P5/PP1P1PPP/RNBQKBNR b KQkq - 2 4 2004 22430362486 44950446421944
rnbqkbnr/pppp1ppp/8/4p3/8/2P1P3/PP1P1PPP/RNBQKBNR b KQkq - 2 4 2004 27615109506 55340679450024
rnbqkbnr/ppp1pppp/8/3p4/4P3/3P4/PPP2PPP/RNBQKBNR b KQkq - 2 4 2015 33139181797 66775451320955
rnbqkbnr/pppp1ppp/4p3/8/2P1P3/8/PP1P1PPP/RNBQKBNR b KQkq - 2 4 2033 23268582165 47305027541445
rnbqkbnr/pppp1ppp/8/4p3/2P1P3/8/PP1P1PPP/RNBQKBNR b KQkq - 2 4 2033 19401505904 39443261502832
rnbqkbnr/ppp1pppp/8/3p4/3P4/4P3/PPP2PPP/RNBQKBNR b KQkq - 2 4 2035 23884723064 48605411435240
rnbqkbnr/pppp1ppp/4p3/8/8/2N1P3/PPPP1PPP/R1BQKBNR b KQkq - 2 4 2054 32143089912 66021906679248
rnbqkbnr/pppp1ppp/8/4p3/8/2N1P3/PPPP1PPP/R1BQKBNR b KQkq - 2 4 2054 31917755909 65559070637086
rnbqkbnr/pppp1ppp/4p3/8/1P2P3/8/P1PP1PPP/RNBQKBNR b KQkq - 2 4 2078 25528764253 53048772117734
rnbqkbnr/pppp1ppp/8/4p3/1P2P3/8/P1PP1PPP/RNBQKBNR b KQkq - 2 4 2078 21133552645 43915522396310
rnbqkbnr/pppp1ppp/4p3/8/4P3/1P6/P1PP1PPP/RNBQKBNR b KQkq - 2 4 2088 27620209752 57670997962176
rnbqkbnr/pppp1ppp/4p3/8/8/1P2P3/P1PP1PPP/RNBQKBNR b KQkq - 2 4 2088 28128920365 58733185722120
rnbqkbnr/pppp1ppp/8/4p3/4P3/1P6/P1PP1PPP/RNBQKBNR b KQkq - 2 4 2088 22847804078 47706214914864
rnbqkbnr/pppp1ppp/8/4p3/8/1P2P3/P1PP1PPP/RNBQKBNR b KQkq - 2 4 2088 27753918754 57950182358352
rnbqkbnr/pppp1ppp/4p3/8/4P1P1/8/PPPP1P1P/RNBQKBNR b KQkq - 2 4 2092 21328002313 44618180838796
rnbqkbnr/pppp1ppp/4p3/8/4P3/6P1/PPPP1P1P/RNBQKBNR b KQkq - 2 4 2092 26589427671 55625082687732
rnbqkbnr/pppp1ppp/4p3/8/8/4P1P1/PPPP1P1P/RNBQKBNR b KQkq - 2 4 2092 27180941418 56862529446456
rnbqkbnr/pppp1ppp/8/4p3/4P1P1/8/PPPP1P1P/RNBQKBNR b KQkq - 2 4 2092 17703862437 37036480218204
rnbqkbnr/pppp1ppp/8/4p3/4P3/6P1/PPPP1P1P/RNBQKBNR b KQkq - 2 4 2092 22236482175 46518720710100
rnbqkbnr/pppp1ppp/8/4p3/8/4P1P1/PPPP1P1P/RNBQKBNR b KQkq - 2 4 2092 27117083499 56728938679908
rnbqkbnr/pppp1ppp/4p3/8/4P3/3P4/PPP2PPP/RNBQKBNR b KQkq - 2 4 2166 30198759357 65410512767262
rnbqkbnr/pppp1ppp/8/4p3/4P3/3P4/PPP2PPP/RNBQKBNR b KQkq - 2 4 2166 25540143800 55319951470800
rnbqkbnr/ppp1pppp/3p4/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 2 4 2248 31150577721 70026498716808
rnbqkbnr/pppp1ppp/4p3/8/3P4/4P3/PPP2PPP/RNBQKBNR b KQkq - 2 4 2258 33424915802 75473459880916
rnbqkbnr/pppp1ppp/8/4p3/3P4/4P3/PPP2PPP/RNBQKBNR b KQkq - 2 4 2258 39795827246 89858977921468
rnbqkbnr/ppp1pppp/8/3p4/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 2 4 2368 39377074544 93244912520192
rnbqkbnr/pppp1ppp/4p3/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 2 4 2600 43928908948 114215163264800
rnbqkbnr/pppp1ppp/8/4p3/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 2 4 2600 44948569301 116866280182600
User avatar
sje
Posts: 4675
Joined: Mon Mar 13, 2006 7:43 pm

Status

Post by sje »

The completed record count is now 308,712.

Only wu7.964 is complete. Units wu7.000 to wu7.007 are in progress with each running on a different machine, some of which are old and slow.

wu7.001 is closet to completion with 86,139 records (dual core 3.2 GHz Core i5 8 GB trans table), but wu7.003 is catching up with 71,597 records (quad core 3.4 GHz Core i5, 16 GB trans table).

wu7.007 has only 2,575 records (old 2.16 GHz Core 2 Duo, 1 GB trans table). It is averaging about eight records per hour.
User avatar
sje
Posts: 4675
Joined: Mon Mar 13, 2006 7:43 pm

Work unit wu7.400 result, first ten records

Post by sje »

Work unit wu7.400 result, first ten records:

Code: Select all

r1bqkbnr/pppppp1p/6p1/4n3/3P1B2/5N2/PPP1PPPP/RN1QKBR1 b Qkq - 2 4 18 13542690221 243768423978
r1bqkbnr/pppppp1p/6p1/4n3/3P1B2/5P2/PPP1PKPP/RN1Q1BNR b kq - 2 4 18 13159898201 236878167618
r1bqkbnr/pppppp1p/6p1/4n3/3P1B2/6P1/PPP1PPBP/RN1QK1NR b KQkq - 2 4 18 18616564758 335098165644
r1bqkbnr/pppppp1p/6p1/4n3/3P1B2/6PB/PPP1PP1P/RN1QK1NR b KQkq - 2 4 18 13659770406 245875867308
r1bqkbnr/pppppp1p/6p1/4n3/3P1B2/7N/PPP1PPPP/RN1QKBR1 b Qkq - 2 4 18 10276706929 184980724722
r1bqkbnr/pppppp1p/6p1/4n3/3P1B2/7P/PPP1PPPR/RN1QKBN1 b Qkq - 2 4 18 11251646408 202529635344
r1bqkbnr/pppppp1p/6p1/4n3/3P1B2/N7/PPP1PPPP/1R1QKBNR b Kkq - 2 4 18 11426341211 205674141798
r1bqkbnr/pppppp1p/6p1/4n3/3P1B2/P7/RPP1PPPP/1N1QKBNR b Kkq - 2 4 18 11213218821 201837938778
r1bqkbnr/pppppp1p/6p1/4n3/3P1BP1/7B/PPP1PP1P/RN1QK1NR b KQkq - 2 4 18 11251115634 202520081412
r1bqkbnr/pppppp1p/6p1/4n3/3P1BP1/8/PPP1PPBP/RN1QK1NR b KQkq - 2 4 18 19488849546 350799291828
The sum of the products for this segment is 2,409,962,438,430.
ZirconiumX
Posts: 1334
Joined: Sun Jul 17, 2011 11:14 am

Re: Work unit wu7.984

Post by ZirconiumX »

sje wrote:
ZirconiumX wrote:I'm currently working on WU 400, as it's a nice even number that you probably haven't gottent to yet. As of time of writing, the program is 0.7% complete. I reckon this will take a while.
I recommend running the wu7.964 work unit which has only 68 records then comparing the result to the posted, uncompressed version of same. The two files should be byte-for-byte identical. Word count and signature:

Code: Select all

$ wc wu7.964.sum
      68     612    6426 wu7.964.sum
$ md5 wu7.964.sum
MD5 &#40;wu7.964.sum&#41; = 1b329dcb65c93460e614a88823854578
The whole thing:

Code: Select all

$ cat wu7.964.sum
rnbqkbnr/ppp1pppp/8/3p4/4P3/6P1/PPPP1P1P/RNBQKBNR b KQkq - 2 4 1814 25480664076 46221924633864
rnbqkbnr/ppp1pppp/8/3p4/8/4P1P1/PPPP1P1P/RNBQKBNR b KQkq - 2 4 1814 21532409086 39059790082004
rnbqkbnr/ppp1pppp/8/3p4/1P6/4P3/P1PP1PPP/RNBQKBNR b KQkq - 2 4 1818 22385375254 40696612211772
rnbqkbnr/ppp1pppp/8/3p4/4P3/1P6/P1PP1PPP/RNBQKBNR b KQkq - 2 4 1818 26837335560 48790276048080
rnbqkbnr/ppp1pppp/8/3p4/8/1P2P3/P1PP1PPP/RNBQKBNR b KQkq - 2 4 1818 22745542738 41351396697684
rnbqkbnr/ppp1pppp/3p4/8/1P2P3/8/P1PP1PPP/RNBQKBNR b KQkq - 2 4 1840 18050327389 33212602395760
rnbqkbnr/pppp1ppp/4p3/8/3P4/1P6/P1P1PPPP/RNBQKBNR b KQkq - 2 4 1842 21145790077 38950545321834
rnbqkbnr/pppp1ppp/8/4p3/3P4/1P6/P1P1PPPP/RNBQKBNR b KQkq - 2 4 1842 25573440561 47106277513362
rnbqkbnr/pppp1ppp/4p3/8/3P4/6P1/PPP1PP1P/RNBQKBNR b KQkq - 2 4 1846 22885046723 42245796250658
rnbqkbnr/pppp1ppp/8/4p3/3P4/6P1/PPP1PP1P/RNBQKBNR b KQkq - 2 4 1846 27730635163 51190752510898
rnbqkbnr/pppp1ppp/4p3/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 4 1859 25458082252 47326574906468
rnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 4 1859 21181685531 39376753402129
rnbqkbnr/ppp1pppp/8/3p4/1P1P4/8/P1P1PPPP/RNBQKBNR b KQkq - 2 4 1860 16312377070 30341021350200
rnbqkbnr/pppp1ppp/4p3/8/4PP2/8/PPPP2PP/RNBQKBNR b KQkq - 2 4 1871 23074478624 43172349505504
rnbqkbnr/pppp1ppp/8/4p3/4PP2/8/PPPP2PP/RNBQKBNR b KQkq - 2 4 1871 23276488373 43550309745883
rnbqkbnr/pppp1ppp/4p3/8/1P1P4/8/P1P1PPPP/RNBQKBNR b KQkq - 2 4 1880 19555808844 36764920626720
rnbqkbnr/pppp1ppp/8/4p3/1P1P4/8/P1P1PPPP/RNBQKBNR b KQkq - 2 4 1880 23646380066 44455194524080
rnbqkbnr/pppp1ppp/4p3/8/4P2P/8/PPPP1PP1/RNBQKBNR b KQkq - 2 4 1895 28517925251 54041468350645
rnbqkbnr/pppp1ppp/8/4p3/4P2P/8/PPPP1PP1/RNBQKBNR b KQkq - 2 4 1895 23807279740 45114795107300
rnbqkbnr/pppp1ppp/4p3/8/2P5/4P3/PP1P1PPP/RNBQKBNR b KQkq - 2 4 1901 23200744413 44104615129113
rnbqkbnr/pppp1ppp/8/4p3/2P5/4P3/PP1P1PPP/RNBQKBNR b KQkq - 2 4 1901 23105052708 43922705197908
rnbqkbnr/ppp1pppp/3p4/8/4P3/3P4/PPP2PPP/RNBQKBNR b KQkq - 2 4 1913 22085756567 42250052312671
rnbqkbnr/ppp1pppp/3p4/8/3P4/4P3/PPP2PPP/RNBQKBNR b KQkq - 2 4 1932 22898829240 44240538091680
rnbqkbnr/ppp1pppp/8/3p4/1P2P3/8/P1PP1PPP/RNBQKBNR b KQkq - 2 4 1938 26682890088 51711440990544
rnbqkbnr/pppp1ppp/4p3/8/P3P3/8/1PPP1PPP/RNBQKBNR b KQkq - 2 4 1939 28528777945 55317300435355
rnbqkbnr/pppp1ppp/8/4p3/P3P3/8/1PPP1PPP/RNBQKBNR b KQkq - 2 4 1939 23813494835 46174366485065
rnbqkbnr/pppp1ppp/4p3/8/8/3PP3/PPP2PPP/RNBQKBNR b KQkq - 2 4 1950 22368711603 43618987625850
rnbqkbnr/pppp1ppp/8/4p3/8/3PP3/PPP2PPP/RNBQKBNR b KQkq - 2 4 1950 22625464911 44119656576450
rnbqkbnr/pppp1ppp/4p3/8/1P6/4P3/P1PP1PPP/RNBQKBNR b KQkq - 2 4 1952 25674449928 50116526259456
rnbqkbnr/pppp1ppp/8/4p3/1P6/4P3/P1PP1PPP/RNBQKBNR b KQkq - 2 4 1952 25367786786 49517919806272
rnbqkbnr/pppp1ppp/4p3/8/6P1/4P3/PPPP1P1P/RNBQKBNR b KQkq - 2 4 1960 21116152737 41387659364520
rnbqkbnr/pppp1ppp/8/4p3/6P1/4P3/PPPP1P1P/RNBQKBNR b KQkq - 2 4 1960 21021712137 41202555788520
rnbqkbnr/pppp1ppp/4p3/8/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 2 4 1972 24470344119 48255518602668
rnbqkbnr/pppp1ppp/4p3/8/3P2P1/8/PPP1PP1P/RNBQKBNR b KQkq - 2 4 1972 21801796063 42993141836236
rnbqkbnr/pppp1ppp/8/4p3/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 2 4 1972 29432314139 58040523482108
rnbqkbnr/pppp1ppp/8/4p3/3P2P1/8/PPP1PP1P/RNBQKBNR b KQkq - 2 4 1972 26120214599 51509063189228
rnbqkbnr/pppp1ppp/4p3/8/4P3/2N5/PPPP1PPP/R1BQKBNR b KQkq - 2 4 1988 29575701542 58796494665496
rnbqkbnr/pppp1ppp/8/4p3/4P3/2N5/PPPP1PPP/R1BQKBNR b KQkq - 2 4 1988 24654821849 49013785835812
rnbqkbnr/pppp1ppp/4p3/8/4P3/2P5/PP1P1PPP/RNBQKBNR b KQkq - 2 4 2004 26884485317 53876508575268
rnbqkbnr/pppp1ppp/4p3/8/8/2P1P3/PP1P1PPP/RNBQKBNR b KQkq - 2 4 2004 27764421036 55639899756144
rnbqkbnr/pppp1ppp/8/4p3/4P3/2P5/PP1P1PPP/RNBQKBNR b KQkq - 2 4 2004 22430362486 44950446421944
rnbqkbnr/pppp1ppp/8/4p3/8/2P1P3/PP1P1PPP/RNBQKBNR b KQkq - 2 4 2004 27615109506 55340679450024
rnbqkbnr/ppp1pppp/8/3p4/4P3/3P4/PPP2PPP/RNBQKBNR b KQkq - 2 4 2015 33139181797 66775451320955
rnbqkbnr/pppp1ppp/4p3/8/2P1P3/8/PP1P1PPP/RNBQKBNR b KQkq - 2 4 2033 23268582165 47305027541445
rnbqkbnr/pppp1ppp/8/4p3/2P1P3/8/PP1P1PPP/RNBQKBNR b KQkq - 2 4 2033 19401505904 39443261502832
rnbqkbnr/ppp1pppp/8/3p4/3P4/4P3/PPP2PPP/RNBQKBNR b KQkq - 2 4 2035 23884723064 48605411435240
rnbqkbnr/pppp1ppp/4p3/8/8/2N1P3/PPPP1PPP/R1BQKBNR b KQkq - 2 4 2054 32143089912 66021906679248
rnbqkbnr/pppp1ppp/8/4p3/8/2N1P3/PPPP1PPP/R1BQKBNR b KQkq - 2 4 2054 31917755909 65559070637086
rnbqkbnr/pppp1ppp/4p3/8/1P2P3/8/P1PP1PPP/RNBQKBNR b KQkq - 2 4 2078 25528764253 53048772117734
rnbqkbnr/pppp1ppp/8/4p3/1P2P3/8/P1PP1PPP/RNBQKBNR b KQkq - 2 4 2078 21133552645 43915522396310
rnbqkbnr/pppp1ppp/4p3/8/4P3/1P6/P1PP1PPP/RNBQKBNR b KQkq - 2 4 2088 27620209752 57670997962176
rnbqkbnr/pppp1ppp/4p3/8/8/1P2P3/P1PP1PPP/RNBQKBNR b KQkq - 2 4 2088 28128920365 58733185722120
rnbqkbnr/pppp1ppp/8/4p3/4P3/1P6/P1PP1PPP/RNBQKBNR b KQkq - 2 4 2088 22847804078 47706214914864
rnbqkbnr/pppp1ppp/8/4p3/8/1P2P3/P1PP1PPP/RNBQKBNR b KQkq - 2 4 2088 27753918754 57950182358352
rnbqkbnr/pppp1ppp/4p3/8/4P1P1/8/PPPP1P1P/RNBQKBNR b KQkq - 2 4 2092 21328002313 44618180838796
rnbqkbnr/pppp1ppp/4p3/8/4P3/6P1/PPPP1P1P/RNBQKBNR b KQkq - 2 4 2092 26589427671 55625082687732
rnbqkbnr/pppp1ppp/4p3/8/8/4P1P1/PPPP1P1P/RNBQKBNR b KQkq - 2 4 2092 27180941418 56862529446456
rnbqkbnr/pppp1ppp/8/4p3/4P1P1/8/PPPP1P1P/RNBQKBNR b KQkq - 2 4 2092 17703862437 37036480218204
rnbqkbnr/pppp1ppp/8/4p3/4P3/6P1/PPPP1P1P/RNBQKBNR b KQkq - 2 4 2092 22236482175 46518720710100
rnbqkbnr/pppp1ppp/8/4p3/8/4P1P1/PPPP1P1P/RNBQKBNR b KQkq - 2 4 2092 27117083499 56728938679908
rnbqkbnr/pppp1ppp/4p3/8/4P3/3P4/PPP2PPP/RNBQKBNR b KQkq - 2 4 2166 30198759357 65410512767262
rnbqkbnr/pppp1ppp/8/4p3/4P3/3P4/PPP2PPP/RNBQKBNR b KQkq - 2 4 2166 25540143800 55319951470800
rnbqkbnr/ppp1pppp/3p4/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 2 4 2248 31150577721 70026498716808
rnbqkbnr/pppp1ppp/4p3/8/3P4/4P3/PPP2PPP/RNBQKBNR b KQkq - 2 4 2258 33424915802 75473459880916
rnbqkbnr/pppp1ppp/8/4p3/3P4/4P3/PPP2PPP/RNBQKBNR b KQkq - 2 4 2258 39795827246 89858977921468
rnbqkbnr/ppp1pppp/8/3p4/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 2 4 2368 39377074544 93244912520192
rnbqkbnr/pppp1ppp/4p3/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 2 4 2600 43928908948 114215163264800
rnbqkbnr/pppp1ppp/8/4p3/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 2 4 2600 44948569301 116866280182600
Confirmed.

Code: Select all

&#91;matthew@localhost gperft_1.0.3_linux&#93;$ wc wu7.964.sum
  68  612 6426 wu7.964.sum
&#91;matthew@localhost gperft_1.0.3_linux&#93;$ md5sum wu7.964.sum
1b329dcb65c93460e614a88823854578  wu7.964.sum
sje wrote: Work unit wu7.400 result, first ten records:

Code: Select all

r1bqkbnr/pppppp1p/6p1/4n3/3P1B2/5N2/PPP1PPPP/RN1QKBR1 b Qkq - 2 4 18 13542690221 243768423978
r1bqkbnr/pppppp1p/6p1/4n3/3P1B2/5P2/PPP1PKPP/RN1Q1BNR b kq - 2 4 18 13159898201 236878167618
r1bqkbnr/pppppp1p/6p1/4n3/3P1B2/6P1/PPP1PPBP/RN1QK1NR b KQkq - 2 4 18 18616564758 335098165644
r1bqkbnr/pppppp1p/6p1/4n3/3P1B2/6PB/PPP1PP1P/RN1QK1NR b KQkq - 2 4 18 13659770406 245875867308
r1bqkbnr/pppppp1p/6p1/4n3/3P1B2/7N/PPP1PPPP/RN1QKBR1 b Qkq - 2 4 18 10276706929 184980724722
r1bqkbnr/pppppp1p/6p1/4n3/3P1B2/7P/PPP1PPPR/RN1QKBN1 b Qkq - 2 4 18 11251646408 202529635344
r1bqkbnr/pppppp1p/6p1/4n3/3P1B2/N7/PPP1PPPP/1R1QKBNR b Kkq - 2 4 18 11426341211 205674141798
r1bqkbnr/pppppp1p/6p1/4n3/3P1B2/P7/RPP1PPPP/1N1QKBNR b Kkq - 2 4 18 11213218821 201837938778
r1bqkbnr/pppppp1p/6p1/4n3/3P1BP1/7B/PPP1PP1P/RN1QK1NR b KQkq - 2 4 18 11251115634 202520081412
r1bqkbnr/pppppp1p/6p1/4n3/3P1BP1/8/PPP1PPBP/RN1QK1NR b KQkq - 2 4 18 19488849546 350799291828
The sum of the products for this segment is 2,409,962,438,430.
Also confirmed.

I need to work on the resumption code for the driver before I try 400 though, since it currently doesn't work, and I kind of need it to.

Mathew:out
Some believe in the almighty dollar.

I believe in the almighty printf statement.
User avatar
sje
Posts: 4675
Joined: Mon Mar 13, 2006 7:43 pm

Re: Work unit wu7.984

Post by sje »

I'm glad that there was complete agreement among the results. This is a very good sign.

Having a somewhat robust recovery process is a good idea, particularly if one has frequent power outages. To help, I have Symbolic do a flush() on each output line to better prevent partial records which could really mess up things. The program also does some sanity checking on all file inputs. All of the work unit data has been checked four times already by using it to calculate perft(7) through perft(10), but it never hurts to perform even more tests if they don't take too long.

Now at 328,090 perft(7) calculations completed. My trusty HP-35s calculator tells me that is is abut 11/3232 of the way to completion.

I will start wu7.008 when one of the current units is finished and posted. This should happen in a few more days.
User avatar
sje
Posts: 4675
Joined: Mon Mar 13, 2006 7:43 pm

Proof

Post by sje »

How can the final result of the perft(14) project be proven?

If the number matches the independently given answer given previously, then that's strong evidence of correctness.

Another way is to produce the perft(13) numbers for each of the 20 ply 1 positions and the perft(12) numbers for each of the 400 ply 2 positions. Each of these can be done quickly by a conventional perft() computation by accessing the completed work unit data each time a perft(7) number is needed. These will be referenced at ply 6 or the perft(13) proof set and at ply 5 for the perft(12) proof set. Matching the totals of the two sets of sub sums and matching these with the perft(14) value is pretty good proof. Also, having these 20 perft(13) and 400 perft(12) numbers makes it easier for independent verification of partial results.