Delphi optimalizace

vložil Radek Červinka 10. února 2010 00:46

Při procházení různých konferencí jsem narazil na příspěvek od dřívějšího hlavního vývojáře kompilátoru Delphi Dannyho Thorpe.

V největší diskuzní skupině o Delphi (public.delphi.non-technical) se kdysi někdo zeptal, jaké vlastně optimalizace Delphi používá a dočkal se odpovědi od Dannyho Thorpe (Delphi Compiler Core blog), nyní už ex codegear. Stav odpovídá roku 2005.

Nechám ho raději častečně v originále, protože neznám přesnou českou terminologii pro některé optimalizace. Některé optimalizace jsem tipoval, některé mne celkem překvapují. Vytahuji ho na světlo, jelikož mne zaujal a jelikož je tam beznadějně zahrabaný.

Optimalizace Delphi kompilátoru

The Delphi compiler is a one-pass, top-down parser with incremental code generation. The Delphi compiler does use intermediate representations and multi-stage AST tree trimming optimizations.

Pro váš přehled následuje, kompletní jak jsem dokázal, seznam optimalizací v dnešních kompilátorech.

DT: Přidal jsem poznámku, které z nich Delphi implementuje.

Pozn: Vždy je první optimalizace a tučně odpověď DT.

-Aggregation of global references

No, if this is referring to global constant folding (strings, primarily)

-Algebraic simplifications, including reassociations

Yes, but to a limited degree. We don't replace division with multiply by reciprocal, for example, because of concerns about loss of precision at the edges.

-Basic-block and branch scheduling

Ne.

-Branch optimizations

Ano.

- and conditional moves

Ne.

-Branch prediction

Static.

-Code hoisting

Ne.

-Constant folding

Ano.

-Control-flow optimizations

Nejasné.

-Data prefetching

Ne.

-Data-cache optimizations

Ne.

-Dead-code elimination

Ano.

-Global value numbering

Ne.

-In-line expansion

Ano.

-Induction-variable removal

Ano.

-Induction-variable strength reduction

Ano.

-Instruction prefetching

Ne.

-Interprocedureal constant propagation

Nejasné. Konstanta je konstanta všude, ne?

-Interprocedureal register allocation

Ne.

-Intraprocedureal instruction cache optimization

Ne.

-Leaf-routine optimization

Ne.

-Linear-function test replacement

Nejasné.

-Local and global common-subexpression elimination

Ano.

-Local and global copy propagation

Ne.

-Loop-invariant code motion

Ano.

-Machine idioms

Ne.

-Partial-redundancy elimination

Ano. (for pointer derefs)

-Procedure integration

Nejasné.

-Procedure specialization and clonning

Ne.

-Scalar replacement of aggregates -Scalar replacement of array references

If this refers to constant expression evaluation, yes.

-Shrink wrapping

??

-Software pipelining, with loop unrolling, variable expansion, register -renaming and hierarchical reduction

Šablony pro Codegen jsou ručně laděny pro dobré plánování instrukcí pro U a V pipelines Pentium family procesorů.

-Sparse conditional constant propagation

Ne.

-Tail call optimization, including tail recursion elimination

Ne.

-Tail merging

Ne.

-Unnecessary bounds checking elimination

Ano.

Mějte na paměti, že i dobré kompilátory implementují jen malé množství z uvedených a ne vše z uvedeného jsou optimalizace na rychlost.

Ano. Tail recursion optimalizace ze seznamu je například ve skutečnosti astronomicky vzácná. Takové optimalizace mají význam jen v určitých rekurzivních rutinách.

Mantra pro optimalizace v Delphi je udělat každodenní kód lepším. Nemůžeme si dovolit luxus honby za zázračnými optimalizacemi, které většinu času prostě nefungují. Toto necháváme studentům.

Teď zpět k Delphi. Vždy se jednalo o solidní kompilátor se dvěma důležitýma vlastnostma: generuje dobrý kód a je jednoprůchodový (tj. bleskurychlý). Pokud jste překvapeni proč trvá C++ věky kompilace proti Delphi, to je odpověď.

Hodně z toho má Delphi díky jazyku.

To je pravda, kromě jednoprůchodového tvrzení. Codegen fáze je multi-pass intermediate node tree traversals and pruning. My ji akorát děláme mnohem rychleji než tradiční modely kompilátorů, které jsou originálně tvořeny pro dávkové zpracování děrných štítků.

Toto mne přivádí k jinému bodu. Delphi nikdy nebylo navrženo jako high-end kompilátor. Pro účely, pro které je lidé používají generuje více než dostatečně rychlé kódy.

Správně. Může být řečeno, že Delphi je tak rychlé, že někteří lidé věří že může být nejlepší v každém zadání.

Cílem Delphi je být nejproduktivnější vývojový nástroj pro širokou obec vývojářů. Kompilátor je jen malá část z tohoto celku.

originální příspěvek na groups.google.com

Tagy: ,

Optimalizace

Komentáře

10.2.2010 9:25:50 #

tz

Tohle se málo ví, že optimalizace v Delphi je docela promyšlená a má své důvody něco dělat, nebo naopak něco nedělat. Díky za překlad.

tz

10.2.2010 12:32:05 #

Rss

Clanek mozna zajimavy, ale mix cestiny/anglictiny ho dela uplne necitelny. Takze bud prelozit kompletne nebo nechat v originalu.

Rss

10.2.2010 12:55:52 #

radekc

Uplně na konci je odkaz na originální příspěvek v angličtině. Netroufal jsem si některé termíny překládat.

radekc

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců