Digamos que estoy usando una computadora, cualquier computadora moderna típica más o menos. Un controlador de dispositivo es responsable de todo lo que veo en mi pantalla, incluso cuando escribo esto, la pantalla se actualiza (esto, por supuesto, está dentro del alcance de un sistema operativo, como Windows).
Bajemos esto al nivel donde al hardware no le importa si hay un kernel o no, y solo toma las instrucciones.
Básicamente, ¿cómo las GPU "saben" exactamente cómo hacer todo? ¿Controla básicamente un controlador cada función minúscula, intrínseca o de hardware a nivel de circuito posible o necesaria para calcular datos binarios para su visualización utilizando instrucciones especiales que proporciona un controlador?
Si es así, ¿la GPU usa un lenguaje "especial" o "ensamblado" para entender las instrucciones que se le envían como lo hace una CPU?
Tengo demasiados vacíos en mi conocimiento, y hay un "misterio" desagradable detrás de las GPU y al acceder a ellas directamente a través del hardware.
Por ejemplo, una GPU y una CPU deben poder conectarse de alguna manera, por lo que es posible acceder a una GPU a través del ensamblaje de la CPU e implementar los buses de datos / direcciones correctos. No hay forma de que un proveedor de dispositivos pueda hacer que sea imposible acceder a la GPU fuera de un controlador, ya que un controlador también es un código compilado, y la GPU, como un circuito programable, debe funcionar con instrucciones binarias.
He hecho este tipo de preguntas y se eliminan violentamente rápido sin respuesta por qué en muchos sitios, ¿cuál es el gran misterio / secreto aquí? Es una pieza de hardware en una placa base a la que se accede como cualquier otra.
Entonces realmente ... asumiendo que esta es una pregunta "correcta" con respecto al software y hardware, cualquiera puede acceder directamente a una GPU sin archivos específicos del proveedor, porque los archivos no son mágicos.
Entonces, ¿cómo se "programan" las GPU desde la perspectiva directa del hardware en el nivel específico del hardware?
Respuestas:
No, el dispositivo tiene sus propios circuitos integrados que controlan todos los aspectos a nivel de hardware del funcionamiento del dispositivo, y se conectan con un procesador central que coordina los aspectos en el dispositivo, además de proporcionar una interfaz de programación de nivel superior que se puede usar. para acceder, leer, escribir y controlar el dispositivo.
Si y no. Como la mayoría de los dispositivos, las tarjetas de video usan normas para simplificar las cosas. Ellos usan estándares como VESA para acceder a las funciones normales como el video de arranque, o CUDA Para acceder a las funciones de programación de GPU. Además, los programas pueden acceder a las funciones no estándar o dependientes del dispositivo directamente usando el código de la máquina (a menudo C compilado por ensamblador) junto con las documentaciones de programación del dispositivo (que están disponibles en el sitio web del adaptador).
Los controladores acceden al dispositivo directamente, por lo que tienen un acceso especial (los programas regulares a nivel de usuario no pueden acceder al hardware directamente en Vista + por razones de seguridad y estabilidad). El acceso al dispositivo mediante puertos, DMA ( Memoria de acceso directo ), y mapeo de memoria .
Un controlador puede leer y escribir el dispositivo con instrucciones regulares de la CPU al acceder a los puertos asignados a la memoria y similares. Como un ejemplo fácil de entender, puede poner un carácter en la pantalla en modo de texto escribiendo en "memoria" en la dirección B8000. Esta dirección no era RAM, sino que estaba asignada a la memoria de la tarjeta de video, por lo que escribir en ella escribiría en la pantalla. Del mismo modo, puede escribir en la pantalla colocando el carácter que desea escribir en el
AL
registro,0x09
en elAH
registrarse, y luego llamar a la interrupción del BIOS0x10
. Las funciones más avanzadas no son diferentes; puede leer y escribir en la memoria del adaptador, llamar a las funciones en su chip, etc., utilizando cualquier interfaz que exponga el dispositivo y los documentos.Solo para las características que cumplen con los estándares, pero todo lo demás (es decir, las cosas más avanzadas), deberá consultar los documentos de programación del fabricante.
A través de múltiples capas:
fuente
No soy exactamente un genio en arquitectura de computadoras, pero trataré de tratar su pregunta por puntos, según mi conocimiento.
Es cierto, principalmente porque la interacción directa con la GPU no es fácil de implementar. De ahí el desarrollo de marcos gráficos como DirectX y OpenGL.
Esta definición práctica de Wikipedia Explica esto con más detalle:
Las GPU son microprocesadores. Como tal, se procesan. Procesan los datos que se alimentan desde la CPU (es decir, la posición de los elementos) a una pantalla adecuada. Ellos "saben" cómo hacer todo porque están fabricados de esa manera. y un gran grupo de personas acordaron las formas adecuadas de enviar datos hacia y desde la GPU.
Piense en el controlador de pantalla como un búfer, o un proxy. Imagina que eres una ventana de programa y el usuario te mueve hacia arriba. Le pides a la GPU que actualice la pantalla. Pero como habla la GPU Klingon y tu hablas Vulcano , el controlador recibe su comando, lo traduce a la GPU que a su vez hace lo que usted ordenó.
Desde Wikipedia :
Hay un ejemplo y recuerde que los fabricantes individuales (NVIDIA, ATI) tienen sus propios conjuntos de instrucciones.
Además, existe OpenCL y muchas otras formas de, de una manera, programar directamente las instrucciones a la GPU.
Todo esto debería responder a tu pregunta, hasta cierto punto.
fuente