GMP's speed

Chris Osborne chris.osborne at gmx.com
Fri Mar 9 10:01:35 CET 2012


Hi all,
 First of all, I hope that this is the right mailing list.

 I'm building my first real programs using gmp, in one of my first real forays into c++ from the world of java. I built a rapid badly designed proof of concept of my program in java, and have spent a few days rebuild the program in a neater manner in c++ (it still isn't great though). The program performs a few calculations, for some research that I am performing on polynomials. Such as a user defines a max and min value for x and the program then calculates d=(b+1)²-4(120b²-bx) for all values of b that allow d to be positive. It then looks at floor(sqrt(d)) and compares it to d, if they are the same, the the loop for checking values of b is broken and x increases by 1, otherwise when it has tested all of the values and if this previous statement did not apply to any of them then it writes the value into a text file created on initialization and moves onto the next value of x. What supprised me was that my java program using doubles takes around 7s to perform this operation for 0<x<100000 wheras this program in c++ using only gmp functions, because we want to test much bigger numbers later, takes around 19s. After a few different tests I happened to be watching processor usage as the two programs executed. Java, which of course can never utilise a cpu to its full potential brought the 4 cores of my cpu up to around 60-70% usage, whereas the c++ just floored 1 core (so 25% of total cpu), unsurprising as I didn't do any threading works.

 To get an accurate representation of the time taken by these programs should I instead be looking at their cpu time as opposed to their "clock" time? Or is GMP just quite slow on smaller number due to the algorithms it uses being designed for very large numbers? One other question, which I may not be supposed to ask here, but is there any easy way of making applications multi-threaded, I imagine not, but, if somebody has decent resource on this area, I'd be very obliged if they'd send a link, because this program is gonna need to be multi-threaded in the long run.

 Many Thanks in advance and good coding to one and all!
 Chris


More information about the gmp-discuss mailing list