Re: Teilweise gelöst Was: Re: Updat e-Problem bei coreutils >= 8.25

Martin Wohlert <[email protected]> Tue, 3 Jan 2017 07:51:04 +0100
Newsgroups gmane.linux.gentoo.user.german
Message-ID <[email protected]>
Am 02.01.2017 um 22:41 schrieb Uwe Scholz:
> Weiß jemand, was passiert, wenn man bei den CFLAGS das march-Flag
> einfach weg lässt? Wird das dann automatisch auf das
> prozessorspezifische Flag gesetzt - in meinem Fall auf "sandybridge"?

Hallo Uwe!

Das -march Flag sorgt dafür, dass der Compiler binaries erzeugt, die
prozessorspezifische Instruktionen beinhalten können, die dann nur auf
Prozessoren laufen, die diese Instruktionen kennen. Z.B. sowas wie SSE4
Befehle.

Auf allen Prozessoren, die dann SSE4 unterstützen, würde das binary
laufen, aber halt nicht auf Prozessoren, die kein SSE4 kennen.

Wenn du das -march Flag weglässt, dann erzeugt der Compile einfache
binaries ohne derartige Instruktionen, sodass die binaries theoretisch
auf allen Prozessoren (gleicher Architektur) lauffähig sind. Es gibt
natürlich auch Programme, bei denen im Quelltext selbst noch
Inline-Assembler eingebaut ist, wo derartige Instruktionen einhalten
sein können. Dort findet aber in der Regel im Programmcode auch eine
Prüfung der CPU statt bevor derartige Befehle genutzt werden.

Anstatt des -march Flag kannst du auch das -mtune Flag verwenden, damit
bleiben deine binaries auch auf andere Prozessoren lauffähig, können
aber optimierten Code für speziell deine CPU enthalten. Die binaries
sind dadurch natürlich etwas größer.

LG
Martin