Cómo diseñar chips de GPU
Chapter 1 Introduction to Gpu Chip Design

Capítulo 1: Introducción al Diseño de Chips GPU

¿Qué son las GPUs y cómo se diferencian de las CPUs?

Las Unidades de Procesamiento Gráfico (GPUs) son circuitos electrónicos especializados diseñados para manipular y alterar rápidamente la memoria para acelerar la creación de imágenes en un búfer de fotogramas destinado a la salida a un dispositivo de visualización. Las GPUs se desarrollaron originalmente para descargar el renderizado de gráficos 2D y 3D de la CPU, lo que permite un rendimiento mucho mayor para aplicaciones intensivas en gráficos como los videojuegos.

Mientras que las CPUs están diseñadas para la computación de propósito general y cuentan con una lógica de control compleja para admitir una amplia variedad de programas, las GPUs tienen una arquitectura altamente paralela que consta de miles de núcleos más pequeños y eficientes diseñados para manejar múltiples tareas simultáneamente. Esto las hace ideales para el renderizado de gráficos, donde se pueden procesar grandes bloques de datos en paralelo.

Las principales diferencias arquitectónicas entre las CPUs y las GPUs incluyen:

  • Recuento de núcleos: Las GPUs tienen una gran cantidad de núcleos pequeños (cientos a miles), mientras que las CPUs tienen unos pocos núcleos grandes y potentes (2-64).
  • Jerarquía de caché: Las CPUs tienen grandes cachés para reducir la latencia, mientras que las GPUs tienen cachés más pequeños y se basan más en un ancho de banda alto para compensar la latencia.
  • Lógica de control: Las CPUs tienen capacidades de predicción de ramificación y ejecución fuera de orden complejas. Las GPUs tienen una lógica de control mucho más simple.
  • Conjunto de instrucciones: Las CPUs admiten una amplia variedad de instrucciones para la computación de propósito general. Los conjuntos de instrucciones de las GPU son más limitados y optimizados para gráficos.
  • Ancho de banda de memoria: Las GPUs tienen un ancho de banda de memoria muy alto (hasta 1 TB/s) para alimentar a sus muchos núcleos. Las CPUs tienen un ancho de banda más bajo (50-100 GB/s).
  • Rendimiento de coma flotante: Las GPUs son capaces de un rendimiento de coma flotante mucho mayor, lo que las hace adecuadas para cargas de trabajo de HPC y IA.

En resumen, la arquitectura altamente paralela de las GPUs les permite destacar en tareas que implican procesar grandes bloques de datos en paralelo, mientras que la lógica de control más sofisticada de las CPUs las hace más adecuadas para la computación de propósito general.Aquí está la traducción al español del archivo Markdown, con los comentarios del código traducidos:

Aplicaciones clave e importancia de las GPU

Durante las últimas dos décadas, las GPU se han convertido en uno de los tipos más importantes de tecnología de computación, ya que su estructura altamente paralela las hace más eficientes que las CPU de propósito general para algoritmos que procesan grandes bloques de datos en paralelo. Algunas de las principales áreas de aplicación que han impulsado el rápido avance de la tecnología de GPU incluyen:

Gráficos por computadora y juegos

El uso más común de las GPU es acelerar la creación de imágenes en un búfer de fotogramas destinado a la salida a un dispositivo de visualización. Las GPU se destacan en la manipulación de gráficos por computadora y el procesamiento de imágenes, y su estructura altamente paralela las hace más efectivas que las CPU de propósito general para algoritmos donde se procesan grandes bloques de datos en paralelo. Son un componente estándar en las consolas de juegos modernas y en las PC de juegos.

Computación de alto rendimiento (HPC)

Las capacidades de procesamiento paralelo de las GPU las hacen adecuadas para aplicaciones de computación científica que implican el procesamiento de conjuntos de datos muy grandes con algoritmos paralelos. Las GPU se han adoptado ampliamente en supercomputadoras y clústeres de HPC, donde trabajan junto a las CPU para acelerar cargas de trabajo altamente paralelas como la predicción del tiempo, las simulaciones de dinámica molecular y el análisis sísmico.

Inteligencia artificial y aprendizaje automático

El poder de procesamiento paralelo de las GPU ha sido fundamental para el rápido avance del aprendizaje profundo y la IA en los últimos años. El entrenamiento de redes neuronales profundas complejas requiere una enorme cantidad de potencia de cálculo, y las GPU se han convertido en la plataforma de elección para entrenar modelos de IA a gran escala debido a su capacidad para realizar eficientemente las operaciones de multiplicación de matrices que están en el corazón de los algoritmos de aprendizaje profundo. Todas las principales plataformas de IA en la nube y supercomputadoras utilizadas para IAAquí está la traducción al español del archivo markdown, con los comentarios del código traducidos al español:

Minería de criptomonedas

Las GPU también se han utilizado ampliamente para la minería de criptomonedas, ya que sus capacidades de procesamiento paralelo las hacen muy adecuadas para los algoritmos de hash criptográficos utilizados en las criptomonedas basadas en prueba de trabajo como Bitcoin. Las GPU de gama alta de AMD y Nvidia tuvieron una demanda muy alta durante el auge de las criptomonedas de 2017.

Computación acelerada y IA en el borde

Con la desaceleración de la Ley de Moore, ha habido una tendencia importante hacia la computación acelerada y heterogénea, con chips aceleradores especializados como las GPU que trabajan junto a los CPU para acelerar cargas de trabajo exigentes. Las GPU también se están utilizando para llevar capacidades de IA a dispositivos periféricos como teléfonos inteligentes, altavoces inteligentes y sistemas automotrices. Los SoC móviles ahora cuentan comúnmente con GPU integradas que se utilizan tanto para gráficos como para acelerar cargas de trabajo de IA.

El paralelismo masivo y la alta ancho de banda de memoria de las GPU las han convertido en una de las plataformas de computación más importantes en la actualidad, con aplicaciones que van mucho más allá de la gráfica por computadora. A medida que alcanzamos los límites de los procesadores de propósito general, los chips especializados como las GPU, FPGA y aceleradores de IA se están volviendo cada vez más importantes como motores de computación del futuro.

El panorama de los aceleradores de computación

A medida que las mejoras de rendimiento de los CPU de propósito general se han ralentizado en los últimos años, ha habido una tendencia creciente hacia chips aceleradores especializados que pueden acelerar cargas de trabajo específicas. Las GPU son uno de los ejemplos más prominentes de aceleradores, pero hay varias otras categorías importantes:

Matrices de Puertas Programables en Campo (FPGA)

Los FPGA son dispositivos semiconductores que se basan en una matriz de bloques lógicos configurables (CLB) conectados a través de interconexiones programables. Los FPGA se pueden reprogramar para cumplir con los requisitos de aplicación o funcionalidad deseados después de la fabricación, ofreciendo una alternativa más flexible a los ASIC. Se utilizan comúnmente en aeroespacial y defensa, prototipado de ASIC, imágenes médicas### Circuitos Integrados Específicos de Aplicación (ASIC) Los ASIC son circuitos integrados personalizados para un uso particular, en lugar de estar destinados a un uso de propósito general como las CPU. Los ASIC modernos a menudo incluyen procesadores de 32 bits o 64 bits completos, bloques de memoria que incluyen ROM, RAM, EEPROM, memoria flash y otros bloques de construcción grandes. Los ASIC se utilizan comúnmente en la minería de bitcoins, los aceleradores de IA, las comunicaciones inalámbricas 5G y los dispositivos IoT.

Aceleradores de IA

Los aceleradores de IA son chips especializados diseñados para acelerar las cargas de trabajo de IA, particularmente el entrenamiento y la inferencia de redes neuronales. Los ejemplos incluyen las Unidades de Procesamiento de Tensores (TPU) de Google, los Procesadores de Redes Neuronales Nervana (NNP) de Intel y una serie de startups que construyen chips de IA desde cero. Estos chips aprovechan las matemáticas de precisión reducida, los circuitos eficientes de multiplicación de matrices y la integración estrecha de cómputo y memoria para lograr un rendimiento por vatio mucho mayor que las GPU o las CPU en cargas de trabajo de IA.

Unidades de Procesamiento de Visión (VPU)

Las VPU son chips especializados diseñados para acelerar las cargas de trabajo de visión por computadora y procesamiento de imágenes. A menudo incluyen hardware dedicado para tareas como el procesamiento de señales de imagen, la visión estereoscópica y la detección de objetos basada en CNN. Las VPU se utilizan comúnmente en aplicaciones como ADAS automotriz, drones, auriculares de AR/VR, cámaras inteligentes y otros dispositivos periféricos que requieren un procesamiento visual de baja latencia.

Chips Neuromórficos y Cuánticos

Mirando más allá, los chips neuromórficos intentan imitar la arquitectura del cerebro para ofrecer un rendimiento de redes neuronales rápido y eficiente en energía, mientras que los chips cuánticos aprovechan los efectos mecánicos cuánticos para resolver ciertos problemas más rápido que las computadoras clásicas. Estas son aún áreas de investigación emergentes, pero podrían convertirse en aceleradores importantes en el futuro.

La tendencia general en la computación es hacia arquitecturas específicas del dominio y una diversidad de aceleradores que se integran junto a las CPU de propósito general para acelerar iAquí está la traducción al español del archivo markdown, con los comentarios del código traducidos al español:

Cargas de trabajo importantes. Las GPU pioneraron este modelo de computación acelerada y siguen siendo uno de los tipos más importantes de aceleradores, pero una gran variedad de otros aceleradores también se están volviendo cada vez más cruciales en muchos dominios de aplicación.

Conceptos básicos del hardware de GPU

Una GPU moderna se compone de varios componentes de hardware clave:

Streaming Multiprocessors (SMs)

El SM es el bloque de construcción básico de la arquitectura de GPU de NVIDIA. Cada SM contiene un conjunto de núcleos CUDA (típicamente de 64 a 128) que comparten la lógica de control y la caché de instrucciones. Cada núcleo CUDA tiene una unidad lógica aritmética (ALU) y una unidad de coma flotante (FPU) completamente canalizadas. Típicamente, un chip de GPU tiene entre 16 y 128 SMs, lo que resulta en miles de núcleos CUDA.

Caché de Textura/L1

Cada SM tiene una caché de textura dedicada y una caché L1 para mejorar el rendimiento y reducir el tráfico de memoria. La caché de textura está diseñada para optimizar la localidad espacial y es particularmente efectiva para cargas de trabajo gráficas. La caché L1 maneja las operaciones de memoria (carga, almacenamiento) y proporciona un acceso rápido a los datos con baja latencia.

Memoria Compartida

La memoria compartida es una memoria rápida y en chip que se comparte entre los núcleos CUDA dentro de un SM. Puede utilizarse como una caché programable, lo que permite un mayor ancho de banda y un acceso con menor latencia a los datos que se reutilizan con frecuencia. La memoria compartida se divide en módulos de memoria (bancos) de tamaño igual que se pueden acceder simultáneamente por los núcleos.

Registro de Archivo

Cada SM tiene un gran registro de archivo que proporciona un almacenamiento de baja latencia para los operandos. El registro de archivo se divide entre los hilos residentes en un SM, proporcionando a cada hilo su propio conjunto dedicado de registros. Acceder a un registro generalmente no lleva ciclos de reloj adicionales por instrucción, pero pueden ocurrir retrasos debido a las dependencias de lectura después de escritura y a los conflictos de banco de memoria de registro.

Planificador de Warps

El planificador de warps es responsable de administrar y programar warps en un SM. Un warp es un grupo de 32 hilos que se ejecutan de manera concurrente en los núcleos CUDA.Aquí está la traducción al español del archivo markdown, con los comentarios del código traducidos al español:

El planificador warp selecciona los warps que están listos para ejecutarse y los envía a los núcleos, lo que permite una alta utilización y ocultación de la latencia.

Red de interconexión

La red de interconexión conecta los SMs a la caché L2 compartida y a los controladores de memoria de la GPU. Normalmente se implementa como un conmutador de cruces que permite que varios SMs accedan a la caché L2 y a la DRAM de forma simultánea.

Controladores de memoria

Los controladores de memoria manejan todas las solicitudes de lectura y escritura a la DRAM de la GPU. Son responsables de optimizar los patrones de acceso a la DRAM para maximizar la utilización del ancho de banda. Las GPU modernas tienen interfaces DRAM muy anchas (de 256 bits a 4096 bits) y admiten tecnologías de memoria de alto ancho de banda como GDDR6 y HBM2.

Núcleos RT y Núcleos Tensor

Las GPU NVIDIA modernas también incluyen unidades de hardware especializadas para acelerar el trazado de rayos (Núcleos RT) y la IA/aprendizaje profundo (Núcleos Tensor). Los Núcleos RT aceleran la traversal de la jerarquía de volúmenes delimitadores (BVH) y las pruebas de intersección de rayos y triángulos, mientras que los Núcleos Tensor proporcionan operaciones de multiplicación de matrices y convolución de alto rendimiento.

Estos componentes de hardware trabajan juntos para permitir que las GPU logren un rendimiento computacional y un ancho de banda de memoria muy altos, lo que las hace adecuadas para cargas de trabajo paralelas en gráficos, HPC y IA. La arquitectura altamente paralela y las unidades de hardware especializadas de las GPU modernas les permiten ofrecer un rendimiento que es varios órdenes de magnitud superior al de los CPUs de propósito general en determinadas cargas de trabajo.

Una breve historia de las GPU

La historia de las GPU se remonta a los primeros días de la aceleración gráfica 3D en la década de 1990:

  • Década de 1990: Los primeros aceleradores 3D como 3dfx Voodoo y NVIDIA RIVA TNT comenzaron a aparecer a mediados de la década de 1990 para descargar el renderizado de gráficos 3D del CPU. Estos eran dispositivos de función fija optimizados para un conjunto específico de API gráficas y carecían de capacidad de programación.

  • 1999: NVIDIA introdujo la GeForce 256, la primera GPU que implementaba hardware para transformación y iluminación (T&L) además del renderizado 3D estándar.Aquí está la traducción al español del archivo markdown, con los comentarios traducidos, pero sin traducir el código:

peline. Podría procesar 10 millones de polígonos por segundo, un hito importante en el rendimiento gráfico de consumo.

  • 2001: NVIDIA lanzó la GeForce 3, que introdujo el sombreado de vértices y píxeles programable, abriendo la puerta a efectos visuales más realistas y dinámicos. Esto marcó el comienzo de la transición de las tuberías gráficas de función fija a las programables.

  • 2006: El lanzamiento de la GeForce 8800 GTX de NVIDIA marcó un punto de inflexión importante, ya que fue la primera GPU en admitir el modelo de programación CUDA, lo que permitió a los desarrolladores utilizar la GPU para el cálculo de propósito general (GPGPU) más allá de solo gráficos. Contaba con 128 núcleos CUDA y podía alcanzar más de 500 GFLOPS de rendimiento.

  • 2008: Apple, AMD, Intel y NVIDIA formaron el grupo de trabajo OpenCL para desarrollar un estándar abierto para la programación paralela en sistemas heterogéneos. OpenCL proporcionó una alternativa independiente del proveedor a CUDA, aunque CUDA siguió siendo la plataforma GPGPU más utilizada.

  • 2010: NVIDIA lanzó la arquitectura Fermi, que contaba con hasta 512 núcleos CUDA, una jerarquía de caché unificada L1/L2, soporte de memoria ECC y un mejor rendimiento en precisión doble. Esto hizo que las GPU fueran viables para una gama más amplia de aplicaciones de HPC y cálculo científico.

  • 2016: NVIDIA presentó la arquitectura Pascal con la Tesla P100, que contaba con memoria HBM2 de alta ancho de banda, hasta 3584 núcleos CUDA y núcleos FP16 especializados para el aprendizaje profundo. El P100 podía entregar más de 10 TFLOPS de rendimiento, consolidando a las GPU como la plataforma de elección para el entrenamiento de IA.

  • 2018: NVIDIA lanzó la arquitectura Turing, que introdujo los núcleos RT para el trazado de rayos en tiempo real y los núcleos Tensor para la aceleración de la inferencia de IA. Turing marcó un hito significativo en la arquitectura de GPU, ya que expandió las capacidades de la GPU más allá de la simple rasterización y GPGPU, para incluir técnicas de renderizado avanzadas y aceleración de IA.

Conclusión

Durante las últimas dos décadas, las GPU han evolucionado de aceleradores gráficos de función fija a aceleradores altamente programables.Aquí está la traducción al español del archivo markdown:

Motores de computación eficientes en energía que desempeñan un papel fundamental en una amplia gama de aplicaciones, desde los juegos y la visualización hasta la computación de alto rendimiento y la inteligencia artificial. Las innovaciones arquitectónicas clave que han permitido esta transformación incluyen:

  • La introducción del sombreado programable con soporte para ramificación y bucles
  • Arquitecturas de sombreado unificadas que permiten que las mismas unidades de procesamiento se utilicen para diferentes tareas de sombreado
  • La adición de soporte para modelos de programación de propósito general como CUDA y OpenCL
  • Aumento de la eficiencia energética mediante el uso extensivo de multihebra para ocultar la latencia de la memoria y mantener las unidades aritméticas utilizadas
  • Mejoras continuas en el ancho de banda de memoria y la introducción de tecnologías de memoria de alto ancho de banda como GDDR6 y HBM2
  • La incorporación de unidades de función fija para trazado de rayos y procesamiento de tensores para acelerar el renderizado y las cargas de trabajo de IA

Mirando hacia el futuro, está claro que la especialización y la computación heterogénea seguirán siendo impulsores clave para mejorar el rendimiento y la eficiencia. Las GPU están bien posicionadas para permanecer a la vanguardia de estas tendencias, dada su herencia de procesamiento paralelo eficiente en energía y su capacidad para incorporar funcionalidad específica del dominio manteniendo la programabilidad de propósito general. Técnicas como los diseños basados en chiplets y las tecnologías de empaquetado avanzadas permitirán que las GPU escalen a niveles aún más altos de rendimiento e integren aún más funcionalidad con el tiempo.

Al mismo tiempo, la aplicabilidad de la aceleración de GPU continúa creciendo a medida que más y más cargas de trabajo en computación científica, análisis de datos y aprendizaje automático exhiben el tipo de paralelismo de grano fino en el que las GPU sobresalen. Con su capacidad para acelerar estas y otras aplicaciones emergentes, las GPU están listas para desempeñar un papel cada vez más importante en impulsar los avances futuros en la computación. Comprender su arquitectura es clave para aprovechar todo su potencial.