PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : GCC 4.5.x mit neuen "Optimierern"


(del)
2010-09-10, 02:28:21
Hi

Heute ist mir durch falschen Klick :D eine neue Version von TDM aufgefallen.
http://tdm-gcc.tdragon.net/

"New TDM-GCC 4.5.1 with LTO support (32-bit or 32/64-bit) [core patch 2, runtime svn3485]"

Und ich meine, Graphite rennt jetzt auch. ABER, ich wüßte gerne was da überhaupt abgeht. Auf Allgemeindeutsch, wenns geht. Das geht bestimmt auch jeweils in wenigen Sätzen.

Ich kann mir unter
Link Time Optimization (LTO) gives GCC the capability of dumping its internal representation (GIMPLE) to disk, so that all the different compilation units that make up a single executable can be optimized as a single module.garnichts vorstellen.

Wozu ist also LTO und wozu Graphite gut?

Danke schonmal.

Ectoplasma
2010-09-10, 08:22:05
Link Time Optimization (LTO) gives GCC the capability of dumping its internal representation (GIMPLE) to disk, so that all the different compilation units that make up a single executable can be optimized as a single module.


Ich kann mir unter
garnichts vorstellen.

Danke schonmal.

Ganz einfach. Ein C/C++ Compiler kompiliert einzelne C/C++ Dateien und schreibt diese auf Platte. Diese Module sind dann schon bereits optimiert. Jetzt muss der Linker diese einzelnen Module zu einem Gesamtprogramm mergen. Normalerweise optimiert der Linker dabei nicht mehr. LTO bedeutet nun, dass der Linker die Fähigkeit besitzt, beim Mergen über Modulgrenzen hinaus zu optimieren.

Trap
2010-09-10, 08:22:18
Normalerweise wird in C/C++ jede Datei einzeln compiliert und optimiert, der Linker kopiert den Code nur passend zusammen und ersetzt Verweise auf Funktionen/Variablen durch die tatsächlichen Adressen.

Mit LTO werden die Optimierungen erst gemacht, nachdem man das Programm zusammenkopiert hat, damit kann der Compiler dann z.B. Inlining zwischen verschiedenen Sourcefiles machen, was ohne LTO nicht möglich ist.

eXistence
2010-09-10, 08:39:30
VisualStudio hat übrigens (seit VS2008?) ein vergleichbares feature: LTCG (link time code generation)

(del)
2010-09-10, 09:18:10
Ok. Danke euch. Das wäre jetzt glasklar.
08:22:05 vs. 08:22:18. Das war aber Kopf an Kopf =)

Und Graphite?

Captian Sheridan
2010-09-10, 11:08:31
Und Graphite?
Gcc hat ein Wiki

http://gcc.gnu.org/wiki/Graphite

Coda
2010-09-10, 16:41:58
VisualStudio hat übrigens (seit VS2008?) ein vergleichbares feature: LTCG (link time code generation)
Das gibt's schon ewig. VC++ 2003 soweit ich weiß.

(del)
2010-09-10, 20:31:43
Gcc hat ein Wiki

http://gcc.gnu.org/wiki/GraphiteWarum empfehlst du mir etwas zu lesen, wenn du es selbst nicht kannst? Ich wiederhole mich mal:
ABER, ich wüßte gerne was da überhaupt abgeht. Auf Allgemeindeutsch, wenns geht. Das geht bestimmt auch jeweils in wenigen Sätzen.

Coda
2010-09-11, 10:30:07
Darum geht's bei Graphite: http://de.wikipedia.org/wiki/Polytopmodell

Ist ziemlich mathematisch und wohl nicht mit ein, zwei Sätzen zu erklären. Es geht aber wohl im groben darum auf den Abhängigkeitsgraphen gültigkeitserhaltende affine Transformationen anzuwenden.

(del)
2010-09-11, 13:41:46
Aha. Ok. Muß man darauf gezielt programmieren (?) oder nimmt der Compiler das selbst auseinander? Weil "Dabei werden die Schleifen im Quellprogramm durch Polytope beschrieben" stellt das irgendwie nicht ganz klar. Sprich: Verändert Graphite im ersten Schritt den Source? :|

Captian Sheridan
2010-09-11, 15:41:01
Aha. Ok. Muß man darauf gezielt programmieren (?)

Nein

oder nimmt der Compiler das selbst auseinander? Weil "Dabei werden die Schleifen im Quellprogramm durch Polytope beschrieben" stellt das irgendwie nicht ganz klar. Sprich: Verändert Graphite im ersten Schritt den Source? :|
??

Dein Quellcode auf der Platte bliebt gleich, das Optimieren in dem Fall betrifft nur dass Middle-End "GENERIC and GIMPLE" sind da Stichworte.

(del)
2010-09-11, 19:47:58
Alles klar. Danke euch.