Doppelpufferung

Doppelpufferung (englisch double buffering) ist ein Verfahren der Computergrafik, bei dem ein Datenpuffer, der gleichzeitig beschrieben und gelesen wird, doppelt ausgeführt ist, um gegenseitige Störungen zu vermeiden.

Funktionsweise in der Festplattentechnik

Bei einer Umdrehung der Festplatte wird die ganze Datenspur auf einmal in den Pufferspeicher geschrieben. Während der Inhalt dieses Pufferspeichers gerade zum Hauptspeicher übertragen wird, kann der andere Puffer wiederum mit Daten von der Festplatte gefüllt werden. Gäbe es nur einen Puffer und würde dessen Inhalt gleichzeitig zum Hauptspeicher übertragen, würden die Daten inkonsistent. Double Buffering ist hier also funktionsrelevant.

Funktionsweise bei der Bildausgabe

Der Framebuffer (Bildspeicher) des Video-RAM einer Grafikkarte wird in zwei Bereiche unterteilt. Ziel des Verfahrens ist die Gewährleistung einer kontinuierlichen Bildfrequenz ohne Flackern.

Bevor Doppelpufferung eingeführt wurde, unterteilte man den Framebuffer nicht. Bildberechnung und Monitorausgabe fanden also parallel statt. Damit schwankte die Bildfrequenz je nach Szenenkomplexität und das Bild flackerte. Das entsteht, wenn während der Ausgabe noch in den gleichen Framebuffer geschrieben wird.

Der Framebuffer des Grafikkartenspeichers wird in Front- und Backbuffer unterteilt. Während durch den RAMDAC der Frontbuffer ausgelesen und auf dem Bildschirm dargestellt wird, berechnet die GPU im Backbuffer das nächstfolgende Bild. Nach Abschluss dieser Berechnung ist die Ausführung des Swap-Befehls – das ist die Vertauschung der Speicheradressen von Front- und Backbuffer (Page Flip) – abhängig von VSync.

  • Bei deaktiviertem VSync wird der Tausch sofort vollzogen, unabhängig davon, wie weit der RAMDAC mit der Bilddarstellung aus dem Frontbuffer ist. Der Bildaufbau beginnt aber nicht von vorn – er fährt an der Stelle fort, wo er vor dem Puffertausch aufgehört hat. Das führt dazu, dass ein auf dem Monitor dargestelltes Bild zum Teil aus mehreren aufeinanderfolgenden Teilbildern zusammensetzt ist. Diesen Effekt nennt man Tearing.
  • Bei aktiviertem VSync wird mit dem Vertauschen solange gewartet, bis der RAMDAC die Darstellung des aktuellen Bildes aus dem Frontbuffer beendet hat. Dies wird mit dem VSync-Signal angezeigt. In der Zwischenzeit kann keine neue Bildberechnung stattfinden, weil die Ergebnisse in keinem freien Puffer abgelegt werden können. Damit wird die Leistungsfähigkeit der Grafikkarte künstlich reduziert. Dieses Problem wird bei der Dreifachpufferung (triple buffering) durch Einführung eines weiteren Backbuffers kompensiert.

Nach Ausführung des Swap-Befehls (dem Tausch von Front- und Backbuffer) beginnt der ganze Zyklus wieder von vorn.

Vor- und Nachteile von Doppelpufferung

Vorteile

  • Flüssiger und ruckelfreier Bildaufbau
  • Geringere Latenz als bei Drei- oder Vierfachpufferung

Nachteile

  • deaktiviertes VSync führt zu Tearing, insbesondere wenn die Bildwiederholrate des Monitors niedrig ist, die Grafikkarte jedoch eine hohe Framerate erreicht
  • Aktiviertes VSync führt zum Teil zu hohem Leistungsverlust
  • Doppelte Framebuffergröße gegenüber einfacher Pufferung

Einsatz in Microsoft Windows

Wenn in Windows ab Vista das Windows Aero Skin ausgewählt wurde, nutzt der Desktop Window Manager standardmäßig die doppelte Pufferung, um Tearing zu verhindern.[1][2]

Wechselpuffertechnik

In anderen Bereichen (vor allem in Echtzeit-Anwendungen) wird die Doppelpufferung als Wechselpuffertechnik bezeichnet. Ein Wechselpuffer entspricht einem Ringpuffer mit zwei Plätzen (Erzeuger-Verbraucher-Problem).

Einzelnachweise

  1. Das Windows Aero-Feature nutzt doppelte Pufferung zum Zeichnen auf dem Bildschirm.
  2. http://blogs.msdn.com/b/greg_schechter/archive/2006/03/19/555087.aspx The DWM avoids window tearing during refresh