Un Streaming Multiprocessor (SM) es la unidad de ejecución principal en la arquitectura de una GPU moderna, como las de NVIDIA o AMD. Cada SM está compuesto por un conjunto de recursos de cómputo, incluyendo múltiples núcleos de procesamiento (conocidos como CUDA Cores en NVIDIA o Stream Processors en AMD), unidades de carga/almacenamiento, unidades de funciones especiales (SFUs), unidades de memoria caché L1 y memoria compartida programable (shared memory). Su diseño está optimizado para el ejecución masivamente paralela de operaciones aritméticas y lógicas, procesando datos en 'warps' o 'wavefronts' (grupos de hilos que ejecutan la misma instrucción en diferentes datos). La arquitectura de un SM permite una alta eficiencia al ocultar la latencia de memoria y maximizar el throughput computacional.
La implementación más prominente de los Streaming Multiprocessors se encuentra en las GPUs de NVIDIA, donde cada generación de arquitectura (ej. Ampere, Hopper) introduce mejoras en el diseño y la cantidad de SMs por GPU, así como en los recursos dentro de cada SM (más CUDA Cores, Tensor Cores, RT Cores, etc.). Por ejemplo, una GPU NVIDIA A100 basada en Ampere puede tener 108 SMs, cada uno con 64 CUDA Cores FP32, 32 CUDA Cores FP64 y 4 Tensor Cores de tercera generación. AMD utiliza un concepto similar con sus 'Compute Units' (CUs) o 'Workgroup Processors' (WGPs) en sus GPUs Radeon, que también agrupan múltiples procesadores de flujo y recursos de memoria para el procesamiento paralelo. Estos SMs son la base para acelerar cargas de trabajo intensivas en cómputo como el entrenamiento de modelos de Machine Learning, simulaciones científicas, renderizado gráfico y minería de criptomonedas.
Para un arquitecto de sistemas, comprender el SM es crucial porque define la granularidad del paralelismo y el rendimiento de una GPU. La cantidad de SMs y los recursos dentro de cada uno (CUDA Cores, Tensor Cores, memoria compartida) dictan la capacidad de cómputo total y la eficiencia para diferentes tipos de cargas de trabajo. Un arquitecto debe considerar cómo el software (kernels CUDA, OpenCL, etc.) se mapea a la arquitectura del SM para optimizar la utilización de recursos, minimizar la contención y maximizar el throughput. Decisiones como la elección de la GPU, la estrategia de particionamiento de datos, la gestión de la memoria compartida y la sincronización de hilos impactan directamente en el rendimiento. Entender los trade-offs entre el número de SMs, la frecuencia de reloj y la capacidad de memoria es fundamental para diseñar sistemas escalables y eficientes para aplicaciones de alto rendimiento y Machine Learning.