Subject: Re: undocumented -march=x86-64 option in gcc 4.1
To: None <john@johnrshannon.com>
From: Blair Sadewitz <blair.sadewitz@gmail.com>
List: port-amd64
Date: 04/09/2007 09:25:31
I agree that it isn't our job.  I explicitly stated that we should
only be interested in this if it turned out that it indeed does what I
think it does.  Certainly, if it hurts more than it helps, why use it?

My experience thusfar--for what it's worth, which isn't much of any
probative value--is that -march=nocona AND gcc 4.1/NetBSD's default
are significantly worse than -march=x86-64.  I switched to the i386
port in part to get DRI, but mostly because the performance of my
machine (A Pentium D 930/Intel D945GTP motherboard) was HORRID using
the amd64 port.  One needed no benchmarks to see how much slower it
was in many cases.  I'm still researching this amidst a paucity of
information, but I've garnered thusfar that -march=nocona may actually
disable the instruction scheduler.  Moreover, there are bug reports of
gcc ( both 4.0 and 4.1) generating 3dnow prefetch instructions by
default on x86_64.

My point here is that such a flag isn't necessarily a no-op at all: it
tells the compiler only to use instructions which AMD and Intel
processors *have in common*.  In fact, gcc 4.2 and above DO have this
feature documented, although it is -march=generic.

Disparate instruction sets are even more of a problem for the Core 2 chips, etc.

I only have an EMT64 processor because I got it through a dealer I did
some work for at a great price, and the intel board has a 3-year parts
and labor warranty.  Barring these circumstances, I would've simply
bought an AMD CPU and saved myself the headache, as AMD is clearly the
better choice here, IMHO.

I'm also interested in -march=x86-64 because there are severe linux
compatability problems on NetBSD/amd64 _ONLY_ with Intel chips.

Again, I agree with the general spirit of your message.  The choices I
have with gcc 4.1, though, are like the US presidential elections as
of late: I'd go with a third party just to avoid the complications of
the other two. ;)

I rebuilt my whole tree and kernel with -march=x86_64 and now my usual
workloads seem a lot more on par with i386.  This could be a
confirmation bias of mine, though, so I'll have to run benchmarks at
some point.

Regards,

--Blair




-- 
Support WFMU-FM: free-form radio for the masses!
<http://www.wfmu.org/>

"The frivolity and boredom which unsettle the established order, the
vague foreboding of something unknown, these are the heralds of
approaching change.  The gradual crumbling that left unaltered the
face of the whole is cut short by a sunburst which, in one flash,
illuminates the features of the new world."  --G.W.F. Hegel,
_Phenomenology of Spirit_ 5:11