Jaké jsou dobré heuristiky pro inlining funkce?

hlasů
5

Vzhledem k tomu, že se snažíte výhradně pro optimalizaci rychlosti, jaké jsou dobré heuristiky pro rozhodování o tom, zda se má inline funkci, nebo ne? Je zřejmé, kód velikost by měla být důležitá, ale existují jiné faktory, které se typicky používají při (řekněme) gcc nebo ICC je určování, zda vložené volání funkce? Uskutečnil se nějaký významný akademická práce v této oblasti?

Položena 25/01/2010 v 05:46
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
7

Wikipedia má několik odstavců o tom, s některými odkazy na dně:

  • Kromě otázek velikost paměti a vyrovnávací paměti, další úvaha je registrovat tlak . Z hlediska kompilátoru pohledu „přidané proměnné z inline postupu může spotřebovat další registry, a v oblasti, kde tlak registr je již vysoká může vynutit rozlití, což způsobuje další RAM přístup.“

Jazyky s JIT překladače a runtime třídy nakládání ještě další kompromisy, protože virtuální metody nejsou známy staticky, přesto JIT může shromažďovat runtime profilování informace, například četnost volání metody:

  • Design, implementace a vyhodnocení optimalizace v Just-In-Time Compiler (pro Javu) hovoří o způsobu inlining statických metod a dynamicky namáhaných tříd a jejich zdokonalování výkonnosti.

  • Cvičí JUDO: Java Podle Dynamická optimalizace tvrdí, že jejich „inlining politika je založena na velikosti kódu a profilování informace V případě, že provádění frekvence záznamu metoda je pod určitou hranici, přičemž tento způsob je pak není inline, protože je považován za studena. metoda. Aby nedošlo k explozi kód, nebudeme vložené metodu s velikostí bytecode více než 25 bajtů.... Aby se zabránilo inlining podél hluboké volání řetězce inlining zastaví, když nahromaděné inline velikost bytecode podél volání řetězce přesahuje 40 bajtů .“ Ačkoli mají runtime profilování informace (volání metody frekvence) jsou stále opatrní, aby se zabránilo inlining velké funkcí nebo řetězce funkcí, aby se zabránilo udit.

Hledání na Google Scholar odhaluje celou řadu dokumentů, například

Hledání na Google Books odhaluje celou řadu knih s papíry nebo kapitol o funkci inlining v různých kontextech.

  • Kompilátoru design Handbook: Optimalizace a Strojový kód Generation má kapitolu o Statisical a Machine Learning Techniques v překladačů, s heuristiky pro nastavení různých parametrů, profilování výsledků. Tato kapitola odkazy na Vaswani et al papír mikroarchitektury Sensitive empirické modely pro optimalizace kompilátoru , kde se navrhují „využití empirických modelovacích technik pro stavbu citlivé modelů mikroarchitektuře pro optimalizace kompilátoru“.

  • (Některé jiné knihy mluví o inling z bodu programátora pohledu, jako je C ++ pro programátoři hry , které hovoří o nebezpečí inlining funkcích příliš často a rozdíly mezi inlining a maker. Překladače často ignorují požadavky inline programátor, pokud mohou stanovit že udělají více škody než užitku, což může být přepsána s makry v krajním případě).

Odpovězeno 25/01/2010 v 17:03
zdroj uživatelem

hlasů
0

NET je většinou na základě velikosti. Měření velikosti mateřské funkci a funkci Dítě v kompilované byte. Poté se měří velikost kombinované funkce. V případě, že kombinovaná funkce je menší, pak inlining je to dobrý nápad.

Důvodem pro to je, aby bylo možné strčit tolik kód do vyrovnávací paměti CPU, jak je to možné. Cache mine jsou mnohem dražší než volání funkce v moderních CPU.

Odpovězeno 25/01/2010 v 06:28
zdroj uživatelem

hlasů
0

pokud mám pilu, velikost funkce je jediným faktorem, kompilátory používané ke stanovení inline. Nicméně, pokud nemáte profil průvodcem optimalizace (PGO), věřím, že kompilátor je schopen použít další proměnné, jako je počet hovorů / pohotovosti nastavení.

Odpovězeno 25/01/2010 v 06:02
zdroj uživatelem

hlasů
0

Funkce volání předpokládá určitou dodatkový kód (funkce prolog, v němž je nový rámec fronty nastavit a funkce epilog, kde je to uklidil). Pokud váš kompilátor vidí, že kód funkce je malý ve srovnání s prologu a epilogu, může se rozhodnout, že to nestojí za to, aby se aktuální hovor a bude inline funkci.

Jediný přínos vidím volání funkce namísto inlining to jsou rozměry související. Myslím inlining funkci pak odvíjení smyčky může vést k významnému zvýšení velikosti.

Odpovězeno 25/01/2010 v 05:54
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more