¿Arquitecturas diferentes o solo marketing diferente?
Como sabes, las actuales tarjetas gráficas o GPUs de AMD, NVIDIA e Intel funcionan de la misma manera a nivel general, y son compatibles con los mismos equipos y APIs gráficas, además de con los videojuegos existentes en la actualidad. Sin embargo, a nivel de la arquitectura, todas ellas son muy diferentes entre sí, y esto puede llevar a confusión al usuario o comprador.
Cuando se analiza con detenimiento las GPUs de estas tres marcas, se ve que no tienen tantas diferencias como pueda parecer, pero los nombres o marcas registradas que usan estas empresas es lo que distorsiona la realidad. Por ejemplo, mientras NVIDIA usa los denominados núcleos CUDA, AMD los llama Compute Unit. Muchos usuarios comparan la cantidad de núcleos entre ambas tarjetas gráficas para saber el rendimiento, pero se equivocan rotundamente.
A continuación vamos a ver de forma más detallada cómo funciona una GPU y cuáles son esas diferencias entre la AMD Radeon y la NVIDIA GeForce.
¿Cómo funciona una GPU a nivel básico?
Como deberías saber, mientras que una CPU está diseñada para realizar pocas tareas complejas a la vez, una GPU está diseñada para hacer muchas tareas simples a la vez. Se trata de un diseño SIMD, donde una instrucción opera sobre varios datos, es decir, se puede decir que es una unidad de procesamiento vectorial, ya que los gráficos necesitan de muchos de estos cálculos para poderse crear.
Además, en una CPU los núcleos no se suelen organizar en grupos o clusters (salvo excepciones como es el caso de las que usan arquitecturas multinúcleo heterogeneo), en la GPU sí que suelen estar organizados en grupos o clusters. Cada cluster tiene otras unidades en su interior, como los núcleos de procesamiento de texturas, las unidades de coma flotante, caché, etc. Y esto es muy importante que lo recuerdes, ya que es la base de la diferencia entre las unidades de las que trata este artículo.
El procedimiento de trabajo de una GPU es el siguiente:
- Cuando se necesita mostrar algún gráfico en pantalla, como un videojuego, éste hará uso de las APIs gráficas como OpenGL, Vulkan, DirectX 3D, para poder «dibujar» lo que se necesita. Estas APIs, junto con el controlador de la GPU se podrán a trabajar juntas.
- La CPU es la que dirige todas las operaciones, ya que es la que enviará instrucciones a la GPU para que sepa qué es lo que tiene que hacer.
- Cuando la GPU recibe una instrucción en la cola de instrucciones, y los datos vectoriales o datos múltiples asociados a los que se le aplicará la operación indicada por la instrucción, la unidad se pondrá manos a la obra para realizar los cálculos. Evidentemente, no solo se recibe una instrucción a la vez, sino que un planificador será el encargado de asignar núcleos o elementos de procesamiento a cada instrucción que llega.
- Una vez procesados y obtenidos los resultados, el resultado irá a la pantalla a través de la salida de vídeo, mostrando el gráfico que fuese necesario.
Hasta aquí una explicación muy simple de cómo trabaja, y que ya te puede estar dando algunas ideas de por qué estas diferencias entre marcas…
AMD Radeon RX: Compute Unit
Como se puede apreciar en la imagen de arriba, que es un diagrama de la arquitectura AMD RDNA de las Radeon, vemos que emplea el término Compute Unit, concretamente unidades duales. Pues bien, estas unidades, también denominadas como CU, son el núcleo básico de procesamiento de estas GPUs. Cada cluster se compone de decenas de estas CUs, entre otras unidades, formando lo que AMD denomina Share Engine, o motor de sombreado.
Las Compute Units son una colección de recursos de procesamiento que pueden integrar tanto, memoria caché, FPUs o procesadores vectoriales (AMD los llama Vector Units), registros, etc. No obstante, AMD no detalla demasiado sobre los componentes de estas unidades como hace NVIDIA.
¿Qué son los núcleos CUDA?
Por otro lado tenemos el término que usa NVIDIA, que muestra el recuento de núcleos CUDA (Compute Unified Device Architecture), que no son más que unidades muy simples de coma flotante, es decir, esos recursos de procesamiento de los que comentaba en el apartado superior, por tanto, no son comparables a los CU de AMD, sino que son mucho más simples que eso.
En cambio, NVIDIA los llama núcleos por simple cuestión de marketing, ya que al ser muy numerosos, parece que las GPUs de esta marca tienen mayor cantidad de núcleos, aunque esto es algo que hay que coger con pinzas. En principio, al comparar Compute Unit vs CUDA, en el caso de CUDA sale ganando en número…
NVIDIA también agrupa estos recursos CUDA en grupos o clusters. Cada grupo tiene varios de estos núcleos CUDA, entre otros elementos. Todos ellos componen lo que NVIDIA denomina Streaming Multiprocessor o SM.
Como ocurría con las CUs de AMD, NVIDIA también agrupa sus unidades CUDA en grupos o clusters. Cada grupo puede tener muchos de estos CUDA. Además, para agregar algo más de confusión, NVIDIA llama a los clusters centrales SM (Streaming Multiprocessor).
Conclusión
Como sabes, los fabricantes intentan mostrar lo mejor de sus productos en comparación con la competencia. Y para ello se valen de cualquier artimaña de marketing como las que has visto. En principio, si comparas NVIDIA con sus CUDA cores con AMD e Intel, éstas dos últimas estarán en desventaja clara, pero el rendimiento no es tan superior en NVIDIA como para la cantidad de núcleos extra que tiene. ¿Motivo? Lo dicho anteriormente, se refiere a unidades distintas…
Equivalencias
Es decir, tenemos que las equivalencias entre la arquitectura de la GPU de NVIDIA y AMD son:
- Shader Engine = Graphics Processing Cluster (GPC) –> Se componen de varios CUs o SM en AMD y NVIDIA respectivamente.
- Compute Unit (CU) = Streaming Multiprocessor (SM) –> Se componen de varios recursos de cómputo como Vector Units y CUDA cores para AMD y NVIDIA respectivamente.
- Vector Units = CUDA cores
En el caso de Intel, tendríamos que el equivalente para CU y SM de AMD y NVIDIA respectivamente, sería sus Xe cores. Mientras que los equivalentes a Vector Units y CUDA cores, serían los Vector Engines.
Por tanto, siempre vas a tener mayor cantidad de CUDA cores en una GeForce que CUs en una Radeon, pero no tiene nada que ver con el rendimiento. Igual pasaría para Intel. Así que ya sabes que lo correcto sería comparar Compute Unit vs CUDA core vs Xe core.
Comparación de rendimiento
Por otro lado, tampoco olvides que usar los FLOPS como unidad de rendimiento para comparar las GPUs tampoco es una buena idea. Te puedes encontrar que una unidad con menor tasa de FLOPS es capaz de rendir mejor que una que tiene mayor tasa de FLOPS. Para hacer comparaciones más fidedignas lo ideal es usar otras unidades como:
- Pixel Rate medido en GPixel/s, o gigapíxeles por segundo.
- Texture Rate medido en GTexel/s, o gigatexturas por segundo.
Esto te daría una idea más certera del rendimiento gráfico real.