Re: CFLAGS in /etc/make.conf / Optimierungen

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Wed, 26 Dec 2007 18:56:46 +0100 (CET)

Bernd Walter wrote:
> Alvar Freude wrote:
> > Was ist zu CPUTYPE zu sagen?
>
> Inzwischen harmlos - sollte man setzen, wenn man sicher ist, dass die
> Binaries niemals auf einem kleineren System laufen werden.
> Problemfall wäre z.B. ein buildworld für ein älteres System
> Normalerweise kann man einfach src und obj per NFS rübermounten und
> den installworld auf der anderen Maschine machen.
> Aber wenn das buildsystem Befehle für neuere CPUs benutzt hat man mit
> der vorgehensweise verloren.

Kleine Ergänzung hierzu: Man setzt mit CPUTYPE den Default
für die beiden gcc-Optionen -march und -mtune (== -mcpu).
Der entscheidende Unterschied ist, dass mit -march Code
erzeugt wird, der _nicht_ auf älteren Prozessoren läuft,
da Prozessor-spezifische Features verwendet werden (z.B.
3dnow, sse2 u.ä.). Bei -mtune werden keine besonderen
Features verwendet, aber der Code wird für den angegebenen
Prozessor optimiert (z.B. durch entsprechended Scheduling
der Assembler-Anweisungen) -- d.h. er läuft durchaus auch
auf älteren Prozessoren, aber eventuell weniger optimal,
als wenn man ihn für diesen älteren Prozessor optimieren
würden. Im übrigen wird er auch auf neueren Prozessoren
möglicherweise weniger optimal laufen.

Für die Optimierung ist daher »älter« oder »neuer« eher
nicht so entscheidend; entscheidend ist eher »anders«.
Sprich, wenn man Binaries z.B. für Pentium-III optimiert
hat, dann kann dieswer Code auf _anderen_ Prozessoren
-- egal ob älter oder neuer -- suboptimal laufen.

In der Praxis wird es meistens so gemacht, dass man CPUTYPE
auf den »ältesten« Prozessor einstellt (z.B. Pentium-II),
auf dem der Code laufen soll, in der Hoffnung, dass er dann
auch auf den neueren halbwegs optimal läuft. Das kann ein
Trugschluß sein, insbesondere wenn der Code zwischen sehr
unterschiedlichen Prozessoren ausgetauscht wird (z.B. AMD
vs. intel). Wenn es wirklich auf das letzte Quentchen Per-
formance ankommt, sollte man den Code grundsätzlich für
jeden Prozessor separat optimieren.

In bestimmten Grenzfällen kann es auch vorkommen, dass man
-march und -mtune mit unterschiedlichen Argumenten verwen-
den will (z.B. wenn man dieselben Binaries per NFS verteilt
und mit Clients nutzen will, die verschiedene Prozessoren
haben). Dann muss man CPUTYPE disablen und stattdessen die
Optionen selbst in die CFLAGS reinschreiben.

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing b. M.
Handelsregister: Registergericht Muenchen, HRA 74606,  Geschäftsfuehrung:
secnetix Verwaltungsgesellsch. mbH, Handelsregister: Registergericht Mün-
chen, HRB 125758,  Geschäftsführer: Maik Bachmann, Olaf Erb, Ralf Gebhart
FreeBSD-Dienstleistungen, -Produkte und mehr:  http://www.secnetix.de/bsd
I suggested holding a "Python Object Oriented Programming Seminar",
but the acronym was unpopular.
        -- Joseph Strout
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Wed 26 Dec 2007 - 18:56:57 CET

search this site