SIMT, o Single Instruction, Multiple Threads, es un modelo de ejecución paralela que extiende el concepto de SIMD (Single Instruction, Multiple Data) al nivel de hilos. En SIMT, un conjunto de hilos (conocido como 'warp' o 'wavefront') ejecuta la misma instrucción en paralelo, pero cada hilo opera sobre sus propios datos independientes. A diferencia de SIMD puro, donde los elementos de datos son procesados por una única unidad de ejecución vectorial, SIMT permite que cada hilo tenga su propio contador de programa y pila de ejecución, lo que facilita la gestión de divergencia de control (cuando diferentes hilos toman diferentes caminos de ejecución condicionales) sin perder completamente la eficiencia del paralelismo. La arquitectura subyacente gestiona la sincronización y la ejecución de estos hilos de forma eficiente.
La implementación más prominente de SIMT se encuentra en las unidades de procesamiento gráfico (GPUs) modernas, particularmente en las arquitecturas CUDA de NVIDIA y ROCm de AMD. En CUDA, los 'warps' son grupos de 32 hilos que ejecutan la misma instrucción. Cuando hay divergencia de control (por ejemplo, una sentencia `if/else` donde algunos hilos toman la rama `if` y otros la `else`), el hardware ejecuta secuencialmente cada rama, enmascarando los hilos que no pertenecen a la rama actual. Esto permite que los programas de GPU manejen la lógica condicional de manera más flexible que SIMD puro, aunque con una penalización de rendimiento si la divergencia es alta. Frameworks de computación de alto rendimiento como OpenCL y SYCL también exponen este modelo de ejecución para programar GPUs y otros aceleradores.
Para un arquitecto de sistemas, entender SIMT es crucial al diseñar soluciones que aprovechen la computación acelerada por GPU. Permite evaluar la idoneidad de las GPUs para cargas de trabajo específicas, especialmente aquellas con alto paralelismo de datos pero también cierta lógica de control. La eficiencia de SIMT depende en gran medida de la coherencia en la ejecución de los hilos; la divergencia de control puede degradar significativamente el rendimiento. Por lo tanto, el diseño de algoritmos y la estructuración de datos deben minimizar la divergencia dentro de los 'warps' para maximizar la utilización del hardware. Un arquitecto debe considerar los trade-offs entre la flexibilidad de programación que ofrece SIMT y la necesidad de optimizar la coalescencia de memoria y la uniformidad del flujo de control para lograr el máximo rendimiento en sistemas heterogéneos.