Připomenutí mikroarchitektury Bulldozer
Kapitoly článků
O mikroarchitektuře Bulldozer toho sice bylo napsáno již dost, ale neuškodí, když si pár věcí připomeneme. Velké debaty se v diskuzích vedou o tom, zda jde o osmijádrové procesory, nebo o čtyřjádrové s variací na Hyper-Threading, jako má Intel. AMD své procesory FX řady 8000 označuje jako osmijádrové, takže nemá smysl polemizovat nad tím, zda je v procesoru 8 jader, nebo čtyři jádra, nebo čtyři plnohodnotná jádra a čtyři neplnohodnotná. Tyto úvahy sice nejsou úplně mimo mísu, ale v praxi jsou k ničemu. Produkt je pozicován jako osmijádrový a jako k takovému je potřeba k němu přistupovat. Přesto bychom se dovolili držet několika specifik použité mikroarchitektury, protože to má v určitých situacích specifický význam.
Bulldozer je označení v první řadě pro dvoujádrový modul, který je základním stavebním kamenem nově uváděných procesorů. Tento modul je na úrovni křemíku dále nedělitelný, lze jej nanejvýš dělit na úrovni specifikační. To znamená, že lze vytvořit např. ze dvou modulů procesor tříjádrový, popřípadě čtyřjádrový ze čtyř modulů, kdy v každém bude jedno jádro vypnuté a druhé tak bude mít veškeré součásti modulu pro sebe. Pojímáme nicméně podezření, že všechny nyní uváděné FX procesory obsahují čtyři moduly, přičemž v šestijádrovém je vypnutý jeden, ve čtyřjádrovém dva. Mělo by nicméně jít vyrobit procesor, který obsahuje fyzicky méně než čtyři moduly.
Dělení procesoru na dvoujádrové moduly vyústilo logicky v integraci dvou jader do jednoho modulu, kde je hodně věcí sdílených. Může se na první pohled zdát, že AMD tím šetří křemíkem, jenže je to na úkor cache, které je v porovnání s předchozí generací procesorů této společnosti skutečně hromada (šestijádrový Phenom II X6 měl celkem 3 MB L2 cache a 6 MB L3 (tedy celkem 9 MB), osmijádrový FX má 8 MB L2 a 8 MB L3, tedy dohromady 16 MB. V šestijádrovém Phenomu II X6 zabírá L2+L3 cache dohromady odhadem 17 % křemíkové plochy (plus mínus nějaké to procento), v osmijádrovém FX je to bezmála 30 % (spočítáno hrubým odhadem z obrázků křemíku). Mezi nesdílené části jednoho Bulldozer modulu patří samotná jádra pro celočíselné operace (tzv. ALU neboli aritmeticko-logická jednotka), plus jejich plánovač a datová cache, zbytek je sdílený (tedy instrukční cache, L2 cache a řada dalších více či méně zajímavých věcí včetně FPU neboli toho, čemu se ještě v dobách procesorů 486 SX říkalo „koprocesor“.
Tato jednotka pro operace v plovoucí řádové čárce je sdílená pro obě jádra tak, že dokud jde o operace s max. 128bit. operandy (zjednodušeně se říká 128bit. operace), pak je možné naráz vykonat dva takové příkazy (jakoby každým jádrem jeden). Až když dojde na 256bit. instrukci, vykonává ji FP jednotka jako celek, nemůže dělat dvě naráz. Jinými slovy: pokud bychom se na jeden Bulldozer modul podívali ze současného pohledu, kde nejsou využívány 256bitové instrukce, jde v podstatě o plnohodnotné dvoujádro se sdílenou L2 cache (podobně na tom bylo Core 2 Duo, ale neberte to moc doslova, protože to především nic neříká o výkonu). Druhé ALU jádro v celém Bulldozer modulu zabírá něco málo přes 10 % plochy (nicméně zhruba třetinu modulu zabírá L2 cache – pro srovnání o Hyper-Threadingu v Pentiích 4 se říkalo, že přidával zhruba 5 % křemíku navíc).
Když už je řeč o AVX instrukcích, sluší se připomenout, jaké nové instrukce vlastně procesor má.
Konečně se do AMD procesorů dostávají SSE4.1 a SSE 4.2 instrukce, stejně jako AES-NI pro šifrování a hashování a také AVX pro náročné operace s plovoucí řádovou čárkou, plus FMA4 (
Každopádně se nám instrukční sady Intelu a AMD mírně vzdalují. V tomto směru byla zajímavá „rošáda“ s FMA instrukcemi, AMD chtěla původně do Bulldozeru zahrnout FMA3 a Intel FMA4 a pak si to obě firmy skoro ve stejný moment prohodily, Intel do svých procesorů zahrne FMA3 (ovšem bude to až v roce 2013 Haswell) a AMD do Bulldozeru nyní dává FMA4 (rozdíl je v počtu operandů, FMA3 během práce potřebuje jeden z nich přepsat výsledkem, FMA4 použije pro výsledek čtvrtý – každopádně nejsou navzájem kompatibilní, aplikace či kompilátor musí počítat s konkrétní implementací).