stringtranslate.com

Buffer múltiple

Los conjuntos 1 , 2 y 3 representan la operación de almacenamiento en búfer simple, doble y triple, respectivamente, con la sincronización vertical (vsync) habilitada. En cada gráfico, el tiempo fluye de izquierda a derecha. Nótese que 3 muestra una cadena de intercambio con tres búferes; la definición original de almacenamiento en búfer triple descartaría el cuadro C tan pronto como terminara el cuadro D y comenzaría a dibujar el cuadro E en el búfer 1 sin demora. El conjunto 4 muestra lo que sucede cuando un cuadro (B, en este caso) tarda más de lo normal en dibujarse. En este caso, se pierde una actualización de cuadro. En implementaciones sensibles al tiempo, como la reproducción de video, se puede descartar todo el cuadro. Con una cadena de intercambio de tres búferes en el conjunto 5 , el dibujo del cuadro B puede comenzar sin tener que esperar a que el cuadro A se copie a la memoria de video, lo que reduce la posibilidad de que un cuadro retrasado pierda su retroceso vertical.

En informática , el almacenamiento en búfer múltiple es el uso de más de un búfer para almacenar un bloque de datos , de modo que un " lector " vea una versión completa (aunque quizás antigua) de los datos en lugar de una versión parcialmente actualizada de los datos que está creando un " escritor ". Se utiliza con mucha frecuencia para imágenes de visualización de ordenadores. También se utiliza para evitar la necesidad de utilizar RAM de doble puerto (DPRAM) cuando los lectores y los escritores son dispositivos diferentes.

Descripción

Red de Petri de doble buffer

La red de Petri de la ilustración muestra un doble almacenamiento en 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 desde los búferes 1 y 2 respectivamente. Al principio, solo está habilitada la transición W1. Después de que se activa W1, tanto R1 como W2 quedan habilitados y pueden continuar en paralelo. Cuando terminan, R2 y W1 continúan en paralelo y así sucesivamente.

Después del transitorio inicial donde W1 se dispara solo, este sistema es periódico y las transiciones están habilitadas, siempre en pares (R1 con W2 y R2 con W1 respectivamente).


Red de Petri con doble amortiguación

Doble buffering en gráficos de computadora

En gráficos de computadora , el doble buffering es una técnica para dibujar gráficos que muestra menos interrupciones, cortes y otros artefactos.

Es difícil para un programa dibujar una pantalla de modo 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 de alguna manera solo los píxeles que se usan en las letras antiguas pero no en las nuevas. Sin embargo, el usuario ve esta imagen intermedia como si parpadeara . Además, los monitores de computadora redibujan constantemente la página de video visible (tradicionalmente alrededor de 60 veces por segundo), por lo que incluso una actualización perfecta puede verse momentáneamente como un divisor horizontal entre la imagen "nueva" y la imagen "antigua" no redibujada, conocido como tearing .

Doble buffer de software

Una implementación de software de doble buffering hace que todas las operaciones de dibujo almacenen sus resultados en alguna región de la RAM del sistema ; a cualquier región de este tipo se la suele llamar "buffer posterior". Cuando se consideran completas todas las operaciones de dibujo, toda la región (o solo la parte modificada) se copia en la RAM de video (el "buffer frontal"); esta copia generalmente se sincroniza con el haz de trama del monitor para evitar cortes. Las implementaciones de software de doble buffering requieren necesariamente más memoria y tiempo de CPU que el buffering simple debido a la memoria del sistema asignada para el buffer posterior, el tiempo para la operación de copia y el tiempo de espera para la sincronización.

Los administradores de ventanas de composición suelen combinar la operación de "copia" con la de " composición ", que se utiliza para posicionar ventanas, transformarlas con efectos de escala o deformación y hacer transparentes partes de ellas. De este modo, el "búfer frontal" puede contener únicamente la imagen compuesta que se ve en la pantalla, mientras que hay un "búfer posterior" diferente para cada ventana que contiene la imagen no compuesta de todo el contenido de la ventana.

Pasar la página

En el método de cambio de página, en lugar de copiar los datos, se pueden visualizar ambos búferes. En cualquier momento, el monitor muestra activamente un búfer, mientras que el otro, el búfer de fondo, se está dibujando. Cuando el búfer de fondo está completo, se intercambian los roles de los dos. El cambio de página se logra típicamente modificando un registro de hardware en el controlador de pantalla de video : el valor de un puntero al comienzo de los datos de visualización en la memoria de video.

El cambio de página es mucho más rápido que copiar los datos y puede garantizar que no se observen cortes siempre que las páginas se cambien durante el intervalo de borrado vertical del monitor (el período en blanco en el que no se dibujan datos de video). El búfer activo y visible en ese momento se denomina búfer frontal , mientras que la página de fondo se denomina búfer posterior .

Triple buffering

En el campo de los gráficos por ordenador , el triple buffering es similar al doble buffering, pero puede proporcionar un mejor rendimiento. En el doble buffering, el programa debe esperar hasta que se copie o intercambie el dibujo finalizado antes de comenzar el siguiente. Este período de espera puede ser de varios milisegundos durante los cuales no se puede tocar ninguno de los buffers.

En el caso del triple buffering, el programa tiene dos buffers traseros y puede empezar a dibujar inmediatamente en el que no está implicado en dicha copia. El tercer buffer, el buffer 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 buffer frontal se intercambia con (o se copia desde) el buffer trasero que contiene la imagen completa más reciente. Dado que uno de los buffers traseros siempre está completo, la tarjeta gráfica nunca tiene que esperar a que el software termine. En consecuencia, el software y la tarjeta gráfica son completamente independientes y pueden ejecutarse a su propio ritmo. Finalmente, la imagen mostrada se inició sin esperar a la sincronización y, por lo tanto, con un retraso mínimo. [1]

Debido a que el algoritmo de software no consulta el hardware gráfico en busca de eventos de actualización del monitor, el algoritmo 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 nuevas varias veces antes de copiarlos. Esto significa que se pueden escribir fotogramas en el búfer de respaldo que nunca se usan antes de que los sobrescriban los fotogramas sucesivos. Nvidia ha implementado este método con el nombre de "Fast Sync". [2]

Un método alternativo, a veces denominado triple buffering, es una cadena de intercambio de tres buffers de longitud. Una vez que el programa ha dibujado ambos buffers traseros, espera hasta que el primero se coloca en la pantalla, antes de dibujar otro buffer trasero (es decir, es una cola de entrada, salida de tres buffers de longitud ). La mayoría de los juegos de Windows parecen hacer referencia a este método cuando se habilita el triple buffering. [ cita requerida ]

Buffer cuádruple

El término "cuatro búferes" hace referencia al uso de un doble búfer para cada una de las imágenes del ojo izquierdo y derecho en implementaciones estereoscópicas , es decir, cuatro búferes en total (si se utilizara un triple búfer, habría seis búferes). El comando para intercambiar o copiar el búfer normalmente se aplica a ambos pares a la vez, por lo que en ningún momento un ojo ve una imagen más antigua que el otro.

El almacenamiento cuádruple requiere un soporte especial en los controladores de la tarjeta gráfica, que está deshabilitado para la mayoría de las tarjetas de consumo. La serie Radeon HD 6000 de AMD y las más nuevas lo admiten. [3]

Los estándares 3D como OpenGL [4] y Direct3D admiten el almacenamiento en búfer cuádruple.

Doble buffer para DMA

El término doble buffering se utiliza para copiar datos entre dos buffers 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 (especialmente dispositivos de 32 bits en sistemas con direccionamiento más amplio proporcionado a través de la extensión de dirección física ). [5] Los controladores de dispositivos de DOS y Windows son un lugar donde es probable que se utilice el término "doble buffering". El código fuente de Linux y BSD los llama "buffers de rebote". [6]

Algunos programadores intentan evitar este tipo de doble almacenamiento en búfer con técnicas de copia cero .

Otros usos

El doble buffering también se utiliza como técnica para facilitar el entrelazado o desentrelazado de señales de vídeo.

Véase también

Referencias

  1. ^ "Triple Buffering: Por qué nos encanta". AnandTech. 26 de junio de 2009. Consultado el 16 de julio de 2009 .
  2. ^ Smith, Ryan. "Revisión de las NVIDIA GeForce GTX 1080 y GTX 1070 Founders Edition: el inicio de la generación FinFET" . Consultado el 1 de agosto de 2017 .
  3. ^ Comunidad AMD [ enlace roto ]
  4. ^ "Especificación OpenGL 3.0, Capítulo 4" (PDF) .
  5. ^ "Extensión de dirección física - Memoria PAE y Windows". Microsoft Windows Hardware Development Central. 2005. Consultado el 7 de abril de 2008 .
  6. ^ Gorman, Mel. "Comprensión del administrador de memoria virtual de Linux, búferes de rebote 10.4".

Enlaces externos