Maybe I shouldn't say too much about perft(14), because I once said that I wasn't interested in doing perft(13) and look at what happened.
It is possible that perft(14) has already been calculated; any of a number of government parallel supercomputers could grind out the result in an afternoon or less. And it would be a good test of distributed integer performance, but it would not be made public.
With consumer level hardware, a distributed approach to perft(14) seems best at this time. But it is a non-trivial task. Consider any number of well known distributed computing projects where the end-user application has had dozens of revisions to squeeze out bugs. Perft(n) cannot admit a single off-by-one error; any bug would mean a restart.
For perft(14), I'd consider generating the 96,400,068 ply seven positions (each with a usage count) and deal these to worker clients with each position getting a draft 7 calculation. Averaging three per second would allow the run to complete in about one year, but without any redundancy checking. Tripling the time (or the processors) would support 2-from-3 majority voting for flagging bad intermediate results.
Perft(14)
Moderator: Ras
-
- Posts: 3241
- Joined: Mon May 31, 2010 1:29 pm
- Full name: lucasart
Re: Perft(14)
What happenned to your project CookieCat ? Are you going to finish making it a chess engine, or will you go on and explore more perft() ?sje wrote:Maybe I shouldn't say too much about perft(14), because I once said that I wasn't interested in doing perft(13) and look at what happened.
It is possible that perft(14) has already been calculated; any of a number of government parallel supercomputers could grind out the result in an afternoon or less. And it would be a good test of distributed integer performance, but it would not be made public.
With consumer level hardware, a distributed approach to perft(14) seems best at this time. But it is a non-trivial task. Consider any number of well known distributed computing projects where the end-user application has had dozens of revisions to squeeze out bugs. Perft(n) cannot admit a single off-by-one error; any bug would mean a restart.
For perft(14), I'd consider generating the 96,400,068 ply seven positions (each with a usage count) and deal these to worker clients with each position getting a draft 7 calculation. Averaging three per second would allow the run to complete in about one year, but without any redundancy checking. Tripling the time (or the processors) would support 2-from-3 majority voting for flagging bad intermediate results.
I would love to see CookieCat released. Already your perft code written in Pascal is extremely fast, and that's a good sign

Maybe it's time to give perft() a rest and focus on making a chess engine. It's really more fun once you start tuning it, and look how it improves in tournaments against other programs.
Theory and practice sometimes clash. And when that happens, theory loses. Every single time.
-
- Posts: 4675
- Joined: Mon Mar 13, 2006 7:43 pm
Re: Perft(14)
CookieCat can be found at https://dl.dropbox.com/u/31633927/Cooki ... kieCat.paslucasart wrote:What happenned to your project CookieCat ? Are you going to finish making it a chess engine, or will you go on and explore more perft() ?
I would love to see CookieCat released. Already your perft code written in Pascal is extremely fast, and that's a good sign
Maybe it's time to give perft() a rest and focus on making a chess engine. It's really more fun once you start tuning it, and look how it improves in tournaments against other programs.
Its main goal is to replace the ancient Chess 0.5 program as an example of a chess program written in Pascal. It has the BSD License, so there's a lot of freedom for people to work on it and pass it around.
-
- Posts: 2949
- Joined: Mon May 05, 2008 12:16 pm
- Location: Bordeaux (France)
- Full name: Julien Marcel
Re: Perft(14)
Wow, I'm not the only ches(s)tnut programming a chess engine in Pascal nowadays!sje wrote:CookieCat can be found at https://dl.dropbox.com/u/31633927/Cooki ... kieCat.paslucasart wrote:What happenned to your project CookieCat ? Are you going to finish making it a chess engine, or will you go on and explore more perft() ?
I would love to see CookieCat released. Already your perft code written in Pascal is extremely fast, and that's a good sign
Maybe it's time to give perft() a rest and focus on making a chess engine. It's really more fun once you start tuning it, and look how it improves in tournaments against other programs.
Its main goal is to replace the ancient Chess 0.5 program as an example of a chess program written in Pascal. It has the BSD License, so there's a lot of freedom for people to work on it and pass it around.

EDIT: rectification: your preft is up to nearly 8 times faster than mine! Impressive!

"The only good bug is a dead bug." (Don Dailey)
[Blog: http://tinyurl.com/predateur ] [Facebook: http://tinyurl.com/fbpredateur ] [MacEngines: http://tinyurl.com/macengines ]
[Blog: http://tinyurl.com/predateur ] [Facebook: http://tinyurl.com/fbpredateur ] [MacEngines: http://tinyurl.com/macengines ]
-
- Posts: 4675
- Joined: Mon Mar 13, 2006 7:43 pm
Re: Perft(14)
I'm going to neglect perft(n) for a while and work on my Fish80 program (retro-style Intel 8080 chess player) instead.
I might have the perft(13) machine be semi-permanently connected to the ICC, but first I need to open the box and clean out 14 months of cat fur.
I might have the perft(13) machine be semi-permanently connected to the ICC, but first I need to open the box and clean out 14 months of cat fur.
-
- Posts: 127
- Joined: Thu Sep 17, 2009 11:19 am
Re: Perft(14)
I did a simple distributed version of perft a few years ago, using WCF (SOAP) and entity framework it just took me a day or so to set up.
There are a few issues to solve...
1) Every user should queue up some "work units" locally to avoid going idle in case of network problems. The server side must remember which WUs have been assigned and re-assign them after a certain timeout period, as the user may have quit the project and they will never complete.
2) There should be a stats page to make it more interesting. Who is the lead cruncher, cruncher of the day and all that, like SETI.
3) You should have a super fast client for this, something coded just for perft. In fact you should probably have 2 independent clients and randomly validate the result not just between programs but also between users, so that every user is checked for credibility. Some users may have faulty hardware or overclock to the extent that it occationally flips a bit, such clients must be detected and denied access.
4) Some kind of security, so that a single user cannot intentionally send you garbage data and sabotage the final result. I image something like a username/password and an computed checksum on each message.
But it kinda seems like a lot of work, just for perft..
There are a few issues to solve...
1) Every user should queue up some "work units" locally to avoid going idle in case of network problems. The server side must remember which WUs have been assigned and re-assign them after a certain timeout period, as the user may have quit the project and they will never complete.
2) There should be a stats page to make it more interesting. Who is the lead cruncher, cruncher of the day and all that, like SETI.

3) You should have a super fast client for this, something coded just for perft. In fact you should probably have 2 independent clients and randomly validate the result not just between programs but also between users, so that every user is checked for credibility. Some users may have faulty hardware or overclock to the extent that it occationally flips a bit, such clients must be detected and denied access.
4) Some kind of security, so that a single user cannot intentionally send you garbage data and sabotage the final result. I image something like a username/password and an computed checksum on each message.
But it kinda seems like a lot of work, just for perft..

-
- Posts: 4675
- Joined: Mon Mar 13, 2006 7:43 pm
Re: Perft(14)
I hadn't looked at CookieCat in so long that I'd forgotten that it had a multithreaded perft.JuLieN wrote:EDIT: rectification: your preft is up to nearly 8 times faster than mine! Impressive!
-
- Posts: 4675
- Joined: Mon Mar 13, 2006 7:43 pm
Re: Perft(14)
It is a lot of work, and especially so because of the possibility of maleficent users. I did a lot of SETI@Home in the old days more than a decade ago before it became part of BOINC, and it had many growing pains in spite of having a bevy of grad students doing coding work.SuneF wrote:But it kinda seems like a lot of work, just for perft..
-
- Posts: 5106
- Joined: Tue Apr 29, 2008 4:27 pm
Re: Perft(14)
Steven,sje wrote:Maybe I shouldn't say too much about perft(14), because I once said that I wasn't interested in doing perft(13) and look at what happened.
It is possible that perft(14) has already been calculated; any of a number of government parallel supercomputers could grind out the result in an afternoon or less. And it would be a good test of distributed integer performance, but it would not be made public.
With consumer level hardware, a distributed approach to perft(14) seems best at this time. But it is a non-trivial task. Consider any number of well known distributed computing projects where the end-user application has had dozens of revisions to squeeze out bugs. Perft(n) cannot admit a single off-by-one error; any bug would mean a restart.
For perft(14), I'd consider generating the 96,400,068 ply seven positions (each with a usage count) and deal these to worker clients with each position getting a draft 7 calculation. Averaging three per second would allow the run to complete in about one year, but without any redundancy checking. Tripling the time (or the processors) would support 2-from-3 majority voting for flagging bad intermediate results.
You need to produce a binary and ask people to run them blind while sending you the output which the binary will place in a file. For each "work assignment" send out 2 for verification. Collect the results on your end. Make the assignments bite size, something that can be run in an hour or so and encourage people to run as many as they want. You could set up a simple server to make the assignments and report the results and they could even be random (you want duplication for verification.)
Just a suggestion.
Don
Capital punishment would be more effective as a preventive measure if it were administered prior to the crime.
-
- Posts: 4675
- Joined: Mon Mar 13, 2006 7:43 pm
On the other hand
On the other hand, the Adapteva gang at http://www.adapteva.com/ are promising an 8x8=64 core chip for US$200; they also talk of a future 32x32=1,024 core chip in the near future. Each core is a 32 bit RISC with a chunk of shared RAM, runs in MIMD mode, and is supposedly optimized for floating point operations. If the RAM is big enough and the instruction set has decent bitboard support, then a machine using a number of Adapteva chips could handle perft(14) fairly well.