Intel Core - pohled na architekturu I
2.5.2006, Eagle , článek
![Intel Core - pohled na architekturu I](navstevnost-a-redakce/1/img/website-800.jpg)
Již za několik měsíců se do obchodů dostaví první procesory založené na nové architektuře Intel Core. Čipy Conroe, Merom a Woodcrest znamenají dramatickou změnu ve vývoji. Dnes zahájíme povídání o tom, jak nové procesory fungují a co zajímavého přinesou.
Kapitoly článku:
- Intel Core - pohled na architekturu I
- Dekódování - až pět instrukcí za takt
- Macro-fusion, microOPs fusion
- Out-of-Order zpracování
- Změny v jednotkách
Macro-fusion
Specialitou architektury core spojenou s Front-End částí je Macro-fusion (fúzování makroinstrukcí - tedy instrukcí x86, x87 atp.). Tato technika se snaží o dekódování v programu se vyskytujících dvou instrukcí na jednu microOP, která je vystihne obě.
![](intel-core-pohled-na-architekturu-i/13984/img/body-0.298.gif)
Na příkladu na obrázku je pět instrukcí počínaje čtení z paměti do eax registru (load eax, [mem1] ) a konče zvětšením registru ecx o jedničku (inc ecx). Za normálních okolností musí těchto pět instrukcí projít "pěti" dekodéry (co dekodér, to jedna zpracovaná instrukce).
![](intel-core-pohled-na-architekturu-i/13984/img/body-0.66E8.gif)
V případě Macro-fusion dojde ke sloučení dvou instrukcí, konkrétně instrukce požadující porovnání obsahu registru eax s daty v paměti (cmp eax, [mem2] ) s ihned za ní následující podmínkovou instrukcí žádající v případě neshody dat odskok na adresu v paměti (jne targ = jump if not equal to target). Takto sloučené instrukce pak převezme jeden dekodér a vytvoří z nich jednu microOP. Za jeden hodinový cyklus je možné takto sloučit jeden pár instrukcí a toto sloučení může provést libovolný ze čtyřech dekodérů.
Když to shrneme, čtyři dekodéry mohou za jistých okolností dekódovat až pět instrukcí (tři dekodéry jednu a jeden dvě fúzované). Výstupem dvou fúzovaných instrukcí je jedna microOP. Celkově tedy procesor může dekódovat více instrukcí najednou a zároveň pomocí méně microOPs vystihne stejnou práci (... což má pozitivní efekty ve výpočetní části, jak si dále ukážeme).
Všechny ostatní dnešní procesory umí dekódovat pouze tři instrukce za takt.
Macro-fusion najde uplatnění překvapivě často. V programech se totiž hojně vyskytují podmínky if-else, které určují průběh výpočtu. Pokud je podmínka splněna, stane se jedna věc, pokud splněna není, stane se jiná. Na bázi instrukcí je to řešeno právě porovnáním a odskokem. Podle některých lidí by Macro-fusion mohlo snížit potřebný počet microOPs pro vystižení práce v průměru o 10 %, čímž by došlo k zvýšení paralelizace, aniž by bylo nutné procesor výrazně zesložiťovat přidáním dalších transistorů (... které také mají nenulovou spotřebu).
MicroOPs fusion
Další technikou, tentokrát převzatou z Pentia M, je fúzování microOPs. Technika je podobná fúzování MacroOPs, pouze s tím rozdílem, že nyní se slučují microOPs.
Pokud x86 instrukce vyžaduje dvě operace (typicky uložení dat vyžaduje nejdříve spočtení adresy a pak samotné uložení), dekóduje se za normálních okolností tato instrukce na dvě microOPs. Ty pak putují v pipeline společně. Fúzování microOPs vychází z toho, že tyto dvě microOPs je možné sloučit do jediného záznamu - jinými slovy jakoby z nich vytvořit jedinou microOP. Takto fúzovaná microOP skutečně zabírá pouze jednu pozici v Reorder Bufferu (viz dále), přičemž tak umožňuje redukovat počet potřebných microOPs k vykonání stejného požadavku, tedy zlepšuje výkon.
Při vykonávání pak těsně před výpočetními / paměťovými jednotkami dojde k rozdělení fúzované microOP na dvě a ty jsou následně poslány do příslušných jednotek (paralelně nebo sekvenčně, podle možností jednotek). Záznam v Reorder Bufferu ale i pak vede obě operace jako jedinou microOP.
![](intel-core-pohled-na-architekturu-i/13984/img/body-1.4D82.gif)
microOPs fusion sice bylo poprvé použito už u Pentia M, Core ale dále rozšiřuje schopnosti tím, že umožňuje fúzovat více typů instrukcí. Efektivněji tak šetří drahocenné zdroje.
Specialitou architektury core spojenou s Front-End částí je Macro-fusion (fúzování makroinstrukcí - tedy instrukcí x86, x87 atp.). Tato technika se snaží o dekódování v programu se vyskytujících dvou instrukcí na jednu microOP, která je vystihne obě.
![](intel-core-pohled-na-architekturu-i/13984/img/body-0.298.gif)
Na příkladu na obrázku je pět instrukcí počínaje čtení z paměti do eax registru (load eax, [mem1] ) a konče zvětšením registru ecx o jedničku (inc ecx). Za normálních okolností musí těchto pět instrukcí projít "pěti" dekodéry (co dekodér, to jedna zpracovaná instrukce).
![](intel-core-pohled-na-architekturu-i/13984/img/body-0.66E8.gif)
V případě Macro-fusion dojde ke sloučení dvou instrukcí, konkrétně instrukce požadující porovnání obsahu registru eax s daty v paměti (cmp eax, [mem2] ) s ihned za ní následující podmínkovou instrukcí žádající v případě neshody dat odskok na adresu v paměti (jne targ = jump if not equal to target). Takto sloučené instrukce pak převezme jeden dekodér a vytvoří z nich jednu microOP. Za jeden hodinový cyklus je možné takto sloučit jeden pár instrukcí a toto sloučení může provést libovolný ze čtyřech dekodérů.
Když to shrneme, čtyři dekodéry mohou za jistých okolností dekódovat až pět instrukcí (tři dekodéry jednu a jeden dvě fúzované). Výstupem dvou fúzovaných instrukcí je jedna microOP. Celkově tedy procesor může dekódovat více instrukcí najednou a zároveň pomocí méně microOPs vystihne stejnou práci (... což má pozitivní efekty ve výpočetní části, jak si dále ukážeme).
Všechny ostatní dnešní procesory umí dekódovat pouze tři instrukce za takt.
Macro-fusion najde uplatnění překvapivě často. V programech se totiž hojně vyskytují podmínky if-else, které určují průběh výpočtu. Pokud je podmínka splněna, stane se jedna věc, pokud splněna není, stane se jiná. Na bázi instrukcí je to řešeno právě porovnáním a odskokem. Podle některých lidí by Macro-fusion mohlo snížit potřebný počet microOPs pro vystižení práce v průměru o 10 %, čímž by došlo k zvýšení paralelizace, aniž by bylo nutné procesor výrazně zesložiťovat přidáním dalších transistorů (... které také mají nenulovou spotřebu).
MicroOPs fusion
Další technikou, tentokrát převzatou z Pentia M, je fúzování microOPs. Technika je podobná fúzování MacroOPs, pouze s tím rozdílem, že nyní se slučují microOPs.
Pokud x86 instrukce vyžaduje dvě operace (typicky uložení dat vyžaduje nejdříve spočtení adresy a pak samotné uložení), dekóduje se za normálních okolností tato instrukce na dvě microOPs. Ty pak putují v pipeline společně. Fúzování microOPs vychází z toho, že tyto dvě microOPs je možné sloučit do jediného záznamu - jinými slovy jakoby z nich vytvořit jedinou microOP. Takto fúzovaná microOP skutečně zabírá pouze jednu pozici v Reorder Bufferu (viz dále), přičemž tak umožňuje redukovat počet potřebných microOPs k vykonání stejného požadavku, tedy zlepšuje výkon.
Při vykonávání pak těsně před výpočetními / paměťovými jednotkami dojde k rozdělení fúzované microOP na dvě a ty jsou následně poslány do příslušných jednotek (paralelně nebo sekvenčně, podle možností jednotek). Záznam v Reorder Bufferu ale i pak vede obě operace jako jedinou microOP.
![](intel-core-pohled-na-architekturu-i/13984/img/body-1.4D82.gif)
microOPs fusion sice bylo poprvé použito už u Pentia M, Core ale dále rozšiřuje schopnosti tím, že umožňuje fúzovat více typů instrukcí. Efektivněji tak šetří drahocenné zdroje.