Si habéis observado el mercado en los últimos años, habréis podido ver como las configuraciones de una tarjeta gráfica con dos GPUs ya no se ofrecen con las nuevas arquitecturas por parte los grandes fabricantes como son AMD y NVIDIA. ¿Cuáles son los motivos que han llevado a que las dos compañías ya no apuesten por estas configuraciones de GPU dual?
De un tiempo a esta parte hemos dejado de ver tarjetas gráficas duales en las tiendas, las cuales se situaban en la gama más alta de las gamas de consumo.
Una tarjeta gráfica dual funciona igual que tener dos tarjetas gráficas por separado, pero compartiendo el mismo bus PCI Express entre las dos, lo que lleva a limitaciones en cuanto a la energía disponible para ambas GPUs así como de comunicación con la CPU. La explicación más lógica a su desaparición es que los fabricantes sacan menos dinero vendiendo una tarjeta dual que no dos tarjetas simples, aparte que las tarjetas duales por su limitado mercado acaban siendo un problema de stock si esas tarjetas gráficas no se venden.
Mientras que en el caso de tirar de tarjetas gráficas con una sola GPU conectadas entre si a través de tecnologías como SLI o Crossfire resulta más rentable y más adecuado a la hora de manejar el stock. Pero las motivaciones técnicas son algo más complejas y tienen que ver en como usan las GPU el software doméstico y especialmente los videojuegos.
La comunicación CPU-GPU y como afecta a las GPUs duales
Al principio de cada fotograma de un videojuego la CPU calcula la posición de la escena de cada objeto en ella, así como las interacciones, detección de colisiones, creando con ello una lista ordenada de cosas a hacer llamada «Lista de Comandos», la cual es escrita en una parte de la RAM principal. La GPU entonces a través de una unidad DMA que le permite leer la RAM principal del sistema, no confundir con la de la gráfica, lee esa lista como si fuera un anillo. Es decir, la GPU lo que hace es ir leyendo en bucle las mismas direcciones de memoria que incluirán dicha lista o listas.
Todas las GPUs tienen un pequeño procesador que es el llamado «Procesador de Comandos», el cual lee esa parte de la memoria del sistema donde se encuentra una lista de comandos que ha sido escrita previamente por la CPU y que indican lo que la GPU ha de hacer para dibujar el fotograma actual. Esta unidad se encuentra en la parte central de la GPU independientemente de cuál sea el fabricante y la arquitectura de la misma.
De forma similar al trabajo de un director de una orquesta, el procesador de comandos se encuentra en la parte central del chip independientemente de cuál sea la arquitectura porque es la pieza encargada de dirigir la acción de las diferentes de la GPU y que los datos circulen de manera correcta a través de las diferentes unidades. Podemos tener una GPU Dual asignando cada una de ellas a una pantalla distinta pero el uso general en el mercado doméstico siempre ha sido la de combinar dos GPU para renderizar una misma escena de manera mucho más rápida y/o detallada.
¿Cómo renderizan las GPU Duales? Split Frame Rendering vs Alternative Frame Rendering
La idea de tener una GPU Dual no es otra que la de combinar la potencia de ambas GPUs para renderizar una misma escena y estas pueden colaborar de manera colaborativa, pero para ello ambas GPUs se han de coordinar entre ellas para renderizar la escena y para ello hay generalmente dos métodos
- Cada GPU funciona de manera intercalada, donde cada una de ellas se encarga de un fotograma y por tanto de una lista de pantalla distinta. A esto se le llama Alternate Frame Rendering.
- Colaborando ambas en el mismo fotograma y compartiendo el espacio de pantalla. Lo que es el Split Frame Rendering
El primer caso es el más fácil de realizar y que no requiere sincronización entre las dos GPUs a la hora de renderizar un mismo fotograma ya que cada una de ellas se encarga de un fotograma distinto. El handicap es que los assets como texturas, modelos y demás van a estar duplicados en la memoria RAM de cada una de las tarjetas ya que, aunque estén trabajando de manera combinada una trabaja de manera alterna a la otra.
El AFR es el modelo más utilizado en el caso de las tarjetas gráficas para PC que trabajan en modo dual. La ventaja principal es que esto le permite a la GPU alterna empezar su fotograma antes de que lo termine su compañera y la CPU puede crear la lista de comandos para la segunda GPU justo antes de que la primera termine su trabajo. Se ha de tener en cuenta que en caso concreto del AFR no todos los fotogramas se renderizan con el mismo tiempo y en determinados momentos. Una GPU tendrá una carga mayor que la otra y no irán coordinadas, por lo que es necesario un elemento que vaya coordinando cuando empieza el fotograma una GPU y cuando lo termina, para que a la hora de generar la imagen una no pise a la otra.
El segundo caso es típico de las GPUs para dispositivos Post-PC, ya que las GPUs de dichos dispositivos suelen estar compuestas por varias GPU simétricas funcionando en paralelo y compartiendo el mismo acceso a memoria. El tipo de renderizado tradicionalmente utilizado en estos dispositivos es el renderizado por Tiles o Mosaicos, basado en dividir la pantalla en mosaicos. En dicha forma de renderizar se realiza una primera división de la pantalla por la cantidad de núcleos de GPU disponibles. Luego cada núcleo de la GPU trata una porción de la pantalla como si fuese un fotograma entero.
Split Frame Rendering
A este método se le llama Split Frame Rendering, SFR, y funciona sobre todo en sistemas donde pese a haber varias GPUs todas ellas comparten un mismo pozo de memoria. En PC y a partir de DirectX 12, Microsoft añadió soporte para el Split Frame Rendering que permitía que dos tarjetas gráficas se encarguen de un mismo fotograma al mismo tiempo compartiendo un mismo direccionamiento de la memoria. Esto parece muy bonito sobre el papel pero… ¿Qué ocurre cuándo dos GPUs no comparten el mismo pozo de memoria RAM y están renderizando un mismo fotograma al mismo tiempo? Se crean unas latencias de acceso horriblemente altas de cara a la comunicación cuando una GPU necesita acceder a un dato que se encuentra en el direccionamiento común de ambas GPU.
El SFR para funcionar correctamente requiere que ambas GPU tengan de manera compartida un mismo pozo de memoria y no solo un mismo direccionamiento. De un tiempo a esta parte han aparecido en algunos modelos de GPUs procesadores de comandos con virtualización que lo que hacen es funcionar como 2 o más GPUs y dividen los recursos del hardware disponibles para poder funcionar como varias GPUs distintas. Esto es muy utilizado en los Data Centers donde una GPU puede ser utilizada para dar recursos a diferentes clientes al mismo tiempo.
Pero en el mercado doméstico del PC tanto el SFR como el AFR no se utiliza porque requiere adaptar la forma de crear listas de comandos del software para este tipo de configuraciones. La cantidad de gente con una GPU Dual es sumamente baja y no compensa para nada desarrollar software que aproveche dichas características. Incluso el mercado de la Realidad Virtual donde tener una GPU renderizando cada ojo sería un plus no consigue siquiera que haya una demanda lo suficientemente grande de tarjetas gráficas que tengan procesadores de comandos que soporten virtualización de serie.
¿Ha afectado DirectX 12 a las GPU Duales?
A partir de DirectX 11 se añadió la capacidad de hacer computación de propósito general a las GPU en paralelo al renderizado de los gráficos. La forma de hacerlo es no tener un solo búfer en memoria sino varios búfers distintos, siendo uno de ellos y el principal el encargado de renderizar los gráficos y el resto en hacer pequeñas tareas de computación.
En DirectX 11, con respecto a la GPU, aunque haya varias listas de comandos aparte de la lista de comandos para gráficos en la RAM del sistema a nivel interno de la GPU, se ejecutaba todo como una larga lista donde el renderizado de la escena tiene preferencia. Con DirectX 12 se produjo un gran cambio, donde las listas de computación son ejecutadas por la GPU en paralelo y de manera asíncrona. Esto significa que dichas listas de comandos se resuelven independientemente de cuál sea el estado de la lista de comandos para renderizar los gráficos.
Hay que tener en cuenta que tanto el SFR como el AFR dependen de cuál sea el estado de disponibilidad de los recursos de la GPU si ha finalizado el fotograma o no. Un programador puede arañar unos cuantos milisegundos extras de una GPU para que realice una serie de tareas adicionales fuera de la composición de la escena. Esto hace muy pero que muy difícil llegar a coordinar dos GPUs de manera coordinada con tal de permitir tanto el AFR como el SFR, así pues, DirectX 12 ha sido el clavo final en el ataúd de las GPU dual en el mercado doméstico.
Estos cambios junto a la poca gente con configuraciones de GPU dual que justificaran la optimización de los juegos han hecho que estás hayan desaparecido por completo del mercado.