Jak moderní procesory obešly svoje výkonové limity
i Zdroj: PCTuning.cz
Hardware Článek Jak moderní procesory obešly svoje výkonové limity

Jak moderní procesory obešly svoje výkonové limity | Kapitola 4

Michal Rybka

Michal Rybka

11. 1. 2020 03:00 40

Seznam kapitol

1. Co se děje v počítači 2. Bariéry 3. Od Pentia k Itaniu 4. Mimo prostor a čas 5. Moderní procesory 6. Na limitech technologie

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!

Reklama

Druhou cestou bylo radikální zlepšení procesoru tak, aby zvenku fungoval stále jako x86 kompatibilní, ale všechny změny se odehrály uvnitř. Předskokany pro změnu bylo jak Pentium (P5), tak i Pentium Pro (P6), které – zvláště vzhledem k ceně – ve své době taky představovalo jisté zklamání, ale přece jenom se na něm vyzkoušely nové prvky architektury. Novinkou byla technologie vykonávání instrukcí mimo pořadí (out of order execution), což nebyla věc nová, poprvé se objevila na CRAY CDC 6600 v roce 1964, ale na mikroprocesoru to byla velká inovace.

Pokročilé technologie obelhávají prostor a čas a vymykají se tomu, jak vidí programátor instrukce. V programátorském modelu se vykonává jedna instrukce za druhou a procesor, onen von neumannovský úředník, je jednu za druhou plní. Pro out of order execution je daleko lepším analogem velká fabrika, která se snaží maximalizovat obrábění dat – cache jsou vstupní a výstupní sklady, jednotka řízení interpretuje instrukce a přiděluje kusy dat jednotlivým jednotkám, strojům, které je obrábějí. Věc se má tak, že řídící jednotka umí rozeznat dependence – závislosti, a umí zjistit, že některé instrukce spolu nesouvisejí.

Závislé instrukce znamenají, že následující instrukce se smí vykonat teprve potom, co je dokončena ta předchozí, ale u nezávislých na pořadí nezávisí. U instrukcí „kup dřevo“, „nech ho seříznout“, „kup hřebíky“, „kup kladivo“ a „udělej z toho boudu pro psa“ vidíme, že seříznutí dřeva je možné až po jeho pořízení a boudu uděláme, až bude nakoupené vše, co je potřeba – ale při pořízení hřebíků, kladiva a dřeva na pořadí nezáleží, můžete si to přeházet třeba podle toho, u jakého regálu zrovna stojíte. Ten, kdo vám sepisoval seznam, o tom vědět nemusí, protože výsledek bude stejný. A tomuhle se říká instruction reordering a je to super proto, že věci, které na sobě nejsou závislé, je možné vykonávat najednou, pokud jsou volné jednotky.

Pokud vyjdu z předchozího přirovnání, jdete nakupovat věci pro boudu, ale jdete tam jako rodina, takže je vás víc. Jeden pořídí dřevo a nechá ho seříznout, další půjde pro kladivo, další pro hřebíky – a když to bude hotové, půjdete to zaplatit a pak se z toho udělá bouda. Tyhle věci řeší vnitřní logika, které se říká retirement a to se dá přirovnat k tomu, že čekáte u pokladny, až vám přinesou všechny komponenty, protože dokud to nemáte komplet, nemůžete zaplatit a pokračovat. A podobně, jako si můžete na přířez dřeva dost počkat, v moderních procesorech se načekáte, pokud vaše cache paměti neobsahují data, která potřebujete (cache miss). Zatímco se čeká na paměť, dají se splnit stovky instrukcí, které na nic nečekají.

Další vychytanou technologií jsou mikroinstrukce. Zdálo by se, že je úplná pitomost překládat strojové instrukce do jiných instrukcí, ale zadržte. Instrukce x86 (IA-32 nebo IA-64) jsou pro všechny procesory stejné. Přirovnal bych je k normálně zapsanému popisu, co je třeba nakoupit pro sestavení boudy a jak na to jít. Jenomže my nevíme, kdo přesně půjde nakupovat a bude dělat boudu: Může to být jeden člověk, ale taky rodina s různým počtem členů a dokonce s různými schopnostmi – někdo je pomalejší, ten může čekat na přířez, někdo je rychlý a může to oběhat kolem. To jsou věci schované v architektuře jednoho každého procesoru a přesně toto řeší překlad do mikroinstrukcí: Je to jako někdo, kdo interpretuje návod a každému členu rodiny přiřadí jeho úkoly, aniž by programátor, který návod sepsal, o tom znal jakékoliv detaily.

Díky tomu můžeme mít radikálně odlišné procesory s velmi odlišnou architekturou, kterou ale programátor nevidí, protože rozdělování úkolů se dělá vnitřně. Výrobci procesorů architektury pořád ladí, často analyzují existující programy a přidávají anebo vylepšují jednotky, které bývají obvykle zatížené, zatímco redukují anebo odstraňují ty, které se používají málo. Skutečně, ne vždy je novější procesor rychlejší ve všech případech, někdy se zruší ty jednotky, které se používají málo a nahradí se emulací. Díky technologii překladu na mikroinstrukce to ale pořád funguje, jenom se výkony někdy trochu neočekávaně mění.

Předchozí
Další
Reklama
Reklama

Komentáře naleznete na konci poslední kapitoly.

Reklama
Reklama