Architektura Intel Nehalem - co přinese nového?
13.10.2008, Lukáš Petříček, článek
Dnes si podrobně představíme architekturu Intel Nehalem, s kterou již brzy přijde Intel na trh a jež nás bude provázet minimálně další 2 roky. Nehalem přináší řadu zásadních změn na úrovni architektury procesorů i platforem.
Kapitoly článku:
Pohled na architekturu Intel Nehalem
Architektura Intel Nehalem staví z velké části na architektuře Intel Core, ale obsahuje řadu vylepšení na úrovni jádra i platformy. Připoměňme si základní rysy Penrynu: 4 instrukční dekodéry, vykonávání instrukcí mimo pořadí, 128bit SSE, SSE4.1 instrukce, techniky zdokonalující práci s pamětí a velice rychlou cache.
Intel Core 2 obsahuje standardně 2 jádra, která mají L2 sdílenou mezi obě jádra (standardně o velikosti 6 MB L2). Na snímku výše je jasně zřetelné, že L2 cache zabírá podstatnou část plochy jádra.
To se s příchodem Nehalemu mění a současná hierarchie cache byla značně upravena, ačkoliv stále vychází se Smart Cache Penrynu a blíže se na ní podíváme v další části článku. Bloomfield se skládá z několika bloků: integrovaný řadič paměti IMC, 4x jádro, QPI a v dolní části jsou také velké bloky L3 cache (ačkoliv výrazně menší než u Penrynu). QPI i řadič paměti jsou umístěny mimo jádro, a lze je tak snadno dále rozšířit.
Pojďme se teď blíže podívat na změny v jádře. Začneme Front-endem, který slouží k získávání a dekódování instrukcí. Nehalem stejně jako architektura Core zpracováva microOPs, což můžeme přirovnat k nejzákladnějším povelům, na které je každá x86 instrukce rozložena. Nehalem má stejně jako Core architektura 4 instrukční dekodéry (3 jednoduché a jeden komplexní).
Fúzování Makroinstrukcí bylo uvedeno již s rodinou procesorů Intel Core 2 a stejně tak Loop Stream Detector. Nehalem podědil fúzování makroinstrukcí po Core 2 a dále jej rozšiřuje. Při zfúzování makroinstrukcí dochází k dekódování na microOP, jako by se jednalo o jedinou instrukci - to přináší vyšší výkon a vyšší energetickou účinnost. Mimo jiné již také přibylo fúzování i v 64bit režimu (Core 2 umí pouze 32bit).
K dalším vylepšením Nehalemu patří detektor cyklů, LSD (Loop Stream Detektor). LSD umožnuje odhalit cyklus v probíhajícím kódu a zabránit tak opakovanému dekódování instrukcí a predikci větvení. LSD tak zvyšuje výkon v průběhu cyklu a na jeho základě také případně vypíná nepotřebnou logiku (podobný systém již také obsahují procesory Intel Core 2).
Nehalem se také zaměřuje na lepší predikci větvení a předvídání skoku. Obecně vysoká přesnost předvídání přináší vyšší výkon a nižší spotřebu (omezí se množství chybně vykonaných microOPs). Dalším vylepšením je L2 Branch Predictor. Jak již vyplývá ze změn ve platformách, Nehalem bude mít nejlepší postavení na serverovém trhu (zde má mít L2 Branch Predictor největší dopad na výkon). Současné architektury nemají dostatečnou kapacitu zásobníku (typicky databázové aplikace). Pro dodatečnou predikci je použito vícestupňové schéma a rozšířen TLB buffer u L1 datové cache na 64 záznamů, TLB L1 instrukční cache na 128 záznamů a L2 TLB buffer na 512 záznamů.
Execution Engine jako výkonná část jádra staví na základu procesorů Intel Core 2 procesorů a přidává další vylepšení.
Problém dnešních architektur je, že i přes "chytrý" návrh poměrně často nedělají nic. Cílem Nehalemu je udržet výpočetní jednotky v činnosti, a proto jsou zde rozšířeny Load a Store Buffery a Reservation Station (ta dodává informace pro výpočetní čast, ukládá a čte data a tak dále). Navýšen je dále paralelismus a zvětšen počet microOPs, které procesor zvládne. Dothan zvládl 64, Merom 96 a u Nehalemu došlo k dalšímu navýšení, na 128 microOPs.
Změny navýšení "bufferů" pro instrukce samozřejmě souvisí s tím, že Nehalem opět přináší Multi-Threading, který značně zvyšuje požadavky na přísun dat a více vytěžuje výpočetní jednotky.
Dále se podíváme na změny v hierarchii cache, která ačkoliv vychází se Smart Cache Penrynu, v podání Nehalemu dostála řady změn. Zachována zůstala velikost 32 kB L1 instrukční a 32 kB L2 datové cache. Rychlost L1 cache byla oproti jádru Penryn snížena z 3T na 4T. Poměrně zásadní změna se ovšem týká L2, kde byla kapacita snížena na pouhých 256 kB na jádro (takže je 24x menší, pokud nepočítáme Multi-Threading jako "jádro", než má původní L2 cache u Penrynu - toto výrazné snížení kapacity bude mít zřejmě v některých případech značně nepříznivý dopad na výkon). U L2 cache byla alespoň zvýšena její rychlost z 14T u Penrynu, na 10T v případě Nehalemu.
Nově je v Nehalemu velká L3 cache sdílená pro všechna jádra. Velikost L3 cache je závislá na počtu jader - pro čtyřjádrovou variantu Nehalemu má kapacitu 8 MB. V budoucnosti, a v závislosti na počtu jader, může dojít k navýšení její kapacity. L3 cache je v Nehalemu inkluzivní, takže data v L1/L2 jsou obsažena také v cache 3. úrovně. L3 cache je poměrně pomalá s dobou přístupu okolo 40T.
Cache a její úspěšnost, cache-hit (případně cache-miss) samozřemě výrazně ovlivňuje výkon. Pokud data nejsou nalezena v L2 ani L3 cache, je třeba prohledat lokální paměť, kde je ovšem řádově větší přístupová doba. Výkon v tomto případě výrazně klesá. Intel preferuje ve svém návrhu inkluzivní cache, takže obsah L1 je obsažen v L2 cache (a L2 je obsažen v L3). Pro srovnání AMD preferuje přístup exkluzivní cache, takže data nejsou v L1 a L2 uložena duplicitně (L3 není ani čistě exkluzivní ani inkluzivní).
Následuje příklad práce CPU s exkluzivní a inkluzivní cache. Představme si modelovou situaci, kdy potřebná data požadovaná v jádru 0 nejsou v L1 ani L2 cache, a požadavek na L3 také vygeneruje cache miss. Zatímco v případě exkluzivní cache se bude zjištovat stav v cache u jader 1 až 3, v případě inkluzivní cache lze rovnou generovat požadavek do RAM.
V případě, že nastane cache hit, není již třeba ověřit jádra 1 až 3. U Nehalemu mohou být data v cache u některého z dalších jader, což je řešeno pomocí bitového indikátoru.
¨
Pokud L1 nebo L2 nějakého jádra může obsahovat příslušná data, bit je nastaven na indikátoru na "1". Každý bit zde indikuje jednotlivé jádro procesoru a pokud zde není žádný bit nastaven, není třeba jádro ověřovat. V případě nastavení více než jednoho bitu (data při tomto stavu není nikde možné měnit) lze data přečíst přímo z L3, což omezuje zbytečné prohledávání cache dalších jader.
Každá hierarchie cache má samozřejmě svoje výhody, a ačkoliv AMD preferuje exkluzivní cache a Intel naopak inkluzivní, je zřejmé, že velkou roli zde hraje architektura samotného jádra, kapacita a rychlost jednotlivých úrovní cache a také celkový návrh procesoru - kolik má cache zabírat plochy a tak dále. Další z novinek Nehalemu je technologie Simultaneous Multi-Threading (SMT)...