Re: make world/kernel, welche Optimierungen machen Sinn?

From: Martin Cracauer <cracauer(at)cons.org>
Date: Mon, 5 Mar 2001 09:23:57 +0100

In <200103042014.VAA48115(at)lurza.secnetix.de>, Oliver Fromme wrote:
> Es gab diverse Fälle,
> wo -O2 (und höhere) nachweislich inkorrekten Code erzeugt
> haben (bei bestimmten gcc-Versionen ist das auch bei -O
> oder -O0 passiert, aber momentan ist mir sowas nicht
> bekannt). Auf Alpha scheint der gcc dabei anfälliger zu
> sein als auf i386.

Man sollte noch drauf hinweisen, dass es zumindest im Linux-Kernel
auch viele Faelle gab, wo -O2 compilierte Kernels mit neueren
Compilern nicht liefen. Aber nicht weil der Compiler fehlerhaft war,
sondern weil der Code nicht ganz sauber war. Man kann doch recht
schnell Sachen schreiben, die in C nicht spezifiziert sind, aber nur
unter extremen Umstaenden nicht so compiliert werden wie man das
erwartet. Auch vergessene "volatile" wirken mit einem guten Compiler
eben viel toedlicher als mit einem schlechten.

Bei FreeBSD ist das anscheinend dank Bruce Evans nicht so schlimm
(wohl dank Bruce Evans, der aber wiederum nur an i386 arbeitet...).

Wenn man Optimierung pusht, dann mus man immer dran denken, dass man
auch bei einem fehler*freien* (haha) Compiler auf die Schnautze fallen
koennte, wenn man vorher nicht den Code durchgegangen ist.

Wer weiss z.B. schon, dass
  bla = setjmp(...);
nicht zulaessig ist? Bisher ist m.W. kein Compiler bekannt, der das
nicht packen wuerde, aber mit genau sowas kann man eben gut auf die
Nase fallen, wenn man den neuesten Compiler mit hoechster Optimierung
benutzt. Aber was soll bei einem danebengegangenen longjmp schon
passieren? Bestimmt leicht zu debuggen... NIIIIECHT

> Ich habe vor längerer Zeit mal mit verschiedenen Optimie-
> rungsleveln experimentiert und festgestellt, daß sich das
> alles nicht lohnt. Das Compilieren dauert teilweise er-
> heblich länger, ohne daß der Code merklich schneller
> läuft. Seitdem benutze ich das klassische "-O -pipe" und
> bin damit bisher sehr gut gefahren.

Geht mir 100% genauso. Das einzige ist bei einigen gcc Varianten -Os
(fuer small code), der teilweise wesentlich kleineren Code erzeugt
ohne dass der merklich langsamer waere. In dem seltenen Fall, dass
man mal eine Cachegrenze genau ueberquert kann das dramatische Folgen
z.B. fuer einzelne Schleifen haben. Auch Zeugs was auf Floppies soll
macht sich damit gut.

Martin

-- 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Martin Cracauer <cracauer@cons.org>            http://www.cons.org/cracauer/
 As far as I'm concerned,  if something is so complicated that you can't ex-
 plain it in 10 seconds, then it's probably not worth knowing anyway -Calvin
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Mon 05 Mar 2001 - 09:24:02 CET

search this site