Estoy interesado en cómo la CPU / GPU presenta (a cualquier equipo que lo haga) datos de video después de que se ha procesado.
Me han dicho que el video es procesado por la CPU / GPU y luego enviado a un circuito integrado por un serial 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 directamente con las salidas de video (puedo encontrar estos protocolos fácilmente) o hay un "intermediario", por así decirlo, y si es así, ¿qué tipo de chip / etc?
Respuestas:
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 memoria RAM de video es leída continuamente por un componente especializado de DMA en la tarjeta de video y enviada al monitor. La salida de señal al monitor es una señal analógica (VGA) donde los componentes de color se envían a través de convertidores 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 DVI y HDMI, el flujo de información de color de píxeles se codifica y serializa y se envía a través de TMDS (señalización diferencial minimizada de transición) al monitor. DisplayPort utiliza codificación 8b / 10b. La codificación tiene múltiples propósitos. Primero, TMDS minimiza las transiciones de señal para reducir las emisiones EMI. En segundo lugar, tanto TMDS como 8b / 10b son protocolos balanceados de CC, por lo que los condensadores de bloqueo de CC pueden usarse para eliminar problemas con los bucles de tierra. Tercero, 8b / 10b asegura 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. El flujo de información de color de píxeles se codifica y serializa y se envía a través de TMDS (señalización diferencial minimizada de transición) al monitor. DisplayPort utiliza codificación 8b / 10b. La codificación tiene múltiples propósitos. Primero, TMDS minimiza las transiciones de señal para reducir las emisiones EMI. En segundo lugar, tanto TMDS como 8b / 10b son protocolos balanceados de CC, por lo que los condensadores de bloqueo de CC pueden usarse para eliminar problemas con los bucles de tierra. Tercero, 8b / 10b asegura 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. El flujo de información de color de píxeles se codifica y serializa y se envía a través de TMDS (señalización diferencial minimizada de transición) al monitor. DisplayPort utiliza codificación 8b / 10b. La codificación tiene múltiples propósitos. Primero, TMDS minimiza las transiciones de señal para reducir las emisiones EMI. En segundo lugar, tanto TMDS como 8b / 10b son protocolos balanceados de CC, por lo que los condensadores de bloqueo de CC pueden usarse para eliminar problemas con los bucles de tierra. Tercero, 8b / 10b asegura 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.
Además, para HDMI y DisplayPort, los datos de audio también se envían a la tarjeta gráfica para su transmisión 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 su inclusión 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 unos 8 MB para almacenar la imagen, pero la RAM de video en su computadora probablemente sea muchas veces mayor. Esto se debe a que la RAM de video no solo está diseñada para almacenar el framebuffer. La RAM de video está directamente conectada a la GPU, un procesador de propósito especial diseñado para una eficiente representación 3D y decodificación de video. La GPU utiliza 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 pequeño 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.
fuente
Las diversas salidas de pantalla modernas son esencialmente flujos de bits en serie. La tasa de bits es demasiado alta para un procesador (o si pudiera mantenerse, reclamaría demasiado tiempo de procesamiento). Se reserva un trozo de memoria para contener los bits de la imagen. Una pieza de hardware dedicada lee el contenido de la memoria y la 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 puede acceder simultáneamente 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 rivaliza con la velocidad de la CPU principal (y la supera en su propio territorio). Hace cosas como generar una imagen 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 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 retroceso (¿vertical?).
fuente