Dual-core: proč nemůže uspět
Letos uváděné dvoujádrové procesory jsou monolitické. To znamená, že dvě jádra jsou vyráběna spolu na jednom křemíku.
Jádro Smithfield pro současné Pentium D je vyráběno dohromady. Zabírá velkou plochu na waferu, čímž se zvětšují ztráty plochy waferu na okrajích. AMD je na tom se svým dvoujádrovým Athlonem 64 X2 obdobně - jejich čip je také monolitický.
Budoucí Pentium D Presler řady 9xx, které bude uvedeno na začátku příštího roku na 65nm technologii, již budou dva samostatné čipy.
Jedno jádro Presleru bude identické s procesorem nazvaným Cedar Mill.
Monolitickým procesorem bude i připravované Pentium M s jádrem Yonah.
L2 cache - problematické místo dual-core
Jednou z nejvíce problematických věcí u dual-core procesorů, co se výkonu týče, je L2 cache. Zásadní problém je ve sdílení obsahu. Existují v podstatě dva přístupy - separátní L2 cache pro každé jádro a sdílená L2 cache pro obě jádra.
Typ | Výhody | Nevýhody |
separátní L2 cache | rychlejší odezva cache | data změněná jedním jádrem musí být přepravena do druhého jádra |
sdílená L2 cache | data změněná jedním jádrem jsou ihned dostupná pro druhé jádro | pomalejší odezva cache |
Jde tedy o to, že pakliže dva thready chtějí data ze stejné části paměti a jedno jádro tuto část paměti mění (... a výkon urychluje umístěním výsledku ve své L2 cache), druhé jádro do ní nesmí zasahovat - není prostě možné, aby když jedno jádro má zapsat výsledek operace - např. když na adresu v paměti má být zapsáno číslo 5, aby si druhé jádro načetlo data dřív, než tam skutečně bude číslo 5 (načetlo např. jedničku, která tam byla předtím). To, že druhé jádro musí počkat, je ošetřeno protokolem, kterým spolu obě jádra komunikují. Toto problém není.
Co naopak problém je, jak v uvedené situaci dostat číslo 5 z jednoho jádra k druhému - tj. předat si číslo 5 tak, aby druhé jádro nemuselo dlouho čekat. Je nutné přemístit ono číslo z jedné cache do druhé. U sdílené L2 cache to není problém - jakmile jedno jádro zapíše výsledek do L2 cache, jakoby ho zapsalo druhému jádru přímo pod nos. Horší situace nastává u separátních L2 cache - ty si musí nějak data předat přes jakousi sběrnici, kterou jsou jádra propojena.
Z tohoto pohledu můžeme programy v zásadě rozdělovat na několik typů:
1. Dva jedno-threadové současně - Separátní cache jsou lepší, protože každý z programů operuje ve vlastní části paměti. Typické pro multitasking OS s více zátěžovými programy naráz.
2. Multithreadové zpracovávající jednu datovou oblast - Sdílená cache je lepší. Typické pro jeden částečně multithreadový program.
3. Multithreadové zpracovávající více datových oblastí - Separátní cache jsou lepší. Typické pro jeden plně multithreadový program.
AMD letos uvádí pouze procesory se separátními L2 cache. Zástupcem u stolních počítačů je Athlon 64 X2:
Vzájemné předávání dat mezi L2 cache je u tohoto procesoru zajištěno po vnitřní sběrnici, která mimo jiné spojuje obě jádra s jedním HyperTransport kanálem a dvoukanálovým DDR400 řadičem. Tato sběrnice (v podstatě FSB) je 64 bitů široká a běží na frekvenci procesoru - u 2.4 GHz modelu tak má propustnost téměř 20GB/s. To je dost velká rezerva pro všechny klienty této sběrnice (dvě jádra, HyperTransport kanál a paměťový řadič).
Dvoujádrový procesor díky této sběrnici může být rychlejší než dva jednojádrové - u dvou Opteronů totiž předávání dat mezi L2 cache probíhá přes HyperTransport kanál, který dosahuje rychlosti maximálně 4 GB/s jedním směrem.
U Intelu je situace poněkud složitější. Brzy budou uvedena dvoujádrová Pentia D a tři vybrané firmy ze světa již nabízí Pentia eXtreme Edition. Obě mají jádro Smithfield.
Návrhem je procesor podobný řešení od AMD, také má separátní L2 cache. Co je ale hrubě nezvládnuté, celý procesor jsou v podstatě dva Prescotty bez jakékoli změny. Obě jádra jsou sice součástí jednoho kusu křemíku, ale jinak se jedná o prakticky přesnou kopii dvouprocesorového systému - obě jádra jsou klienty sběrnice FSB (!) a přes FSB si předávají data. Jinými slovy ta FSB, která nyní brzdí výkon Pentia 4 a ve srovnání s Athlony 64 by se dala považovat za výtvor hodný muzea, ta FSB, která je přetížená daty putujícími z řadiče pamětí v čipsetu do procesoru, bude nyní přetěžována předáváním obsahu mezi L2 cache. Kvůli tomuto "výdobytku" může být Pentium D dokonce pomalejší než Pentium 4 (viz. některé testy) !
Stejně jako u Smithfieldu, je bohužel i u jeho následníka Presleru propojení jader realizováno přes tištěný spoj obalu (packaging - PCB), tedy přes FSB.
Dempsey je následník současného Xeonu s jádrem Nocona. V podstatě se jedná o jádro Presler, takže opět sdílení přes FSB.
Prvním dvoujádrovým procesorem Intelu, který sdílí data uvnitř, je Paxville - to je náhrada za nedávno uvedený Potomac, tedy Xeon MP pro více než dvouprocesorové servery. Důvodem, proč Intel zvolil tuto cestu, je, že nedávno uvedený čipset 8500 zvládá na každé z dvou svých FSB obsloužit pouze dva klienty a Intel chce do budoucna zachovat kompatibilitu.
V oblasti mobilních procesorů Intel připravuje na začátek příštího roku dvoujádrový Yonah. To by mělo být pokračování současného Pentia M. Procesor bude mít 2MB sdílené L2 cache a snad by měl konečně přidat podporu 64bit rozšíření.
Speculative precomputation a L2 cache
Protože dvoujádrové procesory mají (z důvodů omezení spotřeby) nižší frekvenci než jednojádrové, je jejich výkon u jednovláknových aplikací horší. Jedním ze způsobů, jak toto řešit, je kompilovat aplikaci s využitím speculative precomputation (spekulativního předpočítávání).
Jedná se o techniku, kdy kompilátor do jinak jednovláknového kódu nastrká pomocné thready, které projíždějí kód před hlavním výpočtem. Hlavní výpočet (tj. výpočet onoho jednoho vlákna) probíhá na jednom jádře. Druhé jádro mezi tím prostřednictvím pomocných threadů projíždí kód vpředu a vyvolává požadavky na data. Koncepce vychází z toho, že procesor hodně často čeká na pomalou paměť RAM - jakmile zjistí, že data nejsou připravena v cache, musí je načíst, výpočet se zasekne a to rapidně degraduje výkon. Tím, že pomocné thready vyžádají data ještě před hlavním threadem, již tato budou v cache nebo v půli cesty - čekání se významně zkrátí. Výkon jednovláknových aplikací se tím může výrazně zlepšit.
Hlavní problém této jinak zajímavé techniky však spočívá v tom, že procesor musí mít sdílenou L2 cache nebo alespoň velmi rychlé předávání dat mezi separátními cache. Je totiž zcela k ničemu, když si druhé jádro prostřednictvím pomocných threadů natáhne data do své cache, když je pak bude potřebovat jádro první, které provádí hlavní výpočet a které má cache svou vlastní. Dalším problémem je, že tato velmi agresivní prefetch metoda vyžaduje větší velikost L2 cache a velmi rychlé paměti - nároky na rychlost a objem poskytovaných dat se tím významně zvyšují.
Zajímavost: Z provedených testů vyplývá, že Pentium 4 stráví až polovinu času přístupu do paměti obsluhou pomalé sběrnice FSB.
SpeedStep a PowerNow! - pouze polovičaté!
Další problematickou záležitostí je power management. Jak procesory Pentium D a Pentium eXtreme Edition od Intelu, tak dvoujádrové procesory od AMD podporují regulaci frekvence a napětí za chodu za účelem snížení spotřeby při nevytížení (Enhanced SpeedStep, PowerNow! / Cool'n'Quiet). Ale ani jeden ho neumí nezávisle pro jednotlivá jádra. Možné je mít nezávislé frekvence pro každé jádro. Co možné není, je mít nezávislá napětí - základní deska má prostě jen jeden regulátor, ale takto by byly potřeba dva. Bohužel napětí je právě to, co způsobuje leakage current, nejvýznamnější spotřebu procesoru v klidu.