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.



Po dekódování již následuje seřazení microOPs do vhodného pořadí (pro výpočet vhodného, mimo programátorem stanoveného) a poslání do výpočetních jednotek.

Architektura procesorů Nehalem (2/2)

Nehalem je 4-issue superskalární out-of-order procesor. To znamená, že je schopen kontinuální posílat do pipeline čtyři mikroinstrukce za hodinový cyklus. V tomto ohledu je stejný jako Core a lepší než Athlon 64 a Phenom (ty jsou 3-issue). Na druhou stranu je nutné přiznat, že využití tak masivního paralelismu je spíše raritou než běžnou záležitostí. Údaje změření pomocí Performance Monitoring Counters (vnitřní čítače procesoru sloužící pro ladění aplikací) ukazují, že drtivá většina programů má paralelismus, který se pohybuje na úrovni 0,8 – 1,2 x86 instrukcí za hodinový cyklus (IPC – Instructions per clock), přičemž kontinuálně ty nejoptimalizovanější programy dosahují hodnot IPC = 2,7. Byť je souvislost mezi x86 a microOPs pouze zprostředkovaná, nedá se patrně říct, že by schopnost zpracovávat čtyři mikroinstrukce za takt bylo něco, co udělá z Core a Nehalemu produkt se zázračným výkonem.

Z 28 záznamové fronty směřují 4 microOPs do tabulky pro přejmenování registrů. Zatímco programátor vidí registry eax, ebx atd., procesor s nimi takto nepracuje. Procesor má k dispozici velké množství fyzických registrů (paměťových lokací), přičemž při out-of-order zpracování je alokuje k programovým registrům (v podstatě tak přejmenovává programové registry – např. eax první instrukce na registr01, eax další instrukce na registr02 atd.). To je logické, protože pokud by například dvě paralelně zpracovávané instrukce přistupovaly k eax a tento vedl do jediného sdíleného datového prostoru, došlo by ke konfliktu. Přejmenování registrů se samozřejmě děje s ohledem na dodržení logické posloupnosti kódu. Není známé, zda bylo fyzické pole oproti Core nějak rozšířeno, aby kompenzovalo přítomnost Hyper-Threadingu.

Z registru aliasů míří čtyři microOPs do Reorder bufferu, jehož úkolem je přeskupit microOPs do takového pořadí, které co nejlépe využije dostupného paralelismu. Toto je tedy hlavní prvek pro řízení instrukčního okna.

Architektura procesorů Nehalem (2/2)

Instrukční okno (instruction window) je množina microOPs, které se mimo předem dané pořadí pohybují v pipeline. Čím větší toto okno je, tím většího paralelismu může být dosaženo. Se zvětšující se velikostí se dokonce může možný paralelismus zintenzivňovat, neboť u právně vytvořeného programového kódu je typické, že operace s logicky souvisejícími daty se provádí postupně – tj. když je např. úkolem provést dvě sady instrukce + data, pak se nejdříve programuje první a až následně druhá část, výpočty neprobíhají na přeskáčku. Když je okno schopné postihnout obě sady naráz, rychlost výpočtů se prakticky zdvojnásobí.

Instrukční okno bylo u Nehalemu rozšířeno na 128 microOPs. Architektura Core měla okno s 96 microOPs. Navýšení je tedy 33 %. To může v mnoha případech velmi přispět k celkově vyššímu výkonu. Zajímavé je, že takto velké okno mělo již Pentium 4. Na rozdíl od Pentia 4 ale Nehalem používá již zmíněné fúzování macroOPs a microOPs, tedy jeho efektivní instrukční okno je ještě větší. Nehalem tak nadále posiluje prvenství v této oblasti, neboť procesory od AMD mají okno s pouze 72 záznamy. Na druhou stranu je třeba zmínit, že v případě aktivního Hyper-Threadingu se instrukční okno dělí mezi dvě vlákna a to půl napůl. V případě Hyper-Threadingu tak může dojít ve srovnání s Core k poklesu výkonu na jedno zpracovávané vlákno.

Reorder buffer zásobuje tempem 4 microOPs za takt rezervační stanici, jejímž cílem je „krmení“ výpočetní a paměťové části. Stanice je schopná v jeden okamžik obsloužit 36 microOPs, což je o 4 více než u architektury Core.

Architektura procesorů Nehalem (2/2)

Rezervační stanice obsluhuje celkem 6 portů, kde na každém sídlí několik jednotek, ze kterých může být v jeden okamžik využívána jen jedna. Všechny porty lze rozdělit na v zásadě dvě skupiny. První z nich je výpočetní část, která sestává z portů 0, 1 a 5, přičemž na každém portu se nachází čtyři jednotky. Z uspořádání vyplývají následující fakta:
  1. Každý port má celočíselnou jednotku ALU. Je tedy možné spočítat tři celočíselné výpočty za hodinový cyklus.
  2. Každý port má celočíselnou SSE jednotku. Za hodinový cyklus je možné vypočítat tři 128 bit celočíselné datové balíky.
  3. Na každém portu se nachází floating-point jednotka (včetně SSE).
Jednotky jsou v mnoha ohledech specializované – např. klasické celočíselné jednotky jsou typicky určeny pouze pro jednodušší operace (např. sčítání), pro komplexní operace je zde jednotka jen jedna. Celkově je ale rozdělení dobré a v zásadě kopíruje požadavky software – důraz je dán na ty operace, které se ve většině programů vyskytují nejčastěji. Nehalemu bude vyhovovat jak kód obsahující převahu celočíselných operací, tak také kód pracující s čísly s desetinnou čárkou. Funkčnost tohoto přístupu již byla odzkoušena na architektuře Core, u Nehalemu zde nedošlo k prakticky žádné změně.

Architektura procesorů Nehalem (2/2)

Druhou částí je oblast portů 2, 3 a 4, která se zabývá prací s pamětí – generováním fyzických adres. Port 2 je specializovaný na operace čtení, kdy jednotka generuje adresu a následně získává z datové cache první úrovně data pro výpočetní část. Porty 3 a 4 se starají o zápis údajů. Všechny operace čtení / zápis jsou řazeny v Memory Ordering Buffer, který je přeskupuje do vhodného pořadí (např. čtení mívá prioritu, protože způsobuje pipeline stall, zatímco zápis je možné provést bez větších problémů zpožděně). Počet současně řízených operací čtení byl navýšen z 32 u Core na 48, počet operací zápisu pak z 20 na 32. Navýšení vyplývá především z toho, že buffery jsou sdíleny mezi obě vlákna Hyper-Threadingu rovným dílem.



 
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.