kumarchi@[EMAIL PROTECTED]
wrote:
<snip>
> thanx all of you for responding. I was totally unprepared for such a
> vast performance difference (2x msvc vs gcc) and my code is not at all
> special(no UI, complicated cl***** etc).
Those are not the types of things which cause modern compilers to stumble.
They seem complex abstractly, but to a compiler are fairly transparent.
> it simply does lots of floating point array(mainly through fft) and
normal
> integer operations
These are things for which compilers are designed to be highly optimized,
and for which failure to enable a seemingly minor feature can cause huge
variance in performance, like you're seeing.
> I used -O3 flag and in my case so far it seems to be better than O2.
> msvc by default uses their own O2.
>
> I cannot believe such a blatant difference will go unnoticed for long
It's not gone unnoticed, it's merely gone largely uncommented in this
group
because this is the wrong group to ask. GCC is not that far behind MSVC.
All
the number and graphs I've seen suggest that something else is involved
here.
Yes, you should try GCC 4.x, because GCC 4.x implemented a different
optimization framework. But this probably doesn't account for the 2x
difference.
It's highly likely that the difference you're seeing is a failure to tell
GCC how and which CPU feature sets to target. GCC depends on the build
system to dictate all the various platform-dependent optimizations;
because
GCC is often used for cross-compiling, and for various other reasons, that
kind of logic--like CPU-specific optimizations (as opposed to mere
architecture)--is farmed out. It's likely that MSVC, or Visual Studio, is
turning knobs which in GCC must be done manually.
I recommend that you find another newsgroup, or web page, or other
do***entation, to help you turn GCC's knobs. The suggestions here, like
-msse, etc, are a _start_, but by no means exhaustive, or even sufficient.
There are lots of flags to know about; for instance, only the very latest
version of GCC 4.x (4.3, I think) automatically vectorizes, but only if
you
specify -msse and/or -mtune or something like that. Prior to 4.x, you need
to not only enable the instruction set, but enable vectorizing.
And there are probably tools/applications you can find which will help you
turn those knobs. I'm just not that familiar to give detailed advice. And
while many people are far more knowledgable in this group, you're apt to
get
conflicting or confusing advice because this issue isn't the group's
focus.


|