Incremental link-time optimization in GNU Compiler Collection
Inkrementální LTO v překladači GNU Compiler Collection
bakalářská práce (OBHÁJENO)
Zobrazit/ otevřít
Trvalý odkaz
http://hdl.handle.net/20.500.11956/183051Identifikátory
SIS: 258115
Kolekce
- Kvalifikační práce [11266]
Autor
Vedoucí práce
Oponent práce
Jambor, Martin
Fakulta / součást
Matematicko-fyzikální fakulta
Obor
Informatika se specializací Systémové programování
Katedra / ústav / klinika
Katedra aplikované matematiky
Datum obhajoby
29. 6. 2023
Nakladatel
Univerzita Karlova, Matematicko-fyzikální fakultaJazyk
Angličtina
Známka
Výborně
Klíčová slova (česky)
překladač|LTO|optimalizaceKlíčová slova (anglicky)
compiler|optimization|link-time optimizationModerní překladače se snaží optimalizovat programy co nejvíc je možné. Jedna z významných snah jsou Link-Time Optimalizace (LTO). LTO vezme celý program jak je dostupný linkeru a provede globální optimalizace které jsou nemožné v předcháze- jících lokálních překladech. Kvůli globální povaze LTO musí být provedeno celé při každém překladu, což vede k dlouhým časům překladu i v případě cyklu změny-překladu. Inkrementální překlad může snížit časy překladu cyklů změny-překladu znovupoužitím nezměněných objektů. Tato práce má za cíl implementovat inkrementální překlad pro LTO v překladači GNU Compiler Collection, specificky pro fázi lokálních transformací. Implementujeme inkre- mentální kompilaci kešováním souborů z překladových jednotek lokální transformace. Pro nejlepší výsledky inkrementální kompilace máme také za cíl minimalizovat počet změněných překladových jednotek po malé změně. Toho dosáhneme dvěma způsoby. Za prvé vytvoříme lepší rozdělovací strategii, která bude koncentrovat změny do menšího počtu překladových jednotek. Za druhé analyzujeme zdroje divergence a, pokud je to jednoduše možné, odstraníme je. To zahrnuje stabilizaci hodnot a opravu streamování a mezi procedurální optimalizace pro zvýšení jejich odolnosti vůči malým změnám. V obou případech se nemění kvalita výsledného spustitelného souboru. 1
Modern compilers attempt to optimize programs as much as possible. One such significant effort is Link-Time Optimization (LTO). LTO takes the whole program as accessible to a linker, and performs global optimizations that are impossible in previously local compilations. Because of the global nature, LTO must be performed in full in each compilation, which results in long compile times even in edit-compile cycles. Incremental compilation can reduce compile times of edit-compile cycles by reusing unchanged objects. This thesis aims to implement incremental compilation for Link-Time Optimizations of GNU Compiler Collection, specifically of local transformation phase. We implement incremental compilation by caching files of compilation units of local transformation. For best success of incremental compilation we also aim to minimize number of changed compilation units after small edit. We achieve this in two ways. First, we create better partitioning strategy, that concentrates the changes into fewer compilation units. Second, we analyzed sources of divergence and, if easily possible, removed them. That includes stabilizing values and fixing streaming and inter-procedural optimizations to increase their robustness against small edits. Both without influencing quality of the final binary. 1