AMX, o coprocessador oculto do Apple M1
(medium.com)Apple Matrix Coprocessor
-
Um processador dedicado a matrizes que nunca foi mencionado no anúncio do M1
-
Matrizes são muito usadas em processamento de imagem, machine learning, reconhecimento de voz/escrita, reconhecimento facial, compressão e processamento de mídia de áudio/vídeo
-
Isso não é trabalho do Neural Engine? Qual é a diferença em relação ao Neural Engine?
→ GPU e Neural Engine são accelerators (aceleradores)
→ É ineficiente que a CPU trabalhe para preencher o espaço de memória que os aceleradores vão usar
→ Nesse momento, o coprocessador observa as instruções (spy) e processa isso no lugar
→ Para usar isso, é preciso definir um conjunto de instruções separado
→ A ARM vinha recusando a inclusão de instruções customizadas, mas desde 2019 começou a oferecer extensões que tornam isso possível
→ Esse provavelmente é o motivo de as instruções AMX não aparecerem na documentação oficial
- Então qual é a diferença em relação ao SIMD Vector Engine presente na ARM?
→ SIMD: Single Instruction Multiple Data
→ Uma forma de obter alto desempenho ao executar a mesma operação em vários dados
→ Está relacionado a operações com matrizes
→ Mas o SIMD, como a ALU e a FPU, é embutido na CPU, enquanto o coprocessador é externo
→ O antigo Intel 8087 (FPU) tinha mais transistores do que o 8086, então naquela época era difícil colocá-los juntos. Com a evolução tecnológica, o número de transistores aumentou e a FPU passou a ser embutida na CPU, fazendo esse modelo desaparecer
- Não está claro por que o AMX não foi colocado dentro do núcleo Firestorm
→ Talvez tenha sido mais fácil deixá-lo separado para trabalhar em paralelo com a CPU,
→ e, do ponto de vista da Apple, ela também pode ter preferido manter fora da CPU elementos que não fazem parte do padrão ARM.
- Então por que o AMX ficou escondido?
→ Se o AMX não aparece na documentação oficial, como descobriram sua existência?
→ Dougal Johnson descobriu isso por meio de engenharia reversa
→ A Apple oferece várias funções por meio do Accelerate, seu framework para operações matriciais
⇨ vImage : processamento de imagem de alto nível. Conversão de formatos e manipulação de imagens
⇨ BLAS : álgebra linear (operações com matrizes e vetores)
⇨ BNNS : redes neurais e treinamento
⇨ vDSP : processamento digital de sinais, como transformada de Fourier. Operações matemáticas para processamento de imagem ou áudio
⇨ LAPACK : funções de álgebra linear de alto nível, equações lineares etc.
→ Essa biblioteca Accelerate acelera os cálculos usando o AMX
→ Se as instruções em si fossem divulgadas, o ecossistema ARM teria se fragmentado (nem a ARM nem a Apple querem isso)
→ Ao não divulgar isso e expor apenas o framework, a Apple consegue oferecer alto desempenho e, ao mesmo tempo, manter a liberdade de alterar o conjunto de instruções a qualquer momento
⇨ Isso é possível porque a Apple controla hardware e software ao mesmo tempo
⇨ Se o desenvolvedor trabalhar apenas por meio do Accelerate, também poderá se beneficiar de melhorias futuras
- Quais são as vantagens do Apple Matrix Coprocessor?
→ Segundo uma comparação da Nod Labs com o NEON, a instrução SIMD padrão do ARMv8.6, o AMX é mais de 2 vezes mais rápido
→ Isso não significa que o AMX seja melhor em tudo, mas pelo menos em machine learning e computação de alto desempenho (HPC) ele leva vantagem
2 comentários
O OpenCL desapareceu e, fora a aceleração via Metal, eles também não destacavam tanto o Accelerate,
mas vinham aumentando as bibliotecas a cada ano, então é surpreendente saber que colocaram um coprocessador dedicado para aceleração por hardware.
Este é um texto de acompanhamento do engenheiro que escreveu os dois textos abaixo. Recomendo ler junto também.
→ Ouvir a explicação no YouTube: https://youtu.be/71LlixEBK0o
→ Ouvir a explicação no YouTube: https://youtu.be/F5sIQZvlJc8