From: <ram...@te...> - 2002-09-10 13:24:10
|
Hello to all, I've been making some tests of execution speed on one program that basically makes many floating point calculations and some disk access. In mingw, the program has been compiled with: gcc -O3 (also tried -mpentium -funroll-loops with no difference) The execution time of the program compiled with mingw is around 10% longer than the one with the Microsoft tool. Is it normal? Are there other optimization options that can speed up mingw? If this is a normal result, it is difficult to justify the use of mingw for any program where the execution speed is important. I am using mingw1.1. Changing to mingw2 makes any difference? Best regards, Ramon Ribó |
From: Oscar F. <of...@wa...> - 2002-09-10 20:46:54
|
Ramon Rib=F3 <ram...@te...> writes: > Hello to all, >=20 > I've been making some tests of execution speed on one program that > basically makes many floating point calculations and some disk access. >=20 > In mingw, the program has been compiled with: gcc -O3 (also tried > -mpentium -funroll-loops with no difference) >=20 > The execution time of the program compiled with mingw is around 10% > longer than the one with the Microsoft tool. >=20 > Is it normal? That's hard to say. Usually, MSVC++ produces quite faster code than gcc for floating point number crunching. The key here is "some disk access". I guess that this last phrase accounts for the difference being "only" 10%. Anyways, without seeing the we only can speculate (no, don't bother sending the source code :-) > Are there other optimization options that can speed up mingw? There are options that can affect certain kind of code. Again, I can't say anything for sure. You better take the gcc manual and experiment yourself. > If this is a normal result, it is difficult to justify the use > of mingw for any program where the execution speed is important. FWIW: MinGW/gcc 3.2 is *faster* than MSVC++ for the kind of code I write. YMMV. > I am using mingw1.1. Changing to mingw2 makes any difference? gcc 3.x sports a new x86 backend, but some people reported that still is not as good as MSVC++ for floating code. Intel is even better. gcc 3.x can make use of SSE2 if you work on Pentium IV. It worths a try. As you say that a 10% difference on performance disqualifies gcc for your work, I guess that your application domain is *absolutely* performance critical. You should evaluate Intel, then, which is the champion on the number crunching field. --=20 Oscar |
From: Greg C. <chi...@mi...> - 2002-09-11 05:05:24
|
Ramon Ribó wrote: > > I've been making some tests of execution speed on one program that > basically makes many floating point calculations and some disk access. > > In mingw, the program has been compiled with: gcc -O3 (also tried > -mpentium -funroll-loops with no difference) '-march=pentium' might do more than '-mpentium'. There are specific cpu-types for intel and amd processors more recent than the original pentium if that's what you have, but I don't know what difference they'll make. '-mfpmath' might help if you have a later processor; again, though, I don't know. > The execution time of the program compiled with mingw is around 10% > longer than the one with the Microsoft tool. I don't know about ms, but borland by default does not do IEC 60559 compliant arithmetic, so make sure the settings are compatible for such a comparison. With gcc, look at '-mno-ieee-fp'. Another incompatibility arises if you use long double. With ms, that's no longer than a plain double. With gcc, you get more precision, at some cost. Some of the other options here: http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86-64-Options.html#i386%20and%20x86-64%20Options may be worth playing with. I guess I'd try '-malign-double' first. > Is it normal? Are there other optimization options that can speed up > mingw? If this is a normal result, it is difficult to justify the use > of mingw for any program where the execution speed is important. If you're using a lot of <math.h> functions, look for the x87-specific 'mathinline.h' header online. It gives inline versions of those functions in assembly language, which sacrifice some checking, IIRC, to get more speed. If a ten percent difference in runtime speed is that important, then I would consider rewriting some floating point code in inline assembly language. The mathinline.h header gives good examples. |
From: Earnie B. <ear...@ya...> - 2002-09-11 10:18:40
|
Greg Chicares wrote: > > '-march=pentium' might do more than '-mpentium'. > There are specific cpu-types for intel and amd > processors more recent than the original pentium > if that's what you have, but I don't know what > difference they'll make. > No, -mpentium == -march=pentium -mcpu=pentium. Earnie. |
From: <dan...@ya...> - 2002-09-11 10:32:35
|
--- Earnie Boyd <ear...@ya...> wrote: > Greg Chicares wrote: > > > > '-march=pentium' might do more than '-mpentium'. > > There are specific cpu-types for intel and amd > > processors more recent than the original pentium > > if that's what you have, but I don't know what > > difference they'll make. > > > > No, -mpentium == -march=pentium -mcpu=pentium. > > Earnie. > > And is deprecated in 3.x: gcc -mpentium foo.c `-mpentium' is deprecated. Use `-march=pentium' or `-mcpu=pentium' instead. `-march=pentium' and `-mcpu=pentium' mean different things Danny http://mobile.yahoo.com.au - Yahoo! Messenger for SMS - Now send & receive IMs on your mobile via SMS |
From: Greg C. <chi...@mi...> - 2002-09-11 13:50:00
|
Earnie Boyd wrote: > > Greg Chicares wrote: > > > > '-march=pentium' might do more than '-mpentium'. > > There are specific cpu-types for intel and amd > > processors more recent than the original pentium > > if that's what you have, but I don't know what > > difference they'll make. > > No, -mpentium == -march=pentium -mcpu=pentium. Then is the 'current' branch of the online manual incorrect? http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86-64-Options.html#i386%20and%20x86-64%20Options | -m386 | -m486 | -mpentium | -mpentiumpro | These options are synonyms for -mcpu=i386, -mcpu=i486, | -mcpu=pentium, and -mcpu=pentiumpro respectively. | These synonyms are deprecated. An old local copy of the gcc docs that's labeled | This document was generated on 7 November 1999 seems to say the same thing, too. And if I'm reading it correctly, | specifying -march=cpu-type implies -mcpu=cpu-type but not vice versa. |
From: Fredrik N. <fg...@no...> - 2002-09-11 17:56:29
|
Greg Chicares <chi...@mi...> writes: > '-march=pentium' might do more than '-mpentium'. There are specific > cpu-types for intel and amd processors more recent than the original > pentium if that's what you have, but I don't know what difference > they'll make. Yes, definitely try this out. I've recently made some performance measurements for one of our programs, and -march=pentium4 (running on a Xeon) was a noticable improvement over previously-available i686 option. ("pentium4" came in with gcc 3.1 or some such.) (And note that -march will take better advantage of the newer Pentiums -- Pentii? -- at the expense of compatability with the 80386 and such.) But this program didn't have a lot of floating point math to handle. /Fredrik |