
En informática , el almacenamiento en búfer múltiple consiste en utilizar más de un búfer para almacenar un bloque de datos , de modo que un lector vea una versión completa (aunque posiblemente antigua) de los datos en lugar de una versión parcialmente actualizada creada por un escritor . Se utiliza con mucha frecuencia para las imágenes de las pantallas de ordenador. También se emplea para evitar la necesidad de usar memoria RAM de doble puerto (DPRAM) cuando los lectores y escritores son dispositivos diferentes.
Descripción
Red de Petri con doble búfer
La red de Petri de la ilustración muestra un sistema de doble búfer. Las transiciones W1 y W2 representan la escritura en los búferes 1 y 2, respectivamente, mientras que R1 y R2 representan la lectura de los búferes 1 y 2, respectivamente. Al principio, solo la transición W1 está habilitada. Tras activarse W1, R1 y W2 se habilitan y pueden ejecutarse en paralelo. Cuando finalizan, R2 y W1 se ejecutan en paralelo, y así sucesivamente.
Tras el transitorio inicial en el que W1 se activa solo, este sistema es periódico y las transiciones se habilitan, siempre en pares (R1 con W2 y R2 con W1 respectivamente).

Doble búfer en gráficos por computadora
En gráficos por computadora , el doble búfer es una técnica para dibujar gráficos que muestra menos interrupciones, desgarros y otros artefactos.
Para un programa, es difícil dibujar una pantalla de forma que los píxeles no cambien más de una vez. Por ejemplo, al actualizar una página de texto, es mucho más fácil borrar toda la página y luego dibujar las letras que borrar solo los píxeles que se usan en las letras antiguas pero no en las nuevas. Sin embargo, esta imagen intermedia es percibida por el usuario como un parpadeo . Además, los monitores de computadora redibujan constantemente la página de video visible (tradicionalmente unas 60 veces por segundo), por lo que incluso una actualización perfecta puede ser visible momentáneamente como una división horizontal entre la imagen "nueva" y la imagen "antigua" sin redibujar, lo que se conoce como desgarro .
Doble búfer de software
Una implementación de software de doble búfer hace que todas las operaciones de dibujo almacenen sus resultados en una región de la RAM del sistema ; esta región se suele denominar "búfer trasero". Cuando se consideran completas todas las operaciones de dibujo, la región completa (o solo la parte modificada) se copia en la RAM de vídeo (el "búfer delantero"); esta copia suele estar sincronizada con el haz de trama del monitor para evitar el desgarro de la imagen. Las implementaciones de software de doble búfer requieren necesariamente más memoria y tiempo de CPU que el búfer simple debido a la memoria del sistema asignada al búfer trasero, el tiempo de la operación de copia y el tiempo de espera para la sincronización.
Los gestores de ventanas con composición suelen combinar la operación de "copia" con la de " composición ", que se utiliza para posicionar ventanas, transformarlas con efectos de escalado o deformación y hacer que algunas partes sean transparentes. De este modo, el "búfer frontal" puede contener únicamente la imagen compuesta que se ve en la pantalla, mientras que existe un "búfer posterior" diferente para cada ventana, que contiene la imagen sin componer de todo el contenido de la ventana.
pasar de página
En el método de inversión de página, en lugar de copiar los datos, ambos búferes pueden visualizarse simultáneamente. En cada momento, un búfer se muestra activamente en el monitor, mientras que el otro, el búfer de fondo, se está dibujando. Cuando el búfer de fondo se completa, se intercambian las funciones de ambos. La inversión de página se suele lograr modificando un registro de hardware en el controlador de la pantalla de vídeo : el valor de un puntero al inicio de los datos de visualización en la memoria de vídeo.
El cambio de página es mucho más rápido que la copia de datos y garantiza que no se produzcan cortes siempre que las páginas se cambien durante el intervalo de borrado vertical del monitor , es decir, el período en blanco en el que no se dibujan datos de vídeo. El búfer activo y visible se denomina búfer frontal , mientras que la página de fondo se denomina búfer posterior .
Triple búfer
En gráficos por computadora , el triple búfer es similar al doble búfer, pero puede ofrecer un rendimiento mejorado. En el doble búfer, el programa debe esperar a que el dibujo finalizado se copie o se intercambie antes de comenzar el siguiente. Este período de espera puede ser de varios milisegundos, durante los cuales no se puede acceder a ninguno de los búferes.
En el triple búfer, el programa dispone de dos búferes de respaldo y puede comenzar a dibujar inmediatamente en el que no esté involucrado en dicha copia. El tercer búfer, el búfer frontal, es leído por la tarjeta gráfica para mostrar la imagen en el monitor. Una vez que la imagen se ha enviado al monitor, el búfer frontal se intercambia (o se copia) con el búfer de respaldo que contiene la imagen completa más reciente. Dado que uno de los búferes de respaldo siempre está completo, la tarjeta gráfica nunca tiene que esperar a que el software finalice. En consecuencia, el software y la tarjeta gráfica son completamente independientes y pueden funcionar a su propio ritmo. Finalmente, la imagen mostrada se inició sin esperar a la sincronización y, por lo tanto, con un retardo mínimo. [ 1 ]
Debido a que el algoritmo de software no consulta el hardware gráfico para detectar eventos de actualización del monitor, puede dibujar continuamente fotogramas adicionales tan rápido como el hardware pueda renderizarlos. Para los fotogramas que se completan mucho más rápido que el intervalo entre actualizaciones, es posible reemplazar los fotogramas de un búfer de respaldo con iteraciones más recientes varias veces antes de copiarlos. Esto significa que se pueden escribir fotogramas en el búfer de respaldo que nunca se utilizan antes de ser sobrescritos por fotogramas sucesivos. Nvidia ha implementado este método bajo el nombre de "Fast Sync". [ 2 ]
Un método alternativo, a veces denominado triple búfer, consiste en una cadena de intercambio de tres búferes. Tras dibujar ambos búferes de respaldo, el programa espera a que el primero se muestre en pantalla antes de dibujar otro (es decir, se trata de una cola de tres búferes con el principio FIFO ). La mayoría de los juegos de Windows parecen utilizar este método al habilitar el triple búfer.
Almacenamiento en búfer cuádruple
El término "cuádruple búfer" se refiere al uso de doble búfer para cada una de las imágenes del ojo izquierdo y derecho en implementaciones estereoscópicas , lo que resulta en un total de cuatro búferes (si se utilizara triple búfer, serían seis ). El comando para intercambiar o copiar el búfer generalmente se aplica a ambos pares a la vez, de modo que en ningún momento un ojo ve una imagen más antigua que el otro.
El almacenamiento en búfer cuádruple requiere soporte especial en los controladores de la tarjeta gráfica, el cual está deshabilitado en la mayoría de las tarjetas de consumo. Las tarjetas Radeon HD 6000 Series y posteriores de AMD lo admiten. [ 3 ]
Los estándares 3D como OpenGL [ 4 ] y Direct3D admiten el almacenamiento en búfer cuádruple.
Doble búfer para DMA
El término doble búfer se utiliza para la copia de datos entre dos búferes para transferencias de acceso directo a memoria (DMA), no para mejorar el rendimiento, sino para cumplir con los requisitos de direccionamiento específicos de un dispositivo (en particular, dispositivos de 32 bits en sistemas con direccionamiento más amplio proporcionado mediante la Extensión de Dirección Física ). [ 5 ] Los controladores de dispositivos de Windows son un lugar donde es probable que se utilice el término "doble búfer". El código fuente de Linux y BSD los denomina "búferes de rebote". [ 6 ]
Algunos programadores intentan evitar este tipo de doble búfer mediante técnicas de copia cero .
Otros usos
El doble búfer también se utiliza como técnica para facilitar el entrelazado o desentrelazado de señales de vídeo.
Véase también
Referencias
- ↑ "Triple Buffering: Por qué nos encanta" . AnandTech. 26 de junio de 2009. Consultado el 16 de julio de 2009 .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ Smith, Ryan. "Análisis de las ediciones Founders de NVIDIA GeForce GTX 1080 y GTX 1070: El comienzo de la generación FinFET" . Archivado del original el 23 de julio de 2016. Consultado el 1 de agosto de 2017 .
- ↑ Comunidad AMD
- ↑ "Especificación de OpenGL 3.0, Capítulo 4" (PDF) .
- ↑ "Extensión de dirección física: memoria PAE y Windows" . Centro de desarrollo de hardware de Microsoft Windows. 2005. Consultado el 7 de abril de 2008 .
- ↑ Gorman, Mel. "Comprensión del administrador de memoria virtual de Linux, 10.4 Búferes de rebote" .
Enlaces externos
- Triple buffering: mejora el rendimiento de tus juegos de PC gratis por Mike Doolittle (24/05/2007)
- Gráficos 10 Archivados el 18/08/2016 en Wayback Machine
- Algoritmos de gráficos por computadora
- Procesamiento de imágenes
- redes de Petri