stringtranslate.com

Almacenamiento en búfer 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. Tenga en cuenta que 3 muestra una cadena de intercambio con tres buffers; la definición original de almacenamiento en búfer triple descartaría el cuadro C tan pronto como finalice 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 del marco. En implementaciones urgentes, como la reproducción de vídeo, es posible que se elimine todo el fotograma. Con una cadena de intercambio de tres buffers en el conjunto 5 , el dibujo del fotograma B puede comenzar sin tener que esperar a que el fotograma A se copie en la memoria de vídeo, lo que reduce la posibilidad de que un fotograma 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 contener 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 se están procesando. creado por un " escritor ". Se utiliza muy comúnmente para imágenes de visualización de computadora. También se utiliza para evitar la necesidad de utilizar RAM de doble puerto (DPRAM) cuando los lectores y escritores son dispositivos diferentes.

Descripción

Red de Petri de doble amortiguación

La red de Petri en la ilustración muestra un doble buffer. Las transiciones W1 y W2 representan la escritura en el buffer 1 y 2 respectivamente, mientras que R1 y R2 representan la lectura del buffer 1 y 2 respectivamente. Al principio sólo está habilitada la transición W1. Después de que se activa W1, R1 y W2 están habilitados y pueden continuar en paralelo. Cuando terminan, R2 y W1 proceden en paralelo y así sucesivamente.

Después del transitorio inicial en el que W1 se activa 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 de doble amortiguación

Doble buffer en gráficos por computadora

En gráficos por computadora , el doble buffer es una técnica para dibujar gráficos que muestra menos tartamudeo, desgarro 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 algún modo sólo los píxeles que se utilizan en las letras antiguas pero no en las nuevas. Sin embargo, el usuario ve esta imagen intermedia como parpadeante . 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 ser visible momentáneamente como un divisor horizontal entre la imagen "nueva" y la imagen "antigua" no redibujada. conocido como desgarro .

Software de doble buffer

Una implementación de software de doble buffer hace que todas las operaciones de dibujo almacenen sus resultados en alguna región de la RAM del sistema ; Cualquier región de este tipo a menudo se denomina "búfer de reserva". Cuando todas las operaciones de dibujo se consideran completas, toda la región (o sólo la parte modificada) se copia en la RAM de vídeo (el "búfer frontal"); Esta copia suele estar sincronizada con el haz rasterizado del monitor para evitar roturas. Las implementaciones de software de almacenamiento en búfer doble necesariamente requieren más memoria y tiempo de CPU que el almacenamiento en búfer único debido a la memoria del sistema asignada para el búfer de reserva, el tiempo para la operación de copia y el tiempo de espera para la sincronización.

Los administradores de ventanas de composición a menudo combinan la operación de "copiar" con la " composición " utilizada para posicionar ventanas, transformarlas con efectos de escala o deformación y hacer que algunas partes sean transparentes. Por lo tanto, el "búfer frontal" puede contener sólo 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 página

En el método de cambio de página, en lugar de copiar los datos, se pueden mostrar ambos buffers. En cualquier momento, el monitor muestra activamente un búfer, mientras que el otro búfer de fondo se dibuja. Cuando se completa el búfer de fondo, se intercambian los roles de los dos. El cambio de página generalmente se logra modificando un registro de hardware en el controlador de visualización 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 verán 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 extraen datos de vídeo. El búfer actualmente activo y visible se llama búfer frontal , mientras que la página de fondo se llama búfer posterior .

Amortiguador triple

En gráficos por computadora , el almacenamiento en búfer triple es similar al almacenamiento en búfer doble, pero puede proporcionar un rendimiento mejorado. En el almacenamiento en búfer doble, el programa debe esperar hasta que el dibujo terminado se copie o intercambie antes de comenzar el siguiente dibujo. Este período de espera podría ser de varios milisegundos durante los cuales no se puede tocar ninguno de los buffers.

En el almacenamiento en búfer triple, el programa tiene dos búferes de respaldo y puede comenzar inmediatamente a dibujar en el que no está involucrado en dicha copia. La tarjeta gráfica lee el tercer búfer, el búfer frontal, para mostrar la imagen en el monitor. Una vez que la imagen se ha enviado al monitor, el búfer frontal se invierte (o se copia desde) el búfer posterior 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 se complete el software. 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 la sincronización y, por lo tanto, con un retraso mínimo. [1]

Debido a que el algoritmo del software no sondea el hardware de gráficos para detectar eventos de actualización del monitor, el algoritmo puede dibujar continuamente fotogramas adicionales tan rápido como el hardware puede procesarlos. Para los fotogramas que se completan mucho más rápido que el intervalo entre actualizaciones, es posible reemplazar los fotogramas de un buffer de respaldo con iteraciones más nuevas varias veces antes de copiarlos. Esto significa que se pueden escribir fotogramas en el búfer de reserva que nunca se utilizan antes de ser sobrescritos por fotogramas sucesivos. Nvidia ha implementado este método con el nombre "Fast Sync". [2]

Un método alternativo al que a veces se hace referencia como almacenamiento en búfer triple es una cadena de intercambio de tres búferes de longitud. Después de que el programa ha recuperado ambos buffers, espera hasta que el primero se coloque en la pantalla, antes de extraer otro buffer de respaldo (es decir, es una cola de 3 de largo, primero en entrar, primero en salir ). La mayoría de los juegos de Windows parecen referirse a este método cuando habilitan el almacenamiento en búfer triple. [ cita necesaria ]

Almacenamiento en búfer cuádruple

El término buffering cuádruple es el uso de buffering doble para cada una de las imágenes del ojo izquierdo y derecho en implementaciones estereoscópicas , por lo tanto, cuatro buffers en total (si se usara buffering triple entonces habría seis buffers). El comando para intercambiar o copiar el búfer generalmente 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 en búfer cuádruple requiere 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 recientes 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 almacenamiento en búfer se utiliza para copiar 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 (especialmente dispositivos de 32 bits en sistemas con direccionamiento más amplio proporcionado a través de física). Extensión de dirección ). [5] Los controladores de dispositivos DOS y Windows son un lugar donde es probable que se utilice el término "doble almacenamiento en búfer". El código fuente de Linux y BSD los llama "búferes 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 almacenamiento en búfer también se utiliza como técnica para facilitar el entrelazado o desentrelazado de señales de vídeo.

Ver también

Referencias

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

enlaces externos