Hlavní stránka Hardware Procesory, paměti Architektura procesorů Nehalem (2/2)
Architektura procesorů Nehalem (2/2)
autor: Petr Koc , publikováno 4.9.2008
Architektura procesorů Nehalem (2/2)

Nehalem bude první masově nasazovaný procesor Intelu, který bude integrovat řadič pamětí blízko procesoru. Tím ale výčet novinek nekončí. Inženýři se při návrhu zaměřili také na návrh samotné výpočetní části a kompletně předělali také návrh cache subsystému. Pojďme se podívat, v čem budou největší změny samotné architektury procesoru.


O přeměnu macroOPs (x86 instrukcí) na interní primitivní operace microOPs se stejně jako u Core starají čtyři dekodéry, z toho jeden komplexní a tři jednoduché. Jednoduché dekodéry jsou schopné dekódovat pouze jednodušší typy x86 instrukcí a jejich výstup je vždy jedna microOP za takt. Komplexní dekodér zvládá dekódování všech typů instrukcí a je schopen dodat až čtyři microOPs za takt. Ke svému chodu využívá microcode sekvencer, jakousi relační databázi typu 1:1, kde na jedné straně je x86 instrukce a na straně druhé sekvence microOPs. Sekvencer se používá pro případ, kdy je instrukce natolik složitá, že jí není možné dekódovat v jednom cyklu.

Architektura procesorů Nehalem (2/2)

Součástí dekódování je také technika fúzování macroOPs známá již z Core architektury. Snaží se o zvýšení účinnosti instrukčních dekodérů tak, že dvě jednodušší x86 instrukce vymění za jednu složitější. Typickým příkladem může být kombinace instrukcí cmp a jne („porovnej s předdefinovanými údaji a pokud není identické, nastav instrukce na adresu“), tedy typického podmínkového skoku, která je nahrazena jedinou instrukcí cmpjne. Cmpjne se v sadě x86 nenachází, jedná se tedy o „smyšlenou“ instrukci procesoru, které ale dekodéry umístěné dále rozumí. Výhodou fúzování je, že komplexnější microOP zabírá v instrukčním okně (o něm dále) jeden záznam na místo dvou, tedy efektivně zvyšuje paralelismus, a zároveň zvyšuje tempo dekódování, protože takto je možné dekódovat pomocí čtyř dekodérů až pět instrukcí za takt.

Oproti Core dostál Nehalem v této oblasti značného vývoje. Nejenom že se rozšířilo množství navzájem slučitelných instrukcí o podmínky typu JLE / JGE (jump if less or equal, jump if greater or equal), ale také tato technika nyní funguje i v 64bit režimu. To je vcelku logické, neboť rok 2008 je rokem 64bit operačních systémů – při dnešních cenách pamětí RAM se nelze divit. Protože už u Core mělo fúzování zvyšovat výkon až o 10 % (podmínkových skoků je v programech značné množství), můžeme u kombinace Nehalemu a 64bit aplikací očekávat slušné zvýšení rychlosti.

Architektura procesorů Nehalem (2/2)

Maximální výkon dekodérů je tedy sedm microOPs vzniklých z až pěti x86 instrukcí. Těchto až sedm microOPs putuje do fronty s 28 záznamy, která má v Nehalemu speciální úlohu. Jednak v ní dochází k fúzování na bázi microOPs, tj. když se sejdou dvě vhodné microOPs, je možné je sloučit do jedné s komplexnějším obsahem, která pak, obdobně jako u fúzování macroOPs, zabírá pouze jeden záznam v instrukčním okně, druhak je zde přítomný detektor cyklů.

Detektor cyklů slouží pro odhalení, že v kódu se nachází cykly. Cykly jsou sekvence instrukcí, které se neustále opakují, jen obvykle pracují s jinými daty. Typickým velmi jednoduchým cyklem může být například přičítání čísel k prvkům pole, tedy např. v jazyce C následující kód:

Architektura procesorů Nehalem (2/2)

Tento cyklus by byl, mimochodem, i velmi snadno vektorizovatelný.

Procesor v tomto případě posílá do pipeline třicet microOPs ekvivalentních instrukci inc (increment). Za normálních okolností by dekodéry měly těchto 30 instrukcí dekódovat, což by ale znamenalo poměrně značnou ztrátu jak elektrické energie (zbytečná práce dekodérů), tak také výkonu (dekodéry nemohou dekódovat nic jiného). Proto je v Nehalemu přítomem dekodér cyklů, který v případě jejich zjištění posílá do pipeline již dekódované microOPs. Podmínkou samozřejmě je, že cyklus se musí vejít do velikosti fronty, tedy do 28 microOPs. Obecně to tedy funguje jen na velmi malé cykly (např. pro ten uvedený výše). Těch je ale v programech většina.

Detektor cyklů byl přítomen již v architektuře Core. Tam ale sídlil ve Front-endu, konkrétně v 18 instrukční frontě před dekodéry. U Core tedy docházelo pouze k úspoře u natahování (fetch), tedy zejména úspoře přenosové rychlosti a spotřeby cache paměti. Řešení u Nehalemu je elegantnější a efektivnější.



 
Komentáře naleznete na konci poslední kapitoly.
176 čtenářů navrhlo autorovi prémii: 84Kč Prémie tohoto článku jsou již uzavřené, děkujeme za váš zájem.
Tento web používá k poskytování služeb soubory cookie.