Nvidias Fermi-GPU: 3 Milliarden Transistoren und 512 Kerne

Nvidia versteht seine aktuelle Ankündigung als "reinen Technologie Launch" , einen Termin für Karten der Reihen Geforce, Quadro und Tesla gibt es noch nicht. In den vorab zur Verfügung gestellten Unterlagen ist auch von Spielen nicht die Rede, vielmehr stellt der Chiphersteller die Verbesserungen der Architektur in Bezug auf Rechenanwendungen heraus. Darauf deutet schon der neue Codename hin, der nach dem Physik-Nobelpreisträger Enrico Fermi(öffnet im neuen Fenster) gewählt wurde.
Während AMD sich beim RV870 alias Cypress alias Radeon 5800 im Wesentlichen darauf beschränkte, alle Funktionseinheiten zu verdoppeln, hat Nvidia die Struktur seiner GPU im Vergleich zum GT200 deutlich umgestrickt.
Mehr als verdoppelt wurden die einzelnen Streamingkerne, und zwar von 240 auf 512 Einheiten. Wie bei allen modernen GPUs können sie nur selten unabhängig voneinander arbeiten, wofür sich Nvidia nun einen neuen Namen hat einfallen lassen. Für echte SIMD-Aufgaben müssen mehrere Kerne gekoppelt werden, eine solche Gruppe nennt Nvidia nun "Streaming Multiprocessor" oder SM – nicht zu verwechseln mit "Shader Model" oder anderen Aufschlüsselungen dieser Abkürzung.
32 der einzelnen Kerne bilden einen SM, womit sich 16 der SIMD-Einheiten ergeben. Beim GT200 arbeiteten noch nur acht der Cores in einem Block zusammen, was vor allem Berechnungen mit doppelter Genauigkeit bremste. In diesem Punkt will Nvidia nun die Leistung mit Fermi gegenüber dem GT200 verachtfacht haben.
Konkrete Zahlen zur erreichbaren Leistung hat Nvidia noch nicht verraten, aber einige Anwendungsbeispiele gezeigt. So soll eine Matrizenmultiplikation mit doppelter Genauigkeit viermal schneller als auf einem GT200 laufen, was überschlagsmäßig eine Rechenleistung im Bereich von 4 Teraflops und damit wiederum das Doppelte eines RV870 bedeuten würde.
Neben den SMs, die frei programmierbar sind, gibt es auch noch vier Funktionseinheiten mit fest verdrahteten Funktionen, in den Diagrammen sind sie als "SFU" bezeichnet. Nvidia nennt hier Sinus, Cosinus, Kehrwert und Quadratwurzel, es soll aber noch weitere geben. Da der Chiphersteller bisher keinerlei für DirectX-11 nötige Funktionen wie die Tesselation beschreibt, ist nur zu vermuten, dass die SFUs auch dafür eingesetzt werden können.
Jeder SMs steht ein "Shared Memory" von 64 KByte zur Verfügung, insgesamt also 1 MByte. Dieser Speicher, vermutlich als SRAM ausgeführt, kann auch als L1-Cache für die SMs verwendet werden, und zwar je 48 oder 16 KByte groß. Der Rest des gemeinsam genutzten Speichers dient, ähnlich einem L3-Cache in einer modernen CPU, zur Kommunikation der Kerne untereinander. Wie bei einem Crossbar sitzt das Shared Memory in der Mitte des Chips.
Das Speichermodell, das die GPU verwalten kann, kennt nun nicht mehr nur Unterscheidungen zwischen verschiedenen Allozierungsarten, sondern auch die Form "Global". Der gesamte Speicher kann damit Anwendungen zur Verfügung stehen, was eine Voraussetzung für Sprachen wie C++ ist.
Ebenfalls auf Rechenanwendungen zielen zwei Bereiche der Fermi-Architektur, die sich um die Threadverwaltung kümmern. In Hardware ausgeführt ist der neue Scheduler, den Nvidia "GigaThread" nennt – den Namen hat man sich auch gleich schützen lassen. Er ist doppelt ausgeführt und verteilt die Aufgaben an die SMs.
Dabei bekommt er jedoch Hilfe von einer Software namens "Parallel Thread eXecution" oder PTX. Sie stellt eine virtuelle Maschine dar, welche die Aufgaben direkt aus der Anwendung aufteilt. PTX-Befehle sollen sich in Anwendungen direkt einbauen, aber auch über Bibliotheken aufrufen lassen. Der Treiber der GPU wickelt sie dann ab, quasi als eine Art Präprozessor.
PTX soll unabhängig von Hochsprachen wie C, C++ und Fortran arbeiten und über mehrere GPU-Generationen stabil bleiben. Dank der PTX-Befehle sollen Anwendungen auch gut mit GPUs skalieren, die nicht so viele Kerne wie die bisher genannten 512 Einheiten des Fermi haben – traditionell verringert Nvidia bei kleineren GPUs deren Anzahl.
Um die Programmierung weiter zu vereinfachen, will Nvidia mit Fermi auch die Entwicklungsumgebung "Nexus" einführen. Sie klinkt sich in Microsofts Visual Studio ein, ist also zunächst für Windows-Anwendungen vorgesehen. Nexus soll das Debuggen von GPU-Code samt Breakpoints und Speichermonitor ermöglichen, und auch das Verhalten von Threads visualisieren können. Nvidias Beschreibungen erinnern hier sehr an Intels Entwicklungswerkzeuge wie vTune.
Wann man das alles nutzen kann, verrät Nvidia jedoch noch nicht – 2009 dürfte es nicht mehr so weit sein, wenn man Quellen aus der Hardwarebranche glauben darf. Vielfach geäußert wird dort auch, dass AMD mit seinem RV870 – der bisher aber vor allem durch Spieleleistung glänzen kann – sechs Monate Vorsprung vor Nvidia habe. Mit der Unterstützung von C++ hat Nvidia nun aber nach der Papierform des Fermi zu urteilen ein wichtiges Argument für seine Produkte bei Rechenanwendungen geschaffen. Das Zeitfenster für das herstellerübergreifende OpenCL oder DirectX-Compute könnte damit im professionellen Bereich enger werden als bisher gedacht.