Articulo de referencia

Fermi (microarquitectura)

Fotografía de Enrico Fermi, epónimo de la arquitectura. Fermi es el nombre en clave de una microarquitectura de unidad de procesamiento gráfico (GPU) desarrollada por Nvidia , l...

Fotografía de Enrico Fermi, epónimo de la arquitectura.

Fermi es el nombre en clave de una microarquitectura de unidad de procesamiento gráfico (GPU) desarrollada por Nvidia , lanzada al mercado en abril de 2010 como sucesora de la microarquitectura Tesla . Fue la microarquitectura principal utilizada en las series GeForce 400 y 500. Todas las GPU Fermi de escritorio se fabricaron con tecnología de 40 nm, mientras que las GPU Fermi para portátiles se fabricaron con tecnologías de 40 nm y 28 nm . Fermi es la microarquitectura más antigua de Nvidia que recibe soporte para la API de renderizado Direct3D 12 feature_level 11 de Microsoft.

A Fermi le siguió Kepler , y se utilizó junto con Kepler en las series GeForce 600 , GeForce 700 y GeForce 800 , en las dos últimas solo en GPU para dispositivos móviles .

En el mercado de las estaciones de trabajo, Fermi se utilizó en la serie Quadro x000, en los modelos Quadro NVS y en los módulos de computación Nvidia Tesla .

La arquitectura recibe su nombre de Enrico Fermi , un físico italiano.

Descripción general

La Nvidia GeForce GTX 480 de la línea GeForce 400 de tarjetas gráficas; la primera versión en incorporar la microarquitectura Fermi (GF100-375-A3).
Figura 1. Convención de la arquitectura Fermi de Nvidia en figuras: naranja - planificación y despacho; verde - ejecución; azul claro - registros y cachés.
Imagen del chip de la GPU GF100 que se encuentra dentro de las tarjetas GeForce GTX 470.

Las unidades de procesamiento gráfico ( GPU ) de Fermi cuentan con 3.000 millones de transistores y en la figura 1 se muestra un esquema.

  • Multiprocesador de flujo (SM): compuesto por 32 núcleos CUDA (consulte las secciones Multiprocesador de flujo y Núcleo CUDA).
  • Planificador global GigaThread: distribuye bloques de subprocesos a los planificadores de subprocesos SM y gestiona los cambios de contexto entre subprocesos durante la ejecución (véase la sección Planificación de Warp).
  • Interfaz de host: conecta la GPU a la CPU a través de un bus PCI-Express v2 (velocidad de transferencia máxima de 8  GB/s).
  • DRAM: admite hasta 6  GB de memoria DRAM GDDR5 gracias a su capacidad de direccionamiento de 64 bits (consulte la sección Arquitectura de memoria).
  • Frecuencia de reloj: 1,5  GHz (dato no publicado por Nvidia, pero estimado por Insight 64).
  • Rendimiento máximo: 1,5 TFlops.
  • Frecuencia de reloj de la memoria global: 2  GHz.
  • Ancho de banda de la DRAM : 192  GB/s.
  • Compatibilidad con decodificación H.264 FHD.

multiprocesador de transmisión

Cada SM cuenta con 32 núcleos CUDA de precisión simple, 16 unidades de carga/almacenamiento, cuatro unidades de funciones especiales (SFU), un  bloque de 64 KB de memoria integrada de alta velocidad (véase la subsección Memoria compartida L1) y una interfaz con la caché L2 (véase la subsección Caché L2).

Unidades de carga/almacenamiento

Permitir que se calculen las direcciones de origen y destino para 16 hilos por ciclo de reloj. Cargar y almacenar los datos desde/hacia la caché o la DRAM .

Unidades de Funciones Especiales (UFE)

Ejecuta instrucciones trascendentales como seno, coseno, recíproco y raíz cuadrada. Cada SFU ejecuta una instrucción por hilo y por ciclo de reloj; un warp se ejecuta durante ocho ciclos de reloj. La tubería de la SFU está desacoplada de la unidad de despacho, lo que permite que esta última emita instrucciones a otras unidades de ejecución mientras la SFU está ocupada.

núcleo CUDA

Unidad aritmético-lógica entera (ALU)

Admite precisión de 32 bits para todas las instrucciones, de acuerdo con los requisitos de los lenguajes de programación estándar. También está optimizado para admitir eficientemente 64 bits en modelos de estaciones de trabajo y servidores, pero su rendimiento se ve limitado artificialmente en las versiones para el consumidor.

Unidad de punto flotante (FPU)

Implementa el nuevo estándar de punto flotante IEEE 754-2008, proporcionando la instrucción de multiplicación-suma fusionada (FMA) para aritmética de precisión simple y doble. Se pueden realizar hasta 16 operaciones de multiplicación-suma fusionadas de doble precisión por SM, por ciclo de reloj. [ 1 ]

Multiplicación-suma fusionada

La multiplicación y suma fusionadas (FMA) realiza la multiplicación y la suma (es decir, A*B+C) con un único paso de redondeo final, sin pérdida de precisión en la suma. La FMA es más precisa que realizar las operaciones por separado.

Programación de warps

La arquitectura Fermi utiliza un planificador de hilos distribuido de dos niveles .

Cada SM puede emitir instrucciones que consumen dos de las cuatro columnas de ejecución verdes que se muestran en el esquema de la figura 1. Por ejemplo, el SM puede combinar 16 operaciones de los 16 núcleos de la primera columna con 16 operaciones de los 16 núcleos de la segunda columna, o 16 operaciones de las unidades de carga/almacenamiento con cuatro de las SFU, o cualquier otra combinación que especifique el programa.

Las operaciones de coma flotante de 64 bits requieren las dos primeras columnas de ejecución, por lo que se ejecutan a la mitad de la velocidad de las operaciones de 32 bits.

Planificador de doble curvatura

A nivel de SM, cada planificador de warps distribuye warps de 32 hilos a sus unidades de ejecución. Cada SM cuenta con dos planificadores de warps y dos unidades de despacho de instrucciones, lo que permite emitir y ejecutar dos warps simultáneamente. El planificador de warps dual selecciona dos warps y emite una instrucción de cada warp a un grupo de 16 núcleos, 16 unidades de carga/almacenamiento o 4 SFU. La mayoría de las instrucciones pueden emitirse simultáneamente; dos instrucciones enteras, dos instrucciones de punto flotante o una combinación de instrucciones enteras, de punto flotante, de carga, de almacenamiento y de SFU pueden emitirse simultáneamente. Las instrucciones de doble precisión no admiten el despacho dual con ninguna otra operación.

Actuación

La potencia de procesamiento teórica de precisión simple de una GPU Fermi en GFLOPS se calcula como 2 (operaciones por instrucción FMA por núcleo CUDA por ciclo) × número de núcleos CUDA × velocidad de reloj del sombreador (en GHz). Cabe señalar que la generación anterior de Tesla podía emitir MAD+MUL a los núcleos CUDA y SFU en paralelo, pero Fermi perdió esta capacidad ya que solo puede emitir 32 instrucciones por ciclo por SM, lo que mantiene sus 32 núcleos CUDA completamente utilizados. [ 2 ] Por lo tanto, no es posible aprovechar las SFU para alcanzar más de 2 operaciones por núcleo CUDA por ciclo.

La potencia de procesamiento teórica de doble precisión de una GPU Fermi es la mitad del rendimiento de precisión simple de las GF100/110. Sin embargo, en la práctica, esta potencia de doble precisión solo está disponible en las tarjetas profesionales Quadro y Tesla , mientras que las tarjetas GeForce para consumidores están limitadas artificialmente a 1/8. [ 3 ]

Memoria

Caché L1 por SM y caché L2 unificada que da servicio a todas las operaciones (carga, almacenamiento y texturizado).

Registros

Cada SM dispone de 32 KB de registros de 32 bits. Cada hilo tiene acceso a sus propios registros, no a los de los demás. El número máximo de registros que puede utilizar un kernel CUDA es 63. El número de registros disponibles se reduce gradualmente de 63 a 21 a medida que aumenta la carga de trabajo (y, por lo tanto, los requisitos de recursos) con el número de hilos. Los registros tienen un ancho de banda muy elevado: aproximadamente 8000  GB/s.

Memoria compartida L1+

Memoria en el chip que puede usarse para almacenar en caché datos para hilos individuales (desbordamiento de registros/caché L1) y/o para compartir datos entre varios hilos (memoria compartida). Esta  memoria de 64 KB puede configurarse como 48  KB de memoria compartida con 16  KB de caché L1, o 16  KB de memoria compartida con 48  KB de caché L1. La memoria compartida permite que los hilos dentro del mismo bloque de hilos cooperen, facilita la reutilización extensiva de datos en el chip y reduce considerablemente el tráfico fuera del chip. La memoria compartida es accesible por los hilos en el mismo bloque de hilos. Proporciona acceso de baja latencia (10-20 ciclos) y un ancho de banda muy alto (1600  GB/s) a cantidades moderadas de datos (como resultados intermedios en una serie de cálculos, una fila o columna de datos para operaciones matriciales, una línea de vídeo, etc.). David Patterson dice que esta memoria compartida utiliza la idea de bloc de notas local [ 4 ].

Memoria local

La memoria local se refiere a una ubicación de memoria utilizada para almacenar registros "desbordados". El desbordamiento de registros ocurre cuando un bloque de hilo requiere más almacenamiento de registros del disponible en un SM. La memoria local se utiliza solo para algunas variables automáticas (que se declaran en el código del dispositivo sin ninguno de los calificadores __device__, __shared__ o __constant__ ). Generalmente, una variable automática reside en un registro excepto en los siguientes casos: (1) Matrices que el compilador no puede determinar que están indexadas con cantidades constantes; (2) Estructuras o matrices grandes que consumirían demasiado espacio de registro; Cualquier variable que el compilador decida desbordar a la memoria local cuando un kernel usa más registros de los disponibles en el SM.

Caché L2

Caché L2 unificada de 768 KB, compartida entre los 16 SM, que gestiona todas las operaciones de carga y almacenamiento desde/hacia la memoria global, incluidas las copias desde/hacia la CPU host, así como las solicitudes de texturas. El subsistema de caché L2 también implementa operaciones atómicas, utilizadas para gestionar el acceso a datos que deben compartirse entre bloques de subprocesos o incluso núcleos.

Memoria global

La memoria global (VRAM) es accesible directamente por todos los subprocesos, así como por el sistema anfitrión a través del bus PCIe. Presenta una alta latencia de entre 400 y 800 ciclos.

Descompresión/compresión de vídeo

Consulte también Nvidia NVDEC (anteriormente llamado NVCUVID) y Nvidia PureVideo .

La tecnología Nvidia NVENC aún no estaba disponible, pero se introdujo en su sucesor, Kepler .

chips Fermi

  • GF100
  • GF104
  • GF106
  • GF108
  • GF110
  • GF114
  • GF116
  • GF117
  • GF119

Véase también

Referencias

  1. "Arquitectura de computación CUDA de próxima generación de NVIDIA: Fermi" (PDF) . 2009. Consultado el 7 de diciembre de 2015 .
  2. Glaskowsky, Peter N. (septiembre de 2009). "Fermi de NVIDIA: La primera arquitectura completa de computación GPU" (PDF) . pág. 22. Recuperado el 6 de diciembre de 2015. Un total de 32 instrucciones de uno o dos warps pueden ser enviadas en cada ciclo a cualquiera de los dos de los cuatro bloques de ejecución dentro de un Fermi SM . 
  3. Smith, Ryan (26 de marzo de 2010). "GeForce GTX 480 y GTX 470 de NVIDIA: 6 meses de retraso, ¿valió la pena la espera?" . AnandTech . pág. 6. Archivado del original el 2 de abril de 2010. Recuperado el 6 de diciembre de 2015. El rendimiento FP64 de la serie GTX 400 está limitado a 1/8 (12,5 %) de su rendimiento FP32, en comparación con lo que el hardware puede hacer de forma nativa de 1/2 (50 %) FP32. 
  4. Patterson, David (30 de septiembre de 2009). "Las 10 principales innovaciones en la nueva arquitectura NVIDIA Fermi y los 3 principales retos futuros" (PDF) . Laboratorio de Investigación de Computación Paralela y NVIDIA . Recuperado el 3 de octubre de 2013 .

General

  • N. Brookwood, "NVIDIA resuelve el enigma de la computación con GPU."
  • PN Glaskowsky, "Fermi de NVIDIA: La primera arquitectura completa de computación GPU."
  • N. Whitehead, A. Fit-Florea, "Precisión y rendimiento: punto flotante y cumplimiento de la norma IEEE 754 para GPU NVIDIA." , 2011.
  • Oberman, SF; Siu, MY (2005). "Un interpolador multifunción de alto rendimiento y eficiente en área". 17.º Simposio IEEE sobre Aritmética Computacional (ARITH'05) . págs. 272–279 . doi : 10.1109/arith.2005.7 . ISBN  0-7695-2366-8. S2CID 14975421 . 
  • R. Farber, "Diseño y desarrollo de aplicaciones CUDA", Morgan Kaufmann, 2011.
  • Nota de aplicación de NVIDIA "Optimización de aplicaciones CUDA para Fermi".
  • Arquitectura Fermi de NVIDIA en Orange Owl Solutions. Archivado el 4 de enero de 2022 en Wayback Machine .