- HipKittens es una colección de primitivas de programación diseñada para extraer el rendimiento potencial de las GPU de AMD, optimizando el acceso a memoria, la planificación y la reutilización de caché
- La GPU AMD MI355X tiene una estructura de 256 unidades de cómputo y 8 chiplets (XCD), y ofrece un archivo de registros grande e instrucciones de núcleo matricial detalladas
- A diferencia de NVIDIA, AMD no tiene reasignación de registros, instrucciones matriciales asíncronas ni
mbarrier, por lo que en lugar de wave specialization resultan más efectivos los esquemas de planificación de 8-wave ping-pong y 4-wave interleave
- HipKittens mejora la localidad de caché L2 y LLC mediante una planificación de grid consciente de chiplets, logrando mejoras en ancho de banda máximo y TFLOPS en operaciones GEMM y Attention
- Este enfoque compensa la falta de madurez del software en el ecosistema de GPU de AMD y sienta una base para ampliar la escalabilidad del cómputo de IA sobre hardware diverso
Arquitectura y características de rendimiento de las GPU AMD CDNA
- La GPU AMD MI355X incluye 256 unidades de cómputo (CU), y cada CU está compuesta por 4 SIMD
- Un SIMD ejecuta una wave de 64 hilos, en contraste con el warp de 32 hilos de NVIDIA
- La MI355X tiene un 70% del SRAM de la B200 (165 KB) y carece de funciones como instrucciones asíncronas de multiplicación matricial, reasignación de registros, aceleración de memoria tensorial y
mbarrier
- En cambio, ofrece un archivo de registros 2 veces más grande y 60% más procesadores (256 CU frente a 160 SM)
- Soporta instrucciones de núcleo matricial pequeñas y detalladas, y existe una función de carga directa de memoria global a memoria compartida (similar a TMA)
- AMD adopta una arquitectura de chiplets compuesta por 8 chiplets (XCD); cada XCD tiene su propia caché L2 independiente, y por encima existe una caché LLC
- Según la tabla, la MI355X ofrece un rendimiento de BF16 2.5 PFLOPs, MXFP8 5.0 PFLOPs y MXFP6 10.1 PFLOPs, junto con 288 GB de capacidad de memoria y 8 TB/s de ancho de banda
Retos de diseño de kernels para AMD
- Optimización de acceso a memoria: debido a las limitaciones del compilador HIPCC y al comportamiento de I/O no público, es importante diseñar la disposición de datos y los patrones de swizzle
- Planificación dentro del procesador: AMD debe aprovechar el archivo de registros y las instrucciones matriciales pequeñas en lugar de depender de la memoria compartida
- Planificación entre procesadores: debido a la estructura basada en chiplets, es necesario distribuir el trabajo considerando efectos NUMA a nivel de caché
Patrones de acceso a memoria de HipKittens
- HipKittens (HK) usa tiles como unidad básica de datos y ofrece funciones de operación similares a PyTorch
- Un tile se define por tipo de dato, tamaño y layout, y mediante metaprogramación con plantillas de C++ se adapta a distintas entradas
- Planificación de registros: como HIPCC no puede usar ciertos registros como entradas MFMA, HK ofrece una función explícita de fijación de registros
- Esto permite que el desarrollador especifique directamente los registros para escribir kernels de máximo rendimiento
- Layout de registros: en AMD, el layout cambia según el tipo de dato y la forma de la matriz, así que no existe un único patrón de swizzle
- Por ejemplo, un tile bf16 de 16×16 y un tile bf16 de 16×32 requieren patrones de swizzle distintos
- Estructura de fases de instrucciones: las instrucciones de memoria compartida de AMD tienen grupos de fases no contiguos y poca documentación interna
- HK ofrece un solver obtenido por ingeniería inversa para manejar esto
- Generación de direcciones: AMD soporta cargas asíncronas de HBM a memoria compartida y realiza optimización con swizzle de direcciones HBM
Planificación dentro del procesador: patrones de wave
- Wave specialization es efectiva en NVIDIA, pero en AMD degrada el rendimiento por la ausencia de reasignación de registros
- Las waves productoras ocupan registros innecesarios, y las consumidoras sufren spill por falta de registros
- En los experimentos de HK, wave specialization provoca en AMD menor intensidad aritmética y cuellos de botella de memoria
- Ejemplo: en GEMM, la configuración HK 0/8 alcanza 1605 TFLOPs, mientras CUTLASS llega a 1570 TFLOPs
- Patrones de planificación alternativos
- 8-wave ping-pong: dos waves ejecutan alternadamente clústeres de memoria/cómputo
- 4-wave interleave: una wave intercala finamente memoria y cómputo
- El esquema de 8-wave produce código más conciso, mientras que 4-wave es más detallado pero más extenso
- En GEMM y Attention Forward, 8-wave logra rendimiento de nivel SoTA
Planificación entre procesadores: enfoque consciente de chiplets
- La AMD MI355X tiene 8 chiplets XCD, y cada chiplet cuenta con una caché L2 independiente
- Como los bloques de hilos se asignan a los chiplets en esquema round-robin, el orden del grid afecta directamente la eficiencia de reutilización de caché
- Una disposición simple en row-major tiene una tasa baja de reutilización de caché L2, lo que provoca pérdida de ancho de banda
- Ejemplo: L2 55%, LLC 95%, 15.1 TB/s, 1113 TFLOPs
- HK introduce una planificación de grid consciente de chiplets para aprovechar al mismo tiempo la localidad de caché L2 y LLC
- Agrupa bloques de hilos por regiones adyacentes de la matriz de salida para maximizar la reutilización de datos de entrada
Ejemplos de kernels reales
- El hot loop de los kernels de Attention Forward y BF16 GEMM usa el esquema de 8-wave ping-pong de HK
- Cada loop ejecuta alternadamente clústeres de Compute–Memory y se sincroniza con una schedule barrier
- En el ejemplo de código, operaciones de HK como
mma_AtB, load, exp2, col_sum se usan repetidamente
Conclusión: AMD en la era de la IA multi-silicon
- HipKittens logra rendimiento competitivo en AMD CDNA3 y CDNA4
- Hay tres claves: acceso a memoria optimizado, planificación de waves centrada en AMD y planificación de grid consciente de chiplets
- Los kernels de HK alcanzan el mejor rendimiento dentro del ecosistema AMD y compiten incluso con kernels de NVIDIA Blackwell
- Para la diversidad del cómputo de IA, hace falta ampliar la accesibilidad a las GPU de AMD, e HipKittens aporta la base de software clave para ello
- La mejora de la planificación de registros en HIPCC se señala como un área importante de avance futuro
1 comentarios
Opiniones en Hacker News