performance question

Nathan Moore nmoore at physics.umn.edu
Fri Apr 30 05:05:14 CEST 2004


Hello,

I'm currently using gmp to compute the value of a rather delicate 
polynomial many times.  To stay sane I wrote the c program in a modular 
fashion so that the delicate gmp stuff is in a function called from 
main.  What I'm wondering is if calling the function many many times 
(the function creating, initializing, and at the end, clearing the 
mpq_t variables over and over) is stupid in terms of performance costs. 
  I've thought about re-writing the program to just have one function 
and avoid this initialization cost, but that seems really hard to read 
(about 1000 lines).

The code is roughly as follows,

main() {

	//do some initialization stuff, including
	mpq_t b[100];
	for(i=0;i<100;i++) { mpq_init(b[i]); }

	// main iteration, called function includes many mpq functions
	term[0]=1.0;
	for(i=0;i<10000;i++) {
		for(j=1;j<100;j++) {
			term[j] = compute_value(b, j);
		}
	}

	// do some clean up stuff
	for(i=0;i<100;i++) { mpq_clear(b[i]); }

	return;
}

double compute_value(mpq_t b[], int j) {

	// declare and initialize 15 mpq_t variables
	mpq_t a1,a2,a3...a15;
	mpq_init(a1); .... mpq_init(a15);

	// perform a bunch of mpq math operations (add, multiply, compare etc)
	// final operations use passed in b[] to create returned double value, 
"result"

	// clean up
	mpq_clear(a1); .... mpq_clear(a15);
	
	return result;
}

To reiterate, will a compiler figure out that mpq_init and mpq_clear 
iterated each time the compute_value() function is called is stupid and 
inline the function for me, or should I inline the functions myself for 
a noticeable performance benefit?

thanks,  all suggestions are welcome!

Nathan Moore
University of Minnesota Physics



More information about the gmp-discuss mailing list