GTC: Nvidia enthüllt die Architektur der nächsten GPU-Generation

Mehr als achtmal schneller bei doppeltgenauen Gleitkommaoperationen - das ist eines der herausragenden Features der nächsten Nvidia-GPU-Generation, die sich im Bereich High Performance Computing nunmehr Fermi statt Tesla nennt.

In Pocket speichern vorlesen Druckansicht 172 Kommentare lesen
Lesezeit: 7 Min.
Von
  • Andreas Stiller

Einer von 16 Streaming Multiprozessoren des Chips, mit 32 SP-Cores und 4 Special Function Units - oder 16 DP-Gleitkommaeinheiten

Auf der ab dem heutigen Mittwoch in San Jose (US-Bundesstaat Kalifornien) tagenden dreitägigen GPU Tech Conference stellt Nvidia die neue G(F)300-Architektur für DirectX 11, OpenGL 3.1, OpenCL 1.1 und CUDA 3.0 vor. Es soll ein 3-Milliarden-Transistor-Chip werden (TSMC 40 nm), der die 2,15 Milliarden von AMD/ATI (und die 2,05 Milliarden von Intel Tukwila) allein schon bei der Anzahl der Transistoren in den Schatten stellt. Anders als Konkurrent AMD/ATI hat Nvidia in der jüngsten Chip-Generation nicht nur die Zahl der Recheneinheiten mehr als verdoppelt, sondern auch die Architektur komplett umgekrempelt. Insbesondere für den Betrieb als Numbercruncher im High-Performance-Computing brachte Nvidia zahlreiche Verbesserungen ein.

Der Tesla-Nachfolger wird unter dem Namen Fermi mit einer Gleitkomma-Performance (FMA, Fused Multiply-Add) aufwarten, die bei gleichem Takt um mehr als Faktor acht höher ist. Statt einer Double-Precision-Einheit pro Stream-Multiprocessor (SM) sind es nun derer vier, wobei die Hardware von zwei mit Single Precision rechnenden Cores (ehemals Streaming Processor genannt) zusammengeschaltet werden. Ein Fermi-Chip enthält 16 SMs (zuvor 30), aber jeder SM enthält nun 32 Cores (früher waren es 8 SPs), sodass die Zahl der skalaren SP-Recheneinheiten auf 512 steigt (von 240 zuvor). Konkurrent ATI hat demgegenüber in der neuen RV8xx-Architektur 1600 einzelne SP-Recheneinheiten, die zu fünft zu 320 SIMD-Einheiten zusammengeschaltet sind. Bezogen auf doppeltgenaue FMA-Einheiten sind es jetzt bei Fermi 256 (Tesla: 30) gegenüber AMD/ATI mit 320.

Bei gleichem Takt wie die Tesla C1060 müsste die theoretische Spitzenleistung (FMA) bei 2 Teraflop/s (SP) und 630 GFlop/s (DP) liegen, gegenüber 933 GFlop/s (SP) und 75 GFlop/s (DP) der C1060 und 2,7 Teraflop/s (SP) sowie 544 GFlops/s (DP) bei AMDs Radeon HD5870. Das sind aber zum Teil reichlich schöngerechnete theroretische Werte (mit drei Flops/SP/Takt bei Nvidia SP, inklusive der Special Function Units), die echte erzielbare SGEMM/DGEMM-Leistung liegt zumeist deutlich darunter.

Wichtiger aber noch als die pure Anzahl von Recheneinheiten ist indes die Fähigkeit, möglichst schnell an die benötigten Daten zu kommen. Dafür bieten die GPUs mehrstufige Konzepte mit Caches, kleinen lokalen gemeinsamen Speichern, schnellen GDDRx-Kartenspeichern über viele Speicherkanäle und mit DMA-Transfer-Einheiten hin zum Hauptspeicher. Hier hat sich bei Nvidia viel geändert.

In der Nvidia-Vorgängerarchitektur G(T)200 waren drei SMs zu einem Thread-Cluster zusammengeschaltet, der einen kleinen Write-Though-Cache von 24 KByte besaß. Jede SM hatte zudem noch einen gemeinsamen lokalen Speicher von 16 KByte. Nun jedoch teilen sich die SMs einen 768 KByte großen L2-Cache (Write-Back).

Jede der 16 SMs enthält Instruktions-Cache, Dekoder, Scheduler, Dispatcher und Registersatz für zwei Pipelines, die die 32 Recheneinheiten, sowie vier Special Function Units (SFU) versorgen. Die SFUs kümmern sich um Inversion-, Inverse-Wurzel-, Logarithmus-, Exponentiation-, Sinus- und Cosinus-Funktionen die weitgehend über Tabellen und quadratische Interpolation voll pipelined berechnet werden.

Hinzu kommt pro SM ein gemeinsamer lokaler Speicher von 64 KByte, der sich ganz oder teilweise auch als L1-Cache konfigurieren lässt, zum Beispiel 48 KByte als gemeinsamer Speicher und 16 KByte als L1-Cache. In dieser Konfiguration soll Radix Sort um Faktor 4,7 schneller laufen als zuvor auf Tesla.

Der Speicher ist über sechs GDDR5-Speicherkanäle (zwei mehr als bei ATI RV8xx) angekoppelt. Statt einer DMA-Engine verfügt die neue Architektur über zwei, die überlappend arbeiten können. Das Adressiermodell wurde von 32 Bit auf 64 Bit (theoretisch, faktisch derzeit auf 40 physische und virtuelle Bits beschränkt) aufgebohrt, um mehr als 4 GByte Speicher ansprechen zu können.

Mehr Speicherkapazität war vor allem ein Wunsch aus der HPC-Welt. Ebenso der fehlerkorrigierende ECC-Schutz, um die Zuverlässigkeit des Rechenbeschleunigers zu erhöhen. Nvidia hat für den Speicher, aber auch für die internen Busse und Caches ECC vorgesehen, wird das aber vermutlich nur für die Fermi-, aber nicht für die GeForce-Linie nutzen, denn ECC erfordert nicht nur mehr Speicherbits, sondern kostet auch etwas Performance.

Wichtig für die Performance im Rechenbetrieb ist zudem, dass, wie von DirectCompute und OpenCL für Multithreading-Betrieb gefordert, nun auch einzelne Rechenprozeduren (sogenannte Kernels) parallel ausgeführt werden können, wenn ein Kernel nur einen Teil der Hardware-Ressourcen ausnutzt. Ein SM muss immer den gleichen Code ausführen, so dass maximal 16 Kernels gleichzeitig auf Fermi laufen können. Bei ATI ist in den Unterlagen dazu nichts zu finden, aber AMD/ATIs technische Marketing-Leiterin fürs High Performance Computing versicherte gegenüber heise online, dass auch die RV800 mit parallel laufenden Kernels arbeiten kann. Bislang mussten diese hier wie dort einzeln nacheinander ausgeführt werden. Sie werden dabei auf größere Thread-Bündel verteilt (Warps mit 32 Threads bei Nvidia, Wavefronts mit 64 Threads bei ATI). Im Grafikbetrieb sind die Kernels typischerweise groß genug, um die ganze Hardware auszulasten. Nvidias "GigaThread-3.0-Engine" arbeitet zudem mit zwei Warp Schedulers und kann zehnmal schneller den Kontext wechseln als die GT200.

Nvidia änderte auch die Integer-Einheiten, die jetzt volle 32 Bit (zuvor nur 24 Bit) aufweisen. Daher dürften ältere Programme nur bedingt und mit Performanceverlust lauffähig sein, sie sollten mit der neuen CUDA-3.0-Version samt ptx-Assembler neu kompiliert werden. CUDA 3.0 unterstützt jetzt auch C++ (mit kleineren Ausnahmen) mit Objekten und Exception-Handling. Fortran, Java und Python für CUDA sind in Arbeit. Die Hardware kann jetzt auch mit Breakpoints arbeiten, was das Debugging erheblich erleichtert. Ob der neue Debugger Nexus, der sich in Microsofts Visual Studio 2005/8 einklinken kann, auch Disassemblieren soll, wird bei Nvidia derzeit noch diskutiert.

Der Haupt-Unterschied zum Konkurrenten AMD/ATI ist jedoch, dass dieser rechtzeitig zum Windows-7-Start mit DirectX-11-fähigen Grafikkarten aufwarten kann, während Nvidia nach eigenen Aussagen mindestens noch bis Jahresende braucht, bis erste Karten verfügbar sind. Wahrscheinlich wird es noch erheblich länger dauern, denn Tape-Out des gigantischen Chips war gemäß semiaccurate.com erst Mitte Juli und erfahrungsgemäß dauert es dann meist länger als ein halbes Jahr, bis ausgereifte Produkte auf den Markt kommen können. Da hat AMD/ATI also ein großes Zeitfenster.

Soweit die wichtigsten vorab mitgeteilten Informationen zum Rechenbetrieb der neuen GPU-Architektur, weitere Neuigkeiten zum Grafikbetrieb werden folgen. Mehr dazu in der nächsten c't 22/09 ab Montag dem 12. Oktober 2009 im Handel. (as)