sje wrote:Symbolic needs to do 128 bit arithmetic at a rate faster than an external interpreter can provide. Also, that external interpreter may not even be present on small platforms like a BeagleBone Black or a Raspberry Pi. Or the interpreter might not even be available, as with an older PowerPC Mac.
You will be pleased to learn that GMP is native, not interpreted, and available on all these platforms.
At least for perft, high-performance 128 bit arithmetic should not needed, even be a waste, given the size of the subtree required to reach such quantities. Or maybe I'm missing something. My experience is with queens() calculations, which is very similar in nature. Even if such integer size were needed once every couple of hours, and even if such would require a couple of billion additional cycles, that won't make an observable difference.
When running an a 512 MiB machine there just isn't room for an interpreter to ride along with Symbolic. The program's transposition tables are auto-sized to make use of all the memory available, and I already have enough to worry about with the space eaten by the kernel and any vampire video.
The 128 bit arithmetic is needed thousands to millions of times per second, even when just processing an external file loaded with 128 quantities. Activating an external interpreter will wipe out the code and data L1 caches.
As for the GNP, there are licensing issues.
I have no interest in introducing unnecessary dependencies over which I have no control.