Articulo de referencia

Una sola instrucción, múltiples hilos.

El modelo de ejecución SIMT ( Instrucción Única, Múltiples Hilos ) se utiliza en la computación paralela. En este modelo, una única unidad de control central transmite una instr...

El modelo de ejecución SIMT ( Instrucción Única, Múltiples Hilos ) se utiliza en la computación paralela. En este modelo, una única unidad de control central transmite una instrucción a varias unidades de procesamiento para que, opcionalmente, ejecuten simultáneamente, de forma síncrona y totalmente independiente, dicha instrucción en paralelo. Cada unidad de procesamiento tiene sus propios registros de datos y direcciones, así como su propia memoria, pero ninguna unidad de procesamiento en la matriz dispone de un contador de programa . En la taxonomía de Flynn de 1972, esta configuración es una variante de SIMD denominada procesador de matriz .

Descripción general del conjunto ILLIAC IV , de la descripción introductoria financiada por ARPA por Steward Denenberg, 15 de julio de 1971 [ 1 ]

El modelo de ejecución SIMT se ha implementado en varias GPU y es relevante para la computación de propósito general en unidades de procesamiento gráfico (GPGPU), por ejemplo, algunas supercomputadoras combinan CPU con GPU: en la ILLIAC IV, esa CPU era una Burroughs B6500 .

El modelo de ejecución SIMT sigue siendo solo una forma de presentar al programador lo que fundamentalmente sigue siendo un concepto SIMD basado en predicados. Los programas deben diseñarse teniendo en cuenta el SIMD basado en predicados. Dado que la emisión de instrucciones (como una difusión síncrona) es gestionada por la única unidad de control, SIMT no puede, por diseño, permitir que los hilos (PE, carriles) diverjan mediante bifurcaciones, porque solo la unidad de control tiene un contador de programa. Por lo tanto, siempre que sea posible, se deben evitar las bifurcaciones. [ 2 ] [ 3 ]

Diferencias con otros modelos

La forma más sencilla de entender SIMT es imaginar un sistema multinúcleo ( MIMD ), donde cada núcleo tiene su propio archivo de registros, sus propias ALU (tanto SIMD como escalares) y su propia caché de datos, pero que, a diferencia de un sistema multinúcleo estándar que tiene múltiples cachés de instrucciones y decodificadores independientes, así como múltiples registros de contador de programa independientes, las instrucciones se transmiten de forma síncrona a todos los núcleos SIMT desde una sola unidad con una sola caché de instrucciones y un solo decodificador de instrucciones que lee las instrucciones utilizando un solo contador de programa.

La diferencia clave entre los carriles SIMT y SIMD es que cada una de las unidades de procesamiento en la matriz SIMT tiene su propia memoria local y puede tener un puntero de pila completamente diferente (y por lo tanto realizar cálculos en conjuntos de datos completamente diferentes), mientras que las ALU en los carriles SIMD no saben nada sobre la memoria en sí, y no tienen archivo de registros . Esto se ilustra con el ILLIAC IV . Cada núcleo SIMT se denominaba elemento de procesamiento (PE), y cada PE tenía su propia memoria separada (PEM). Cada PE tenía un "registro de índice" que era una dirección en su PEM. [ 4 ] [ 1 ] En el ILLIAC IV, el Burroughs B6500 manejaba principalmente E/S, pero también enviaba instrucciones a la unidad de control (CU), que luego se encargaba de la difusión a los PE. Además, el B6500, en su función de procesador de E/S, tenía acceso a todas las PEM.

Además, cada PE puede activarse o desactivarse. Si un PE determinado está inactivo, no ejecutará la instrucción que le transmita la unidad de control; en su lugar, permanecerá inactivo hasta que se active. Se puede decir que cada PE es predicado .

También es importante destacar la diferencia entre SIMT y SPMD : un solo programa, múltiples datos. SPMD, al igual que los sistemas multinúcleo estándar, tiene múltiples contadores de programa, mientras que SIMT solo tiene uno: en la (única) unidad de control.

Historia

En la taxonomía de Flynn , los artículos originales de Flynn citan dos ejemplos históricos de procesadores SIMT denominados "procesadores de matriz": el SOLOMON y el ILLIAC IV . [ 1 ] NVIDIA introdujo SIMT en la microarquitectura de GPU Tesla con el chip G80. [ 5 ] [ 6 ] ATI Technologies , ahora AMD , lanzó un producto competidor un poco más tarde, el 14 de mayo de 2007, el chip GPU "R600" basado en TeraScale 1 .

Descripción

Los procesadores SIMT ejecutan múltiples "hilos" (o "elementos de trabajo" o "secuencia de operaciones de carril SIMD"), de forma sincronizada, bajo el control de una única unidad central. El modelo comparte características comunes con los carriles SIMD . [ 7 ]

El ILLIAC IV documentó exhaustivamente su mecanismo de "ramificación" , precursor del enmascaramiento de predicados moderno .

Como el tiempo de acceso de todos los tipos de RAM más comunes (por ejemplo, DDR SDRAM , GDDR SDRAM , XDR DRAM , etc.) sigue siendo relativamente alto, creando un efecto llamado " muro de memoria" , los ingenieros idearon una forma de ocultar la latencia que inevitablemente acompaña a cada acceso a la memoria. Como se muestra en el diseño del ILLIAC IV, los PE individuales funcionan a una velocidad de reloj más baja que una CPU estándar, pero compensan esta falta de velocidad de reloj ejecutando muchos más PE en paralelo. El resultado es que la velocidad más baja de cada PE se ajusta mejor a la velocidad de la RAM. Esta estrategia funciona gracias a que las cargas de trabajo de la GPU son inherentemente paralelas, y un ejemplo de ello es el renderizado en mosaico .

SIMT tiene como objetivo limitar la sobrecarga de búsqueda de instrucciones , [ 8 ] es decir, la latencia que conlleva el acceso a la memoria, y se utiliza en las GPU modernas (como las de NVIDIA y AMD ) en combinación con la "ocultación de latencia" para permitir una ejecución de alto rendimiento a pesar de la considerable latencia en las operaciones de acceso a la memoria. Al igual que con SIMD, otro beneficio importante es que la lógica de control se comparte entre muchos carriles de datos, lo que conlleva un aumento de la densidad computacional. Un bloque de lógica de control puede gestionar N carriles de datos, en lugar de replicar la lógica de control N veces.

Una desventaja de la ejecución SIMT es que, al haber un único contador de programa, el "enmascaramiento de predicados" es la única estrategia para controlar la ejecución por PE, lo que conlleva una baja utilización en algoritmos complejos.

Terminología

Las GPU de NVIDIA cuentan con un concepto de grupo de hilos denominado "warp", compuesto por 32 hilos de hardware que se ejecutan de forma sincronizada. El equivalente en las GPU de AMD es "wavefront" , aunque está compuesto por 64 hilos de hardware. En OpenCL, se denomina "subgrupo" para referirse a los términos abstractos warp y wavefront. CUDA también dispone de las instrucciones warp shuffle, que agilizan el intercambio de datos en paralelo dentro del grupo de hilos [ 10 ] , y OpenCL permite una funcionalidad similar mediante la extensión cl_khr_subgroups [ 11 ] .

Véase también

Referencias

  1. 1 2 3 "Descripción introductoria del sistema Illiac IV" (PDF) . Archivado del original (PDF) el 27 de abril de 2024.
  2. "Modelo SIMT - Plataforma de chips de computación de propósito general de código abierto - Blue Porcelain (GPGPU)" . gpgpuarch.org . Consultado el 30 de julio de 2025 .
  3. "Arquitectura de procesadores gráficos de propósito general - Capítulo 3 - El núcleo SIMT: Flujo de datos de instrucciones y registros (Parte 1) | FANnotes" . www.fannotes.me . Consultado el 30 de julio de 2025 .
  4. "El sistema Iliac IV" .
  5. "Documento técnico sobre la arquitectura de computación Fermi de NVIDIA" (PDF) . www.nvidia.com . NVIDIA Corporation. 2009. Consultado el 17 de julio de 2014 .
  6. Lindholm, Erik; Nickolls, John; Oberman, Stuart; Montrym, John (2008). "NVIDIA Tesla: una arquitectura unificada de gráficos y computación". IEEE Micro . 28 (2): 6 (Se requiere suscripción) . Bibcode : 2008IMicr..28b..39L . doi : 10.1109/MM.2008.31 . S2CID 2793450 . 
  7. Michael McCool; James Reinders; Arch Robison (2013). Programación paralela estructurada: patrones para una computación eficiente . Elsevier. pág. 52. 
  8. Rul, Sean; Vandierendonck, Hans; D'Haene, Joris; De Bosschere, Koen (2010). Un estudio experimental sobre la portabilidad del rendimiento de los kernels de OpenCL . Simposio sobre aceleradores de aplicaciones en computación de alto rendimiento (SAAHPC). hdl : 1854/LU-1016024 .
  9. John L. Hennessy; David A. Patterson (2019). Arquitectura de computadoras: un enfoque cuantitativo (6.ª ed.). Morgan Kaufmann. pp. 314 y ss. ISBN   9780128119051.
  10. "Reducciones paralelas más rápidas en Kepler" . Blog técnico de NVIDIA . 14 de febrero de 2014.
  11. "cl_khr_subgroups(3)" . registry.khronos.org .
Obtenido de " https://en.wikipedia.org/w/index.php?title=Single_instruction,_multiple_threads&oldid=1358760904 "