¿Cómo se comunica la CPU con la GPU antes de cargar los controladores? [duplicar]


24

Según tengo entendido, las GPU tienen sus propios conjuntos de instrucciones, cuyas instrucciones son generadas por los controladores de gráficos. Las instrucciones de la GPU se envían a la GPU. Entonces, ¿cómo funciona la comunicación gráfica antes de cargar los controladores? ¿Hay algunas instrucciones básicas que las GPU deben implementar como mínimo para garantizar que la computadora pueda realizar tareas básicas de visualización?


Respuestas:


34

"¿Hay algunas instrucciones básicas ...?" Sí exactamente. Se requieren todas las GPU para implementar una de varias interfaces simples: son demasiado primitivas para llamarse "conjuntos de instrucciones", con qué firmware de plataforma ("BIOS" o "UEFI") y controladores incluidos con el sistema operativo saben cómo comunicarse . La elección habitual de "interfaz simple" en estos días es "VGA" ("Video Graphics Array"), la interfaz de nivel de registro originalmente definida para las tarjetas de video de ese estándar. (¡Ahora más de 30 años!)

Por ejemplo, si el Administrador de dispositivos en un sistema Windows identifica la tarjeta gráfica como el "Adaptador de video básico de Microsoft", el sistema operativo no pudo encontrar un controlador específico para la tarjeta y en su lugar ha cargado el controlador compatible con VGA.

Bueno, técnicamente, Windows siempre carga ese controlador (para que pueda mostrar, por ejemplo, las pantallas de progreso de arranque), luego (bastante tarde en el arranque) identifica y carga el controlador "real" para su tarjeta gráfica.

El estándar VGA solo admite algunos modos gráficos de baja resolución y modos de texto, y no involucra lo que yo llamaría "programas en ejecución" o incluso "instrucciones" en la GPU. En esencia, el firmware del sistema o el "controlador de video base" simplemente lo pone en el modo deseado y luego escribe bits en un mapa de bits; Los bits en el mapa de bits corresponden directamente a los píxeles en la pantalla. Cualquier aritmética que deba realizarse para dibujar líneas o curvas se realiza en la CPU. Es una forma lenta y de muy bajo nivel para que las cosas aparezcan en la pantalla. Pero es suficiente para pantallas e interacciones simples con el firmware, para instalaciones de SO y pantallas de progreso de arranque temprano, etc.

Wikipedia: Matriz de gráficos de video


1
La situación completa es complicada. Las primeras tarjetas "VGA" fueron de hecho tan limitadas. Durante mucho tiempo, Windows NT requirió soporte para 800x600, pero sí, solo 16 colores. ¡Se veía bastante terrible! Vea el artículo de Wikipedia que he vinculado.
Jamie Hanrahan

99
Es más probable que Windows use Extensiones de BIOS VESA (VBE) para su adaptador básico. VBE es ampliamente compatible y permite colores de 16-24 bits y hasta 1600x1200 píxeles.
8bittree

3
No sería la extensión VESA BIOS, porque Windows no invoca el código BIOS / UEFI para nada después de las primeras etapas de arranque.
Jamie Hanrahan

2
He visto algunas computadoras, incluida mi computadora portátil, donde la pantalla de inicio de Windows "puntos giratorios" comienza con una resolución extremadamente baja (320x200, diría, el modo de 256 colores de VGA) y luego cambia rápidamente a una resolución más alta.
Artelius

1
Incluso 800x600 a 16 colores está más allá de las capacidades de VGA. VGA maximizado a 640x480 16 colores. Sin embargo, los fabricantes de chips gráficos fueron más allá de esto y agregaron modos "SuperVGA", también conocidos como SVGA, que aumentarían los colores y la resolución, al mismo tiempo que tenían sus propios modos patentados. VESA se presentó como una forma estándar de acceder a esos modos patentados, pero esto fue alrededor del tiempo en que la PC comenzó a funcionar principalmente con GUI y, por lo tanto, los controladores fueron una buena opción. También fue cuando se comenzó a agregar la aceleración 3D. Entonces, aunque la mayoría de las tarjetas se volvieron compatibles con VESA, nadie habló de eso.
Trly

16

Trataré de aclarar el "vudú" detrás de todo esto, explicando cómo funcionaba el hardware antiguo. Las GPU modernas no funcionan así, pero emulan la interfaz de CPU a tarjeta gráfica.

tl; dr

Los chips / tarjetas gráficas en los años 80 y principios de los 90 tuvieron que producir una salida extremadamente rápida (en relación con la velocidad del reloj) para que no ejecutaran instrucciones, sino que tenían circuitos fijos. Simplemente absorbieron los datos de la RAM a medida que avanzaban, por lo que la CPU simplemente necesitaba volcar los datos en la RAM en el lugar correcto, y el chip gráfico los recogería y los arrojaría a la pantalla. La CPU también podría establecer varias variables de configuración en el chip gráfico.

Detalles:

En los años 80, las computadoras domésticas tenían un chip gráfico realmente "tonto" que tenía algunos comportamientos fijos. Tendrá más sentido si paso por la tubería al revés.

Monitores CRT

Estos monitores necesitaban entradas analógicas. En otras palabras, mayor voltaje = salida más brillante. Los monitores en color tenían 3 canales (rojo, verde y azul (o, por ejemplo, YUV o YIQ ) ). Estos voltajes ajustaban la fuerza de un haz de electrones. Cosas simples

Los monitores CRT literalmente utilizaron electroimanes para desviar el haz de electrones de izquierda a derecha, luego empezar de nuevo un poco más abajo e ir de izquierda a derecha, y así sucesivamente de arriba a abajo. Luego vuelve a la parte superior y repite.

DAC

Los chips gráficos tenían un convertidor "digital a analógico" (un componente eléctrico muy común ). Esto convirtió los valores digitales (por ejemplo, 2, 4 u 8 bits) en voltajes que podrían suministrarse al monitor.

Exploración

Los chips de gráficos tenían que "mantenerse" con el haz de electrones, enviando el valor correcto al DAC para que pudiera emitir el voltaje correspondiente en el momento correcto. (Se usaron relojes para esto en los que no entraré). No había tiempo para ejecutar instrucciones aquí. Todo estaba conectado y tomó una pequeña cantidad fija de ciclos de reloj.

Modos de video

Los primeros chips no fueron muy rápidos y tenían RAM limitada. Debido a esto, tendían a permitir la selección de varios modos y otros parámetros de configuración, por ejemplo, color de fondo, selección de fuente, ubicación y tamaño del cursor, selección de paleta y sprites. La mayoría ofrecía un modo de "solo carácter" de alta resolución y modos de píxel por píxel de menor resolución.

Los tres modos VGA notables son:

  • Modo de texto en color 16 (ish) 80x25 (esto es esencialmente lo que parece una pantalla de carga de BIOS)
  • Modo de alta resolución de 16 colores 640x480
  • Modo de alto color de 256 colores 320x200

Píxeles de pintura

En términos generales, dependiendo del sistema de gráficos, la tubería se ve más o menos así:

Ubicación actual del píxel ⇒ Datos del carácter / fuente / sprite / píxel / configuración del proceso ⇒ Valores de píxel ⇒ Paleta ⇒ DAC

Es ese segundo paso el que necesita leer desde un par de ubicaciones de RAM. Por ejemplo, en el modo de texto, se buscaría un carácter de 1 byte. Esto formaría un índice en una tabla de fuentes. Se buscaría un poco desde esta tabla, indicando si ese píxel debería ser el color de primer plano o de fondo. Se buscará un tercer byte para obtener ese color de primer plano / fondo. En total, 3 bytes leídos de la RAM.

Pero este "flujo" es más o menos un conjunto de circuitos fijos simples que están dispuestos exactamente como, bueno, el flujo que se acaba de describir.

Interfaz de bus de memoria

Las CPU de Intel tienen este molesto legado llamado bus IO, pero no es importante, así que fingiré que no está allí.

Las CPU acceden a la RAM transmitiendo una solicitud READ o WRITE y una dirección en el bus de memoria. Aunque la mayoría de las direcciones válidas provocan una respuesta de RAM, los dispositivos manejan ciertos rangos . Por ejemplo, LEER desde una dirección particular puede darle información sobre las pulsaciones de teclas del teclado.

Al escribir en las partes correctas del "rango de gráficos", puede escribir tanto el contenido de la pantalla como también establecer los parámetros de configuración de la tarjeta gráfica. El chip gráfico "tonto" no ejecuta ninguna instrucción. Simplemente sigue avanzando lentamente, con unos pocos bytes que fluyen a través de sus circuitos y generan voltajes.

Con VGA, en realidad hay RAM en la tarjeta gráfica, porque puede configurar la tarjeta gráfica para procesar los datos antes de que se grabe en la RAM gráfica, para aumentar el rendimiento en algunas situaciones.

VESA

Las tarjetas gráficas después de VGA ofrecían resoluciones más altas y buena profundidad de color, pero funcionaban con principios similares. Muchas tarjetas gráficas modernas aún ofrecen compatibilidad con esto para permitir una mayor resolución durante el arranque. Pero VGA es el "infalible" que prácticamente todas las tarjetas emularán.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.