PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : CPU-Bench zum selbst kompilieren?


Aqualon
2004-10-14, 11:35:52
H!

Ich würde gerne ein wenig mit den GCC-Optmierungsschaltern rumspielen, gibt es für Linux einen CPU-Benchmark, den man selbst kompilieren kann?

Aqua

klutob
2004-10-14, 12:17:33
Hi,

Um die GCC-Schalter auszutesten, würde ich eigentlich nur ganz spezielle, überschaubare "Real World" Anwendungen verwenden, um danach auch etwas davon zu haben. :)

Bei mir ist dies Transcode, da machen sich dann schon 50% (von ~14FPS zu ~21 FPS) Performanceplus (DVD->SVCD) zu meiner -O2 Standardoptimierung bemerkbar.
Ansonsten lass ich, für das restliche System, die Finger von Einstellungen oberhalb von -O2 (/me wenig Ahnung=Segfaults).

Aqualon
2004-10-14, 17:18:18
Hast Recht, das bringt wohl mehr die Software zu testen, die man auch einsetzt (auch wenn es manchmal ziemlich lange dauert, diese zu kompilieren ;-))

Bei Ogg-Vorbis hat es nicht gerade viel gebracht, damit rumzuspielen. Der Unterschied zwischen -march=i386 und -march=pentium4 -O3 -pipe -fomit-frame-pointer ist bei meinem Celeron 2GHz, dass sich die Rate von 7,2 auf 7,5 steigert, also gerade mal 4%.

Ich bleibe bei CFLAGS="-march=pentium4 -Os -pipe -fomit-frame-pointer", das ist kaum langsamer als -O3 und brauchen auch noch weniger Platz.

Aqua

Ganon
2004-10-14, 17:32:16
Ich bleibe bei CFLAGS="-march=pentium4 -Os -pipe -fomit-frame-pointer", das ist kaum langsamer als -O3 und brauchen auch noch weniger Platz.

Aqua

Na was erwartest du? ;)

Bei einigen Paketen bringt es nur 50% mehr Leistung, weil man speziell programmierte Pfade aktiviert. D.h. wenn du es z.B. mit -msse compilierst, dann wird spezieller SSE-Code eingeschaltet, welches der Programmierer vorher programmiert hat.

Gast
2004-10-14, 17:37:51
Hast Recht, das bringt wohl mehr die Software zu testen, die man auch einsetzt (auch wenn es manchmal ziemlich lange dauert, diese zu kompilieren ;-))

Bei Ogg-Vorbis hat es nicht gerade viel gebracht, damit rumzuspielen. Der Unterschied zwischen -march=i386 und -march=pentium4 -O3 -pipe -fomit-frame-pointer ist bei meinem Celeron 2GHz, dass sich die Rate von 7,2 auf 7,5 steigert, also gerade mal 4%.

Ich bleibe bei CFLAGS="-march=pentium4 -Os -pipe -fomit-frame-pointer", das ist kaum langsamer als -O3 und brauchen auch noch weniger Platz.

Aqua
ähm fomit frame pointer ist in os drin warum nochmal extra? pipe glaub ich auch weiss es aber grad net

klutob
2004-10-14, 17:49:36
Hi,

Ach das bisschen meinst du mit den Schaltern spielen. :)
Da geht aber noch entschieden mehr, für "Transcode" hab ich mit diesen Mehrzeiler die beschriebene Mehrleistung erreichen können (Lachen erlaubt!).

CFLAGS=" -O3 -march=athlon-xp -pipe -mfpmath=sse -ffast-math
-fprefetch-loop-arrays -minline-all-stringops -maccumulate-outgoing-args -msse -m3dnow -fomit-frame-pointer -frename-registers -frounding-math -fno-default-inline -fforce-addr -fsched2-use-superblocks -fsched2-use-traces -ftracer -fprefetch-loop-arrays
-fbranch-target-load-optimize2 -funroll-loops -funit-at-a-time -fbranch-probabilities "

Aqualon
2004-10-14, 18:26:19
Na was erwartest du? ;)

Bei einigen Paketen bringt es nur 50% mehr Leistung, weil man speziell programmierte Pfade aktiviert. D.h. wenn du es z.B. mit -msse compilierst, dann wird spezieller SSE-Code eingeschaltet, welches der Programmierer vorher programmiert hat.
Na, dass durch geheimnisvolle Schalter, auf einmal alle Programme 10mal so schnell laufen und viel weniger Platz auf der Platte brauchen ;)

Ich kenne mich mit Linux und GCC noch nicht sonderlich gut aus, bin quasi noch ziemlicher Newbie. Das Installieren von GenToo klappt ja auch ohne große Kenntnisse auf dem Gebiet. Ich habe mich aber auch schon gefragt, wie die SSE-Optimierungen überhaupt funktionieren. Hab mir schon gedacht, dass da ohne Hilfe des Programmieres nicht viel funktioniert, aber danke nochmal für die Bestätigung!

ähm fomit frame pointer ist in os drin warum nochmal extra? pipe glaub ich auch weiss es aber grad net

Zitat von gcc.gnu.org:

-O also turns on -fomit-frame-pointer on machines where doing so does not interfere with debugging.

Zumindest bei mir scheint er das nicht zu aktivieren, die Rate beim encodieren mit oggenc fällt von 7,5 auf 7,2 zurück, wenn ich fomit-frame-pointer nicht explizit angebe.

Kann man eigentlich die cflags, die bei emerge verwendet werden vorm Aufrufen für genau diesen Aufruf setzen, ohne die make.conf ändern zu müssen?

Aqua

kadder
2004-10-14, 18:36:04
mittels export "die cflag-zeile der make.conf"könnte es gehen. ohne die ""

Aqualon
2004-10-14, 19:14:19
mittels export "die cflag-zeile der make.conf"könnte es gehen. ohne die ""
Danke, hat wunderbar geklappt!

Aqua

Edit: Bei Lame 3.96 merkt man das wirklich, der Unterschied zwischen den weiter oben von mir genannten CFLAGS beträgt dort über 100%.

Gast
2004-10-14, 23:13:45
-ftracer
hört sich noch ganz nützlich an, ebenso wie
-fweb (nur ab gcc 3.4.x)

sonst wie gesagt, kann man je nach prozessortyp noch -msse2 -msse -m3dnow -mmmx aktivieren
(aber nicht 3dnow zusammen mit sse(1/2) !)

was ich aber noch nicht herausgefunden habe: warum wird bei gcc nicht zwischen 3dnow (k6) und 3dnow-ext (ab k7) unterschieden?


wichtig ist aber, dass erzeugter code anständig läuft. und gerade -O3 und -funroll-loops können unerwartete nebenwirkungen haben
(andererseits spricht ja nichts gegen sichere optimierungen bei gentoo, weil der mehraufwand bei 0 liegt)

ThePsycho
2004-10-14, 23:15:02
einloggen vergessen...