Jak moderní procesory obešly svoje výkonové limity | Kapitola 3
Seznam kapitol
Pro mnoho lidí je posledních dvacet pět let vývoje procesorů spíše fází stagnace. Navyšovaly se kmitočty, zvyšoval se počet jader – a to je tak všechno, říkají. Není to pravda, naopak: S tím, jak začaly procesory narážet na fyzikální limity, začali jejich architekti obcházet hranice chytrým designem. Často jsou to dost fascinující triky!
K opravdu zásadním změnám v architektuře procesorů došlo s příchodem Intel Pentia (1993) a Intel Pentia Pro (1995). V té době jsme si všichni dělali legraci z toho, jak Intel přejmenoval procesor z námi očekávané 80586 na Pentium – a to proto, že jsme nevěděli, jak radikální změny to představuje. Za prvé – se třemi miliony tranzistory to byl opravdu masivní procesor. Pro srovnání – 80386 měla jen 275 tisíc tranzistorů a i 80486 s integrovaným FPU pouze 1,2 milionu. U Pentia se navíc poprvé použily některé triky, které dovolovaly zvýšit výkon čistě architekturou, nejenom kmitočtem – a to razantně zvýšilo jeho složitost.
Pentium přineslo superskalární architekturu, což byla věc, o které se tehdy říkalo, že je rysem výhradně RISC procesorů. Superskalární architektura je založená na tom, že zároveň zpracováváte více instrukcí – a panovala domněnka, že to jde jen u těch jednoduchých. Intelovská architektura měla složité instrukce a to navíc velmi variabilní – jak by mohla být superskalární? Intel to vyřešil trochu v duchu Chytré horákyně: Vzhledem ke komplexitě instrukcí nechal jeden datapath kompletní, pro všechny instrukce, ale přidal druhý, čistě pro jednoduché instrukce. Už tam se začal objevovat rys, který Intelu dovolil dále vylepšovat procesory – začali totiž analyzovat, jak vlastně software využívá instrukce.
Ukázalo se, že instrukce jsou používány velmi nerovnoměrně. Instrukční sety Intelu byly velmi bohaté, některé instrukce měly délku 1 byte, jiné až 15 byte – a s postupem času navíc ještě bobtnaly o nové instrukce z extenzí. Integrací FPU dostaly procesory schopnost počítat matematiku v plovoucí čárce, MMX extenze jim dovolily pracovat s maticemi, ovšem za tu cenu, že využívaly jednotky FPU, takže se později přidala nezávisle fungující extenze SSE, ale MMX se zachovalo. Takhle se aditivně přidávalo dál, což bylo hodně nepřehledné – a stále to je hodně nepřehledné.
Důsledky to mělo dva. Tak za prvé, Intel se pokusil opustit x86 a přejít na zcela odlišnou architekturu EPIC s procesory Itanium. Ty byly vyvíjeny společně s Hewlett Packard a pokusily se zvýšit propustnost procesoru zvýšením počtu jednotek plnících instrukce. Vyšly z paradigmatu explicitního paralelismu, kdy kompilátor měl určovat sám, které jednotky se budou v procesoru využívat. To mělo teoreticky zjednodušit konstrukci procesorů a zvýšit jejich výkon, problém ale představovalo to, že Itania sama o sobě nebyla x86 kompatibilní, takže se do nich musel v podstatě přidat „x86 procesor z důvodu kompatibility“. V praxi se ukázalo, že je složité napsat kompilátory tak, aby to fungovalo efektivně – ani aplikace určené pro Itanium radikálně nedrtily konkurenci, naopak v klasickém x86 kódu zaostávaly.