This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Floating point performance issue


* On Tue Dec 20 11:05:17 +0100 2011, Marcin MirosÅaw wrote:
 
> W dniu 20.12.2011 10:52, Ico pisze:

> > I am able to reproduce this on multiple i686 boxes using various gcc versions
> > (4.4, 4.6). Compiling on x86_64 does not show this behaviour.
> > 
> > Is anybody able to reproduce this issue, and how can this be explained ?
> 
> I can reproduce such situation too. I can only guess this happens
> because on i686 default is mfpmath=387, on x86_64 default is
> mfpmath=sse. If you compile your code using "-O3 -mfpmath=sse
> -march=native <or something what else what have support for sse>" then
> booth times will be almost equal.

Thanks for testing this.

Still, I'm not sure if sse is part of the problem and/or solution.

I have been reducing the program to see what the smallest code is that still
shows this behaviour. Latest version is below. 


$ gcc -msse -mfpmath=sse -O3 -march=native test.c 
$ time ./a.out 0.9

real	0m2.653s
user	0m2.648s
sys	0m0.002s
$ time ./a.out 0.001

real	0m0.144s
user	0m0.140s
sys	0m0.002s


/* gcc -msse -mfpmath=sse -O3 -march=native test.c  */

#include <stdlib.h>

#define S 20000000
        
int main(int argc, char **argv)
{       
        int j;
        double a = 0;
        double b = 1;
        double f = atof(argv[1]);

        for(j=0; j<S; j++) {
                a = b * f;
                b = a * f;
        }

        return a;
}
-- 
:wq
^X^Cy^K^X^C^C^C^C


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]