Maple uses the GnuMP (a.k.a. GMP, or gmp) library in computing with large integers, see ?gmp .

Visiting the GMP web page one can find this interesting benchmark table. It indicates a higher known benchmark for Opteron/Athlon64 than for Core2. (I don't know that GMP makes special use of multiple cores at this time.)

That benchmark page also has results done with the slightly older GMP 4.1.4, which is what Maple 10 used. Clearly there has been an improvement, in GMP 4.2.1.

I downloaded the GMP benchmark suite, linked off that benchmark results page. I downloaded the source for GMP 4.2.1, so that I could compare it against what is in my Maple 11 for x86-64. I also downloaded this additional assembly support for GMP on Athlon64, so that I could compare using it as well. That patch is part of a project external to the official GMP propect, and its web page has its own disclaimer.

I built a pristine 4.2.1 shared library, as well as one to which I'd applied those additional assembler patches. In both cases, I used gcc 3.3.3 and the `make check` looked good.

Here are some scores that I got on an Athlon64 3200:

GMPbench results

-------------------------------------

Maple 10 (4.1.4) 3982.2

Maple 11 (??) 6565.5

4.2.1 6530.8

4.2.1 patched 7820.7

This roughly agrees with the GMPbench web page's tables, comparing Opteron/Athlon64 results there between 4.1.4 and 4.2.1. This also agrees roughly with results of the author of the additional assembler patch, whose overall score on a 2.4Gz Opteron went from 8200 to 10000. It also suggests that Maple 11 is using a version such as the regular (unpatched) 4.2.1 or something quite close to it on this platform.

Now, being brave, I copied aside the libgmp.so.3.4.1 that came with my Maple 11, and copied over the shared library I built using the assembler patches. I deduced the location by taking the first directory in the string obtained by issuing getenv(PATH) in maple. For me, that meant /usr/local/maple11/bin.X86_64_LINUX/ since I'd installed under /usr/local/maple11.

Here are some Maple timings, each separated by restarts.

` time( 1234567! );`

# Maple 11 old: 3.823 patched: 3.367

time( 12345678! );

# Maple 11 old: 69.614 patched: 60.837

cyclic7 := [t+u+v+w+x+y+z, t*u+u*v+v*w+w*x+x*y+y*z+z*t, t*u*v+u*v*w+v*w*x+w*x*y+x*y*z+y*z*t+z*t*u, t*u*v*w+u*v*w*x+v*w*x*y+w*x*y*z+x*y*z*t+y*z*t*u+z*t*u*v, t*u*v*w*x+u*v*w*x*y+v*w*x*y*z+w*x*y*z*t+x*y*z*t*u+y*z*t*u*v+t*u*v*w*z, t*u*v*w*x*y+u*v*w*x*y*z+v*w*x*y*z*t+w*x*y*z*t*u+x*y*z*t*u*v+y*z*t*u*v*w+z*t*u*v*w*x,t*u*v*w*x*y*z-1]: with(Groebner):

time(Basis(cyclic7,'tdeg'(t,u,v,w,x,y,z)));

# Maple 11 old: 9.934 patched: 9.569

Digits:=200:p:=randpoly(x,degree=50,dense):time(fsolve(p,x));

# Maple 11 old: 0.426 patched: 0.386

It may also be reasonable to imagine that one might replace the libgmp.so.3.3.3 that came with Maple 10, and that performance in Maple 10 might be improved significantly on other platforms as well, without even resorting to an unofficial patch. One might be able to simply upgrade the GMP library in use by Maple 10, assuming that the GMP API has not changed in a relevant way.

acer