home
2.) Speicherbandbreite

Wie bei dem Bild mit den 3 Kisten erwähnt benötigt ein immediate renderer á la Geforce oder Radeon mehr Speicherbandbreite als ein tiler. Was ist das und wieso ist das so ?

Zunächst definieren wir die Speicherbandbreite. Sie gibt an, wie hoch der maximale Datendurchsatz des lokalen Grafikkartenspeichers ist.

Speicherbausteine verfügen über ein 128 bit breites Interface - d.h. sie können 128 bit pro Takt übertragen. Diesen Wert multipliziert man mit der Taktfrequenz des Speichers. Die 175 MHz SDRAM einer KYRO II - Karte z.B. besitzen somit eine maximale Speicherbandbreite von 2,8 Gigabyte/sec:

128 (bit) * 175 (MHz) = 22400 bit/sec / 8 (für ein byte) = 2,8 GByte/sec.

(Dieser Wert ist jedoch nur theoretisch, da etwa 20% der Takte für die Übertragung von Adressen und Schreibvorgänge benutzt werden - somit bleiben effektiv etwa 2,24 GByte/sec. übrig).

Bei dem auf den immediate renderern meistens verwendete DDRAM werden pro Takt 2x Daten übertragen. Demnach besitzt eine GeForce3 Karte mit 230 MHz DDRAM eine Bandbreite von 7,3 GByte/sec:

128 (bit) * 230 (MHz) * 2 = 58880 bit/sec. / 8 = 7,36 GByte/sec.

Die höhere Bandbreite beim Geforce3 klingt überwältigend - der Schein trügt jedoch: Durch den Overdraw von 2,5 müssen alle Zugriffe vom und zum Grafikkartenspeicher zweieinhalb mal so oft erfolgen wie beim KYRO um das gleiche Resultat zu erzielen. Das läßt den Umkehrschluß zu, daß der normale SDRAM auf einer KYRO II mit 2,5 multipliziert werden könnte um darzulegen, welche enorme Einsparung mit einem tile based renderer erzielt wird: Der KYRO II käme somit auf 7 GByte/sec !


Nun ein Rechenbeispiel das verdeutlicht, daß selbst die enorme Bandbreite einer GeForce3-Grafikkarte knapp werden kann:

Annahme:
Bildschirmauflösung: 1024x768
Farbtiefe: 32 bit (somit ein 32 bit Z-buffer)
Filterung: trilinear (Mittelwertbildung aus 2 MipMap Texturen)
Framerate: 50 fps
Bildwiederholrate: 85 Hz
Overdraw von 2,5

1.) Framebuffer schreiben: 3 MByte/sec.
(1024 * 768 * 32 = 25165824 (bit) / 8 = 3145728 / 1024 (byte)=
3 MByte/sec.)

2.) Z-Buffer schreiben/auslesen: 3 MByte/sec.
(1024 * 768 * 32 = 25165824 (bit) / 8 = 3145728 / 1024 (byt
e)= 3 MByte/sec.)

3.) Texturen auslesen: 24 MByte/sec.
(8 Texel pro Pixel = 25165824 (bit) / 1024 (byte) = 24,576 byte = 24 MByte/sec

4.) Framebuffer auslesen: (kein Overdraw mehr): 3 MByte/sec.
1024 * 768 * 32 / 8
= 3 MByte/sec.

Dadurch ergibt sich:
(3 + 3 + 24) * 2,5 (Overdraw) * 50 (fps) =
3750 MByte/sec.
zuzüglich des auszulesenden framebuffers (3 MByte * 85 Hz) =
255 MByte/sec.

= 4005 MByte/sec.

Die maximale Bandbreite einer Geforce3-Karte von 7,3 GByte/sec. langt bei 50 fps. Höhere Bildraten sind jedoch meistens der Fall - und auch erwünscht. Zudem zehren zusätzliche Filterungen und mehr Texturen an der Speicherbandbreite.
Und es zeigt, warum ein immediate renderer zwangsläufig DDRAM zur Seite haben muß.

faq:

faq
artikel
Bandbreite des
Speichers
downloads
PVR Chips
links
email