apple m1
irobot

Il processore Apple M1 utilizzato sulla più recente generazione di MacBook e Mac ha suscitato scalpore perché, in combinata con macOS Big Sur, assicura prestazioni nettamente superiori a qualsiasi altro Mac basato su piattaforma Intel. Per molti l’M1 è stata la “rivincita” dell’architettura Arm, su cui è basata la Cpu. Con M1, inoltre, la società di Cupertino è passata ad Apple Silicon, ossia processori basati su Arm e con un’ispirazione costruttiva pressoché identica a quella dei Soc tipicamente presenti su smartphone e tablet. Tant’è che Apple M1 è così descritto dall’azienda della Mela morsicata:

  • Cpu octa core (4 core per massimizzare le prestazioni e 4 per l’efficienza energetica);
  • Gpu octa core
  • Neural engine a 15 core per supportare l’IA e le funzioni ad altissima complessità di elaborazione.

E fin qui è un processore con una geometria presa dai Soc per iOS, potenziato al massimo e reso estremamente brillante, reattivo ed efficiente con macOS e le applicazioni. Anche perché i 32 core complessivi sono gestiti in modo indipendente e modulare, dallo scheduler, per ottimizzare la resa a seconda delle situazioni. I risultati dell’accoppiata M1 e Big Sur hanno subito stupito tutti per la capacità di assicurare performance superiori persino al flagship MacBook Pro 16″, con il vantaggio ulteriore di non incappare in surriscaldamenti eccessivi (e la correlata silenziosità).

Ma non è tutto qui. Perché lo sviluppatore Dougall Johnson ha attuato un processo di ingegneria inversa che lo ha portato a scoprire il segreto del Soc M1: un coprocessore Amx integrato, denominato Apple Matrix e che è stato indicato come “potentissimo”.

Non è la prima volta che si parla di questo Amx ma le informazioni si sono perse in alcuni riferimenti nella parte iniziale di descrizione della piattaforma Apple Silicon. Dunque è arrivato il momento di capire cosa sia davvero questa unità, che riesce a fare la differenza in M1.

Coprocessore e matrice: a cosa servono?

Perché Apple ha deciso di non parlare approfonditamente di questo Amx? Sembra quasi un segreto, nonostante alcune delle specifiche di M1 siano state rese prontamente pubbliche. Ma attenzione: il Neural Engine non va confuso con l’Amx.

Dunque per comprendere cosa è il coprocessore Apple Matrix bisogna parlare di coprocessore e di matrice (traduzione in italiano di matrix).

Una matrice, in termini semplici, è una tabella composta da righe e colonne di informazioni, tipicamente dei numeri. Come una tabella di Excel. La differenza è che nelle celle della matrice sono contenute liste di operazioni, di funzioni e di comportamenti “automatici”. Dato che abbiamo preso come esempio Excel, è bene precisare che le matrici non sono solo di tipo bidimensionali (righe e colonne) ma possono anche essere fatte di una sola riga o di una sola colonna, ciascuna delle quali è definita vettore.

I dati, le informazioni e le operazioni presenti all’interno delle celle possono essere correlate tra loro attraverso funzioni, come per esempio somme, sottrazioni, moltiplicazioni. E ciò può avvenire anche tra più matrici in contemporanea, oltre che sulle singole matrici singolarmente. Non solo: le celle stesse possono essere trattate singolarmente oppure in relazione con un’altra cella della stessa matrice o di un’altra.

Perché stiamo parlando di questo oggetto matematico? Per il semplice motivo che le matrici sono diffusamente impiegate per un vasto numero di occasioni sui computer tanto quanto su smartphone e tablet. Tra cui: processare immagini, eseguire il machine learning, riconoscere il linguaggio parlato o le note scritte a mano, riconoscere i volti, la compressione di file (in zip o simili) e gestire il multimedia audio e video.

Prendiamo il caso del machine learning, che tanta attenzione ha catalizzato nel corso degli ultimi anni sui dispositivi mobili. Perché si raggiunga un’elevata efficienza di elaborazione, non è sufficiente aumentare il numero di core dedicati a questa operazione. Serve un hardware specializzato diverso dalla classica impostazione a nuclei di elaborazione delle Cpu.

Mettiamo ordine a quanto detto finora. Le matrici sono usate in un ampio numero di “oggetti” che usiamo quotidianamente sui dispositivi. Non bastano i core della Cpu per trattarli correttamente. In particolare, gli otto core della Cpu di M1 sono dedicati ad assicurare la massima efficienza con le app più collaudate: da quelle di produttività, fino a quelle per lo studio e il lavoro. Apple ha scelto di integrare un maggior numero di transistor per creare un ulteriore livello di specializzazione dell’hardware per processare immagini, video audio e anche il machine learning. Questo hardware è il coprocessore Amx e gli acceleratori.

Apple Amx e Neural Engine sono differenti

A questo punto la domanda potrebbe sorgere spontanea: in M1 sono previste 16 unità di elaborazione per il machine learning, perché sono diverse da Apple Amx? A cosa serve questo coprocessore? Sono la medesima cosa? Partiamo rispondendo all’ultima domanda: no, Amx e Neural Engine sono differenti e hanno l’uno bisogno dell’altro.

Inoltre, nel caso di M1 coprocessore e acceleratore sono unità differenti. Per esempio, sia la Gpu sia il neural engine sono entrambi acceleratori. Questo perché in entrambi i casi possono contare su un’area di memoria dedicata che la Cpu “riempie” di dati che devono essere processati e su un’altra area di memoria con le istruzioni da seguire. Per la Cpu si tratta di operazioni “time consuming”, cioè che occupano parecchio tempo per essere eseguite nel modo ottimale in quanto coinvolgono numerose funzioni, che vanno eseguite nella giusta sequenza. Infine la Cpu deve attendere i risultati, che sono solo una parte di un compito più grande da eseguire da parte del Soc. Più è alta la frammentazione in piccoli compiti di questo tipo, maggiore è il potenziale di perdita di efficienza complessiva per la Cpu.

Ecco dunque che entra in gioco il coprocessore Amx: provvede a ottimizzare la gestione delle sezioni di memoria dedicate agli acceleratori, abbassando il carico della Cpu. I coprocessori sono studiati per agire prontamente nei confronti di particolari istruzioni che vanno processare. In questo modo la Cpu può delegare parti dell’elaborazione, rimanendo libera per aspetti più cruciali e importanti.

E sono compiti diversi dagli acceleratori (Gpu e Neural Engine), come detto specializzati nell’esecuzione di funzioni specifiche. Il coprocessore Amx è perfetto per risolvere tanti piccoli compiti che affollerebbero la Cpu. Ma questo obbliga lo sviluppatore dell’app a utilizzare in modo efficace l’Amx, definendo nel codice tutto ciò che può essere delegato al coprocessore invece che a un acceleratore. Ciò produce un parallelismo di elaborazione nettamente superiore, lasciando agli acceleratori (Gpu e neural engine) e alla Cpu il compito di eseguire solo quello che è davvero cruciale.

Per la cronaca, questo coprocessore non va confuso con quello utilizato da Intel nelle prime generazioni di Cpu, perché in quel caso era un chip dedicato a velocizzare i calcoli in virgola mobile, mentre rispetto a un modulo Simd (singola istruzione, dati multipli), che invece è un modo per raddoppiare le performance di elaborazione.

Perché Apple Amx è un segreto?

Apple non descrive in alcun documento ufficiale le caratteristiche di Amx. Tant’è che è stato scoperto dallo sviluppatore Dougall Johnson “spacchettando” le varie parti del Soc M1. Tutte le sue scoperte sono descritte in modo dettagliato in questa pagina: https://gist.github.com/dougallj/7a75a3be1ec69ca550e7c36dc75e0d6f.

In questa sede ci limitiamo a dire che l’Amx è attivato attraverso specifiche liberire di elaborazione che hanno uno stretto legame con la matematica e la gestione delle matrici. Alcune di queste librerie sono:

  • vImage, per processre le immagini ad alto livello, tra cui conversione dei formati, editing e manipolazione;
  • BLAS, lo standard per la gestione delle operazioni algebriche di base (utilizzato per accelerare le operazioni matematiche rleative a matrici e vettori);
  • BNNS, per mettere in esecuzione network neurali;
  • vDSP, per processare i segnali digitali (Dsp), al fine di supportare le operazioni più avanzate e complesse di processamento di immagini e audio;
  • LAPACK, una funzione di alto livello per risolvere numerose funzioni, tra cui le equazioni lineari, impiegate nell app più complesse.

In tutte queste librerie il coprocessore Amx subentra alla Cpu per velocizzare i calcoli. Questo significa ottenere un’efficienza superiore in ambiti particolari, quelli di solito più impegnativi.

Secondo alcuni test empirici, l’Amx riesce addirittura a raddoppiare l’efficacia di elaborazione in casi impegnativi con un’impostazione di esecuzione del software simile ad ambienti di computing ad alte prestazioni.

Se usato correttamente dagli sviluppatori, l’Amx può restituire all’Apple M1 un vantaggio competitivo non indifferente con i software più gravosi, dove oggi ci si deve limitare solo al supporto combinato di Gpu e neural engine.