Nvidia Tesla K20 - součást nejvýkonnějšího superpočítače
27.11.2012, Petr Štefek, technologie
V dnešním článku si představíme hardware, který se stal stěžejním základem pro nejvýkonnější superpočítač Titan. Základem akcelerátorů Tesla K20 je jádro GK110, které drží primát čipu s největším množstvím tranzistorů.
Kapitoly článku:
- Nvidia Tesla K20 - úvod
- Nvidia Tesla K20 - jdeme hlouběji
- Nvidia Tesla K20 - rekapitulace k Tesla K10
- Nvidia Tesla K20 - pod kapotou GK110
- Nvidia Tesla K20 - HyperQ, Dynamic Parallelism, ECC
Když jsme si udělali obrázek o situaci, tak bychom se nyní měli věnovat především samotnému jádru GK110, které představuje v mnoha ohledech pozoruhodnou novinku. GK110 má poněkud jinou pozici než předchozí jádro GK104, které bylo prvně uvedeno pro účely herních akcelerátorů. Zde je situace zcela jiná, protože zbrusu nové jádro se velmi pravděpodobně v herních počítačích nikdy vyskytovat nebude. GK110 je svými 7 mld. trazistorů bezpečně největší GPU na trhu. Výrobní proces 28nm je již ověřený, a tak se nepředpokládají větší problémy. Podle všeho bude GK110 také posledním zástupcem architektury Kepler, takže zde máme v mnoha ohledech výjimečnou situaci.
GK110 - die shot
Je škoda, že prozatím neznáme plochu samotného jádra, ale i přes 28nm výrobní proces to nebude u 7,1 mld. tranzistorů žadný drobeček. Pro srovnání, GPU AMD Tahiti (Radeon HD 7950/7970) disponuje 4,3 mld. tranzistorů a stájové GK104 (GeForce GTX 690/680/670) „pouze“ 3,5 mld. tranzistorů. Oproti procesorům (CPU) jsou GPU podstatně větší a podstatně náročnější na napájení, respektive spotřebu, ale na druhou stranu disponují u paralelních výpočtů násobně vyšším výkonem. O využití paralelních výpočetních architektur v případě akcelerace aplikací, které doposud obhospodařovaly jen tzv. general purpose procesory, se hovoří již roky.
Když jsme zmiňovali, že se Nvidia rozhodla jádro GK110 využít především v profesionálním segmentu a se herního akcelerátoru se nedočkáme, tak to ale rozhodně neznamená, že pro účely grafiky nebude určeno vůbec. Máme zde profesionální produktovou řadu Nvidia Quadro, kde se toto jádro s jistotou objeví. Pokud se podíváme na srovnání obou Keplerů z pohledu čísel, pak pro GK110 platí 15 SMX bloků s celkově 2 688 stream procesory, 6 bloky renderovacích jednotek a pro GK104 8 SMX bloků s 1 536 stream procesory a 4 bloky renderovacích jednotek. Pokud se podíváme na výkony výpočetní, pak je GK110 velmi optimalizovaná architektura Kepler, kterou známe z GK104.
Je zde ale několik rozdílů. GK104 má SMX blok, který se skládá z 192 CUDA Cores (stream procesory) pro FP32 (single precision) výpočty, 8 specializovaných FP 64 jednotek (double precision), 256kB register file, 64kB L1 cache a 48kB uniform cache. Vše je doplněno 4 warp shedulery, kde každý má své dvě dispatch jednotky. Z toho také plyne problém vysokého handicapu v případě FP64 výkonnosti.
GK110 je postaveno velmi podobně, ale několik rozdílů zde přece jen je a jsou zaměřeny především na výkonnost ve FP64. SMX blok se skládá z 192 CUDA Cores (stream procesory) pro FP32 (single precision) výpočty, 64 specializovaných FP 64 jednoetk (souble precision), 256kB register file, 64kB L1 cache a 48kB uniform cache. Větší detaily o designu prozatím nemáme, ale jasně je patrné, kde vzalo jádro GK110 takový nárůst výkonu v double precision výpočtech.
Starší generace jádra GF110 měla TLP (Thread Level Parallelisn) design a každá SM zpracovávala instrukce až ze dvou warpů současně. GK110 je naproti tomu částečně ILP (Instruction Level Parallelism), takže ve výsledku zde je výživný mix TLP a ILP v jednom čipu. Jádro dokáže zpracovat až 8 instrukcí ze 4 warpů najednou, pokud jsou pro to optimální podmínky. Sheduling je v případě GK110 svěřen software, což je velmi zajímavé, neboť vždy bylo železným pravidlem, že sheduling by v případě takto specializovaného profesionálního řešení byl ve správě hardware. K lepšímu vytížení SMX jednotek přispívá také fakt, že k FP64 instrukci může být napárována další instrukce (ještě si připomene, že GK110 má v SMX přítomny FP64 i FP32 jednotky v pomětu 1:3). Toto v případě GF110/100 možné nebylo a SMX buď prováděla FP32 nebo FP64 instrukce, nešlo tedy k FP64 napárovat jinou instrukci.
Výsledkem je, že Nvidia sice obětovala část výkonu staršího GPU GF100/110 superskalárním principem vykonávání instrukcí. Pokud se ale podíváme na věc prakticky, tak by nás ve výsledku mohlo čekat, že jádro bude po většinu času pracovat okolo svého teoretického maxima. Stěžejní je zde přesunutí k tzv. fixed latency instructions a statický plánovací kompilátor. Programátoři se ovšem nemusí bát, že budou mít na krku tyto detaily, protože o ně se stará právě kompilátor Nvidie. Co se ale týká HPC segmentu, kde se předpokládá tvorba low level kódu, tam mohou být programátoři poměrně překvapení tím, jak odlišné nové jádro oproti starší architektuře Fermi je.
Velké změny najdeme také v případě register file a L2 cache, kde samozřejmě muselo dojít ke zvýšení kapacity propustnosti oproti staršímu modelu GF100/110. SMX v případě nového jádra GK110 má k dispozici 256kB register file, kde je přítomno 65 tisíc 32bitových registrů. Srovnat si jej můžeme mezigeneračně s jádrem GF100, kde 32bitových registrů bylo při kapacitě 128 kB 32 tisíc. Rychlost přístupu k těmto registrům byla zdvojnásobena, a tak je nyní možno číst z těchto registrů podstatně rychleji než dříve. L2 cache poskočila ve své velikosti také na dvojnásobek, což činí kapacitu půl druhého megabytu. Zdvojnásobení kapacit, ale jde ale ruku v ruce s téměř dvojnásobným počtem výpočetních jednotek.
Zajímavější než srovnávání kapacit je především fakt, že Nvidia u jádra GK110 krom vyššího počtu SMX dosáhla toho, že každá z těchto částí dokáže mít přiřazeno 2 tisíce vláken, což je o 33% více než u jádra GF100. Počet vláken (thread pool) tedy není nějak zásadně větší, ale na druhou stranu každé vlákno může mít k dispozici více registrů. Jak jsme si uvedli výše, tak GK110 disponuje mnohem větším počtem registrů (65 tisíc u GK110 vs. 32 tisíc u GF100), což přepočteno na jedno vlákno znamená 255 registrů na jedno vláknu pro Keplera. Těžko lze takto posoudit přínos tohoto řešení, ale Nvidia jistě otestovala nespočet pravděpodobných scénářů a došla k závěru, že takovéto navýšení počtu registrů bude významným přínosem.
Zajímavostí, která by neměla zůstat nepovšimnuta, je změna v oblasti texturovací cache GK104, která je nyní lépe uzpůsobena využití pro výpočetní nasazení. Předešlé jádro GF100 mělo k dispozici 12KB cache pro texturovací jednotky, která byla ovšem dostupná pouze pro tyto jednotky, což tak výhodné není, pokud nehodláte akcelerovat grafiku. Programátoři ovšem často využívali tuto speciální dedikovanou cache jako datovou cache. Nvidia se rozhodla, že jim tento způsob trošku usnadní a tuto cache poněkud povýší, a to jak z hlediska funkčnosti, tak z hlediska kapacity. Nyní je k dispozici 48kB, která je ve výpočetním read-only a specializuje se na přístupy do paměti. Možná nejdůležitější je také ECC funkčnost na úrovni této cache, což je opět velmi důležité pro HPC segment, kam GK110 míří.
Nvidia krom těchto změn přidala také poměrně velký počet nových instrukcí a operací, které nyní GK110 podporuje, aby dosáhla vyššího výkonu. Můžeme jmenovat například možnost sdílení dat pro thready v rámci jednoho warpu, aniž by musely sáhnout do sdílené paměti, což dělá vše podstatně rychlejší, než v momentu, kdy musíte nahrát, sdílet a uložit data, než je použijete. Rozšíření se dočkala také instrukční sada pro FP64, kde některé operace byly v předchozí generaci dostupné pro FP32 data.
GK110 - die shot
Je škoda, že prozatím neznáme plochu samotného jádra, ale i přes 28nm výrobní proces to nebude u 7,1 mld. tranzistorů žadný drobeček. Pro srovnání, GPU AMD Tahiti (Radeon HD 7950/7970) disponuje 4,3 mld. tranzistorů a stájové GK104 (GeForce GTX 690/680/670) „pouze“ 3,5 mld. tranzistorů. Oproti procesorům (CPU) jsou GPU podstatně větší a podstatně náročnější na napájení, respektive spotřebu, ale na druhou stranu disponují u paralelních výpočtů násobně vyšším výkonem. O využití paralelních výpočetních architektur v případě akcelerace aplikací, které doposud obhospodařovaly jen tzv. general purpose procesory, se hovoří již roky.
Když jsme zmiňovali, že se Nvidia rozhodla jádro GK110 využít především v profesionálním segmentu a se herního akcelerátoru se nedočkáme, tak to ale rozhodně neznamená, že pro účely grafiky nebude určeno vůbec. Máme zde profesionální produktovou řadu Nvidia Quadro, kde se toto jádro s jistotou objeví. Pokud se podíváme na srovnání obou Keplerů z pohledu čísel, pak pro GK110 platí 15 SMX bloků s celkově 2 688 stream procesory, 6 bloky renderovacích jednotek a pro GK104 8 SMX bloků s 1 536 stream procesory a 4 bloky renderovacích jednotek. Pokud se podíváme na výkony výpočetní, pak je GK110 velmi optimalizovaná architektura Kepler, kterou známe z GK104.
Je zde ale několik rozdílů. GK104 má SMX blok, který se skládá z 192 CUDA Cores (stream procesory) pro FP32 (single precision) výpočty, 8 specializovaných FP 64 jednotek (double precision), 256kB register file, 64kB L1 cache a 48kB uniform cache. Vše je doplněno 4 warp shedulery, kde každý má své dvě dispatch jednotky. Z toho také plyne problém vysokého handicapu v případě FP64 výkonnosti.
GK110 je postaveno velmi podobně, ale několik rozdílů zde přece jen je a jsou zaměřeny především na výkonnost ve FP64. SMX blok se skládá z 192 CUDA Cores (stream procesory) pro FP32 (single precision) výpočty, 64 specializovaných FP 64 jednoetk (souble precision), 256kB register file, 64kB L1 cache a 48kB uniform cache. Větší detaily o designu prozatím nemáme, ale jasně je patrné, kde vzalo jádro GK110 takový nárůst výkonu v double precision výpočtech.
Starší generace jádra GF110 měla TLP (Thread Level Parallelisn) design a každá SM zpracovávala instrukce až ze dvou warpů současně. GK110 je naproti tomu částečně ILP (Instruction Level Parallelism), takže ve výsledku zde je výživný mix TLP a ILP v jednom čipu. Jádro dokáže zpracovat až 8 instrukcí ze 4 warpů najednou, pokud jsou pro to optimální podmínky. Sheduling je v případě GK110 svěřen software, což je velmi zajímavé, neboť vždy bylo železným pravidlem, že sheduling by v případě takto specializovaného profesionálního řešení byl ve správě hardware. K lepšímu vytížení SMX jednotek přispívá také fakt, že k FP64 instrukci může být napárována další instrukce (ještě si připomene, že GK110 má v SMX přítomny FP64 i FP32 jednotky v pomětu 1:3). Toto v případě GF110/100 možné nebylo a SMX buď prováděla FP32 nebo FP64 instrukce, nešlo tedy k FP64 napárovat jinou instrukci.
Výsledkem je, že Nvidia sice obětovala část výkonu staršího GPU GF100/110 superskalárním principem vykonávání instrukcí. Pokud se ale podíváme na věc prakticky, tak by nás ve výsledku mohlo čekat, že jádro bude po většinu času pracovat okolo svého teoretického maxima. Stěžejní je zde přesunutí k tzv. fixed latency instructions a statický plánovací kompilátor. Programátoři se ovšem nemusí bát, že budou mít na krku tyto detaily, protože o ně se stará právě kompilátor Nvidie. Co se ale týká HPC segmentu, kde se předpokládá tvorba low level kódu, tam mohou být programátoři poměrně překvapení tím, jak odlišné nové jádro oproti starší architektuře Fermi je.
Velké změny najdeme také v případě register file a L2 cache, kde samozřejmě muselo dojít ke zvýšení kapacity propustnosti oproti staršímu modelu GF100/110. SMX v případě nového jádra GK110 má k dispozici 256kB register file, kde je přítomno 65 tisíc 32bitových registrů. Srovnat si jej můžeme mezigeneračně s jádrem GF100, kde 32bitových registrů bylo při kapacitě 128 kB 32 tisíc. Rychlost přístupu k těmto registrům byla zdvojnásobena, a tak je nyní možno číst z těchto registrů podstatně rychleji než dříve. L2 cache poskočila ve své velikosti také na dvojnásobek, což činí kapacitu půl druhého megabytu. Zdvojnásobení kapacit, ale jde ale ruku v ruce s téměř dvojnásobným počtem výpočetních jednotek.
Zajímavější než srovnávání kapacit je především fakt, že Nvidia u jádra GK110 krom vyššího počtu SMX dosáhla toho, že každá z těchto částí dokáže mít přiřazeno 2 tisíce vláken, což je o 33% více než u jádra GF100. Počet vláken (thread pool) tedy není nějak zásadně větší, ale na druhou stranu každé vlákno může mít k dispozici více registrů. Jak jsme si uvedli výše, tak GK110 disponuje mnohem větším počtem registrů (65 tisíc u GK110 vs. 32 tisíc u GF100), což přepočteno na jedno vlákno znamená 255 registrů na jedno vláknu pro Keplera. Těžko lze takto posoudit přínos tohoto řešení, ale Nvidia jistě otestovala nespočet pravděpodobných scénářů a došla k závěru, že takovéto navýšení počtu registrů bude významným přínosem.
Zajímavostí, která by neměla zůstat nepovšimnuta, je změna v oblasti texturovací cache GK104, která je nyní lépe uzpůsobena využití pro výpočetní nasazení. Předešlé jádro GF100 mělo k dispozici 12KB cache pro texturovací jednotky, která byla ovšem dostupná pouze pro tyto jednotky, což tak výhodné není, pokud nehodláte akcelerovat grafiku. Programátoři ovšem často využívali tuto speciální dedikovanou cache jako datovou cache. Nvidia se rozhodla, že jim tento způsob trošku usnadní a tuto cache poněkud povýší, a to jak z hlediska funkčnosti, tak z hlediska kapacity. Nyní je k dispozici 48kB, která je ve výpočetním read-only a specializuje se na přístupy do paměti. Možná nejdůležitější je také ECC funkčnost na úrovni této cache, což je opět velmi důležité pro HPC segment, kam GK110 míří.
Nvidia krom těchto změn přidala také poměrně velký počet nových instrukcí a operací, které nyní GK110 podporuje, aby dosáhla vyššího výkonu. Můžeme jmenovat například možnost sdílení dat pro thready v rámci jednoho warpu, aniž by musely sáhnout do sdílené paměti, což dělá vše podstatně rychlejší, než v momentu, kdy musíte nahrát, sdílet a uložit data, než je použijete. Rozšíření se dočkala také instrukční sada pro FP64, kde některé operace byly v předchozí generaci dostupné pro FP32 data.