Skok do podprogramu ani návrat z podporogramu není pro pipelining žádný problém. Prostě se instrukce začnou načítat odjinud. Problém jsou podmíněné instrukce (obvykle skoky). Proto se již dlouhou dobu používají sofistikované metody odhadů zda podmínka nastane nebo ne (úspěšnost okolo 90 % není výjimečná ale pochopitelně závisí na charakteru kódu).
To je pravda, úspěšnost prediktorů skoků je však dobrá pouze ve smyčkách, které proběhnou (podle typu prediktoru) alespoň dvakrát či třikrát. Jinak pro normální podmínky (tj. například přeložené příkazy if) je úspěšnost predikce normálních 50%, pokud se samozřejmě neberou v úvahu speciální úpravy strojového kódu (ty na x86 neexistují).
Pochopitelně. Ale vnitřní smyčky jsou ty, které se vykonávají nejvíce a proto je jejich úspěšná predikce nejvice znát.
Ale závisí na charakteru kódu. Krásně je to vidět na výkonu Intel P4 (extrémně dlouhá pipeline - velké penále při špatném odhadu) kontra AMD (citelně kratší pipeline) na různych typech kódu.
Ano s tím souhlasím, že vnitřní smyčky se vykonávají nejvíce (dokonce se říká, že pravidlo 80-20 se již posunulo k 90-10, tj. 90 procent času se vykoná pouze v 10 procentech kódu). Potom se ovšem celkem oprávněně ptám, podle čeho se měří úspěšnost prediktorů skoku, jestli na statickém nebo dynamickém kódu.
Pokud se 90% úspěšnosti dosahuje na statickém kódu, je to super, ale tomuto teda vůbec nevěřím (tam tipuji, že to bude oněch 50%). 90% úspěšnost na dynamickém kódu není ovšem na druhou stranu moc úspěšná, když se v celých deseti procentech prediktor "splete" (on se tedy pro každou smyčku splete pouze na začátku, tj. v prvních dvou-třech iteracích a potom taky jednou na konci, že).