¿Cómo se comunica una GPU / CPU con una salida de pantalla estándar? (HDMI / DVI / etc) [cerrado]

11

Estoy interesado en cómo la cpu / gpu presenta (a cualquier equipo que lo haga) datos de video después de que se haya procesado.

Me han dicho que el video es procesado por la CPU / GPU y luego enviado a un circuito integrado por una serie de alta velocidad que convierte la señal serial a una salida de pantalla apropiada, pero no puedo confirmar esto buscando en línea.

Estoy interesado en la señalización y no puedo buscar protocolos / etc porque no sé qué es lo que estoy buscando. Entonces, ¿la CPU / GPU interactúa con las salidas de video directamente (puedo encontrar estos protocolos fácilmente) o hay un "intermediario", por así decir, y si es así, qué es, tipo de chip / etc?

    
pregunta Craig Lafferty

2 respuestas

14

La imagen que se muestra en el monitor se almacena en la RAM de video de su computadora en la tarjeta gráfica en una estructura llamada framebuffer. Los datos en el framebuffer son generalmente de color RGB de 24 bits, por lo que habrá un byte para el rojo, uno para el verde y uno para el azul para cada píxel en la pantalla, posiblemente con algunos bytes de relleno adicionales. Los datos en la RAM de video pueden ser generados por la GPU o por la CPU. La RAM de video se lee continuamente por un componente DMA especializado en la tarjeta de video y se envía al monitor. La señal de salida al monitor es una señal analógica (VGA) donde los componentes de color se envían a través de conversores digitales a analógicos antes de abandonar la tarjeta, o una señal digital en el caso de DVI, HDMI o DisplayPort. El hardware responsable de esto también genera las señales de sincronización horizontal y vertical, así como todos los retrasos apropiados, por lo que los datos de la imagen solo se envían al monitor cuando está listo para ello. En el DVI y HDMI, el flujo de información de color de píxel se codifica y se serializa y se envía a través de TMDS (señalización diferencial minimizada en la transición) al monitor. DisplayPort utiliza codificación 8b / 10b. La codificación sirve para múltiples propósitos. Primero, TMDS minimiza las transiciones de señal para reducir las emisiones de EMI. En segundo lugar, tanto TMDS como 8b / 10b son protocolos de CC balanceado, por lo que los capacitores de bloqueo de CC se pueden usar para eliminar problemas con los bucles a tierra. Tercero, 8b / 10b garantiza una densidad de transición lo suficientemente alta como para permitir la recuperación del reloj en el receptor, ya que DisplayPort no distribuye un reloj separado.

También, para HDMI y DisplayPort, los datos de audio también se envían a la tarjeta gráfica para transmitirlos al monitor. Estos datos se insertan en pausas en el flujo de datos entre cuadros de video. En este caso, la tarjeta de video se presentará como un receptor de audio para el sistema operativo, y los datos de audio se transferirán a través de DMA a la tarjeta para incluirlos con los datos de video.

Ahora, probablemente se dé cuenta de que para una pantalla de 1920x1080 con 4 bytes por píxel, solo necesita alrededor de 8 MB para almacenar la imagen, pero la RAM de video en su computadora probablemente sea mucho mayor que ese tamaño. Esto se debe a que la RAM de video no solo está diseñada para almacenar el framebuffer. La RAM de video está conectada directamente a la GPU, un procesador de propósito especial diseñado para la representación 3D eficiente y la decodificación de video. La GPU usa su acceso directo a la RAM de video para acelerar el proceso de renderizado. De hecho, obtener datos de la memoria principal en la memoria de video es un cuello de botella, ya que el bus PCI que conecta la tarjeta de video a la CPU y la memoria principal es significativamente más lento que la conexión entre la GPU y la RAM de video. Cualquier software que requiera mucha representación 3D de alta resolución tiene que copiar todos los datos de la escena 3D (principalmente mallas 3D y datos de textura) en la RAM de video para que la GPU pueda acceder a ella de manera eficiente.

    
respondido por el alex.forencich
7

Las diversas salidas de visualización modernas son esencialmente flujos de bits en serie. La tasa de bits es demasiado alta para un procesador (o si pudiera continuar, reclamaría demasiado tiempo de procesamiento). Se reserva un pedazo de memoria para contener los bits de la imagen. Una pieza dedicada de hardware lee el contenido de la memoria y lo transmite. Esta pieza es similar a un controlador DMA y en realidad es bastante simple. Es solo una pequeña parte de una GPU moderna, que se ocupa principalmente de crear esa imagen en la memoria a partir de comandos de GPU de nivel superior.

La memoria que contiene la imagen de video puede ser parte de la memoria principal (barata) o una memoria dedicada a la que se puede acceder simultáneamente mediante el 'DMA' y la CPU y / o GPU. El 'DMA' debe configurarse con varios parámetros, por ejemplo, el ancho y la altura de los píxeles, la profundidad del color, la ubicación de inicio en la memoria, etc.

En las computadoras modernas, la GPU es un procesador (muy especializado) que compite con la velocidad de la CPU principal (y la excede en su propio territorio). Hace cosas como generar una imagen de psuido-3D a partir de un montón de objetos 3D con texturas y fuentes de luz. Todo esto se puede hacer dentro de la memoria de video, por la GPU. La CPU solo entrega los objetos, texturas y fuentes de luz.

Leer los datos de video de la memoria y cambiarlos es un proceso bastante simple, pero debe hacerse bastante rápido y todo el tiempo. Por lo tanto, esta tarea es adecuada para hardware dedicado y no es adecuada para una CPU. AFAIK las últimas computadoras que tuvieron la CPU involucrada en la generación de la señal de video fueron la ZX80 / 81 y Spectrum. En esos, la CPU podría hacer su propio trabajo solo durante el tiempo de retorno (¿vertical?).

    
respondido por el Wouter van Ooijen

Lea otras preguntas en las etiquetas