AMX, el coprocesador oculto del Apple M1
(medium.com)Apple Matrix Coprocessor
-
Un procesador dedicado a matrices del que no se habló en absoluto durante el anuncio del M1
-
Las matrices se usan mucho en procesamiento de imágenes, aprendizaje automático, reconocimiento de voz/escritura a mano, reconocimiento facial, compresión y procesamiento de medios de audio/video
-
¿No se encarga de eso el Neural Engine? ¿En qué se diferencia del Neural Engine?
→ La GPU o el Neural Engine son aceleradores (Accelerator)
→ Es ineficiente que la CPU trabaje para llenar el espacio de memoria que usarán los aceleradores
→ En ese momento, al observar (spy) esas instrucciones, el coprocesador las procesa en su lugar
→ Para usar esto, hay que definir un conjunto de instrucciones aparte
→ ARM se había negado a incluir instrucciones personalizadas, pero desde 2019 empezó a ofrecer extensiones que lo permiten
→ Probablemente por eso las instrucciones AMX no aparecen en la documentación oficial
- Entonces, ¿en qué se diferencia del motor vectorial SIMD incluido en ARM?
→ SIMD : Single Instruction Multiple Data
→ Es una forma de lograr alto rendimiento cuando se ejecuta la misma operación sobre varios datos
→ Está relacionado con las operaciones matriciales
→ Pero SIMD, como la ALU o la FPU, está integrado en la CPU, mientras que el coprocesador es externo
→ El antiguo 8087 de Intel (FPU) tenía incluso más transistores que el 8086, así que en esa época era difícil integrarlo. Con el avance tecnológico aumentó la cantidad de transistores y la FPU pasó a integrarse en la CPU, por lo que desapareció
- No está claro por qué AMX no se integró dentro del núcleo Firestorm
→ Probablemente fue más fácil dejarlo aparte para que trabajara en paralelo con la CPU,
→ y desde la perspectiva de Apple, quizá querían dejar fuera del núcleo cosas que no fueran parte del estándar ARM.
- Entonces, ¿por qué AMX está oculto?
→ Si AMX no aparece en la documentación oficial, ¿cómo se supo de su existencia?
→ Dougal Johnson lo descubrió mediante ingeniería inversa
→ Apple ofrece varias funciones a través de Accelerate, su framework para operaciones matriciales
⇨ vImage : procesamiento de imágenes de alto nivel. Conversión de formatos y manipulación de imágenes
⇨ BLAS : álgebra lineal (operaciones con matrices y vectores)
⇨ BNNS : redes neuronales y aprendizaje
⇨ vDSP : procesamiento digital de señales como la transformada de Fourier. Operaciones matemáticas para procesamiento de imágenes o audio
⇨ LAPACK : funciones de álgebra lineal de alto nivel, ecuaciones lineales, etc.
→ La biblioteca Accelerate acelera los cálculos usando AMX
→ Si hubieran hecho públicas las instrucciones en sí, el ecosistema ARM se habría fragmentado (algo que ni ARM ni Apple quieren)
→ Apple no lo publica y en su lugar lo expone a través de un framework, con lo que ofrece alto rendimiento y al mismo tiempo puede modificar el conjunto de instrucciones en cualquier momento
⇨ Esto es posible porque Apple controla al mismo tiempo el hardware y el software
⇨ Si los desarrolladores trabajan solo a través de Accelerate, también podrán beneficiarse de futuras mejoras
- ¿Cuáles son las ventajas del Apple Matrix Coprocessor?
→ Según la comparación de Nod Labs con NEON, la instrucción SIMD estándar de ARMv8.6, AMX es más de 2 veces más rápido
→ Eso no significa que AMX sea mejor en todo, pero al menos en aprendizaje automático o computación de alto rendimiento (HPC), AMX lleva la delantera
2 comentarios
Desapareció OpenCL y, aparte de la aceleración con Metal, no se hizo tanto énfasis en Accelerate,
pero me sorprende que, mientras iban aumentando las bibliotecas cada año, hayan incluido un coprocesador dedicado para la aceleración por hardware.
Es un artículo de seguimiento del ingeniero que escribió los dos textos de abajo. Les recomiendo leerlos también.
→ Escuchar la explicación en YouTube: https://youtu.be/71LlixEBK0o
→ Escuchar la explicación en YouTube: https://youtu.be/F5sIQZvlJc8