Tecnologia MMX: SSE e 3DNow!
La tecnologia MMX era originariamente nota come multimedia extensions o matrix math extensions. Intel afferma ufficialmente che non si tratta di un acronimo; una delle due definizioni precedenti potrebbe essere quella giusta. Questa tecnologia fu introdotta con la quinta generazione di CPU Pentium, come aggiunta per migliorare la compressione/decompressione dei video, la manipolazione delle immagini, la codifica e il calcolo di I/O - tutti usati in molti software odierni.
MMX consisteva di due importanti miglioramenti architetturali. Il primo era fondamentale: tutti i chip MMX avevano una cache L1 interna più ampia rispetto alle controparti non MMX. Questo migliorava le prestazioni con qualsiasi software, che usassero o meno specifiche istruzioni MMX. Il secondo miglioramento riguardava la presenza di 57 nuovi comandi nel set di istruzioni, oltre che una nuova istruzione chiamata "single instruction, multiple data" (SIMD).
Le applicazioni multimediali moderne spesso usano loop ripetitivi che, sebbene occupino il 10% o meno del codice generale dell'applicazione, possono richiedere fino al 90% del tempo d'esecuzione. SIMD permette a un'istruzione di effettuare la stessa funzione su più pezzi di dati, in modo simile alla maestra che dice all'intera classe di sedersi, piuttosto che dirlo a ogni studente, singolarmente. SIMD permette al chip di ridurre i loop che caricano il processore con video, audio, grafica e animazione.
Grazie alle 57 nuove istruzioni fu possibile manipolare e processare video, audio e dati grafici in modo molto più efficiente. Queste istruzioni erano orientate alle sequenze altamente parallele e ripetitive che si trovavano - e trovano - con frequenza nelle operazioni multimediali. Con "altamente parallele" ci riferiamo al fatto che lo stesso calcolo è fatto su più punti dati, come quando si modifica un'immagine grafica. Lo svantaggio principale di MMX era che funzionava solo con valori interi e usava unità a virgola mobile per il calcolo, quindi si perdeva del tempo poiché era necessario passare a operazioni in virgola mobile. Questi svantaggi sono stati corretti successivamente con aggiunte a MMX da parte di Intel e AMD.
Intel concesse MMX in licenza ai concorrenti come AMD e Cyrix (poi assorbita da VIA), che furono poi stati in grado di aggiornare i propri processori Intel-compatibili con la tecnologia MMX.
SSE
Nel febbraio 1999 Intel introdusse i Pentium III, corredati da un aggiornamento di MMX chiamato Streaming SIMD Extensions (SSE). Originariamente queste istruzioni erano chiamate Katmai New Instructions (KNI), almeno fino al debutto, perché facevano parte del processore Katmai, nome in codice del Pentium III. Anche il Celeron 533A e i modelli più veloci basati sul core del Pentium III integravano le istruzioni SSE. Le soluzioni Pentium e Celeron 533 no.
Le Streaming SIMD Extensions consistevano di 70 nuove istruzioni, incluse SIMD floating point, ulteriori SIMD integer e istruzioni di controllo della cache. Tra le tecnologie che beneficiano delle SSE troviamo l'imaging avanzato, il video 3D, lo streaming audio e video (riproduzione DVD) e le applicazioni di riconoscimento vocale.
Le istruzioni SSEx sono particolarmente utili per la decodifica MPEG-2, che è lo schema standard usato dai DVD video. Perciò, i processori con istruzioni SSE erano maggiormente capaci di gestire la decodifica MPEG-2 via software a piena velocità senza richiedere una scheda decodificatrice apposita. I processori SSE erano inoltre migliori e più veloci nella gestione del riconoscimento vocale.
Uno dei principali benefici delle SSE rispetto alle MMX era il supporto a operazioni SIMD in virgola mobile a singola precisione, che rappresentavano un collo di bottiglia per la grafica 3D. Come con le MMX, le SIMD permettevano di eseguire più operazioni per istruzione. Nello specifico, le SSE supportavano fino a quattro operazioni in virgola mobile per ciclo di clock; in questo modo una singola istruzione poteva operare su quattro pezzi di dati simultaneamente. Era possibile "mischiare" istruzioni SSE in virgola mobile con istruzioni MMX senza cali prestazionali. Le SSE inoltre supportavano il data prefetching, un meccanismo per leggere dati direttamente nella cache prima che questi fossero effettivamente richiesti.
Le SSE includevano inoltre ulteriori istruzioni per gestire di grafica e audio. Le SSE, in sostanza, erano simili alle MMX; infatti oltre a essere state chiamate KNI, le SSE erano chiamate MMX-2. Le istruzioni SSE permettevano inoltre calcoli in virgola mobile e usavano un'unità separata nel processore piuttosto che condividere un'unità in virgola mobile standard come le MMX.
Le SSE2 furono introdotte nel novembre 2000, insieme al Pentium 4 e aggiungevano 114 istruzioni SIMD. Le SSE includevano tutte le istruzioni offerte precedentemente in MMX e SSE.
Le SSE3 apparvero nel febbraio 2004, insieme al processore Pentium 4 Prescott, con 13 nuove istruzioni SIMD per migliorare i calcoli complessi, la grafica, la codifica video e la sincronizzazione thread. Anche le SSE3 integravano tutte le istruzioni precedenti.
Le SSSE3 (Supplemental SSE3) arrivarono nel giugno 2006 nella serie di processori Xeon 5100 e nel luglio 2006 nei processori Core. Aggiungevano 32 nuove istruzioni SIMD alle SSE3.
Le SSE4 (chiamate anche HD Boost da Intel) debuttarono nel gennaio 2008 in alcuni processori Core 2 (SSE4.1) e furono aggiornate nel novembre dello stesso anno nei processori Core i7 (SSE4.2). Le SSE4 consistevano di 54 istruzioni totali, mentre SSE4.1 e 4.2 avevano rispettivamente 47 e 54 istruzioni.
Le Advanced vector extensions (AVX) approdarono nel gennaio 2011 con i processori Intel Core Sandy Bridge, trovando spazio anche dalla famiglia di CPU AMD Bulldozer. Le AVX rappresentavano un nuovo set di istruzioni a 256 bit per le SSE, comprendenti 12 nuove istruzioni. Le AVX aiutavano le applicazioni che facevano un uso intensivo dei calcoli in virgola mobile a comportarsi meglio. Tra queste citiamo le soluzioni che gestiscono immagini o l'audio/video, le simulazioni scientifiche, l'analisi finanziaria e la modellazione 3D. Le AVX supportate a partire dai sistemi operativi Windows 7 SP1, Windows Server 2008 R2 SP1, e il kernel Linux dalla versione 2.6.30. Per il supporto AVX su macchine virtuali con Windows Server R2, date uno sguardo a questo indirizzo per ottenere un hotfix.
Anche se per le proprie CPU AMD scelse le SSE3 e le istruzioni precedenti, piuttosto che adottare le SSE4 creò un set differente di quattro istruzioni chiamato SSE4a. L'azienda pensava di sviluppare un proprio set di istruzioni chiamato SSE5 per integrarlo nell'architettura Bulldozer, ma poi ci ripensò creando un nuovo set di istruzioni che usava codice compatibile AVX. Il nuovo set includeva: XOP (Integer vector instructions), FMA4 (Floating point instructions), CVT16 (Half-precision floating point conversion).
3DNow!
La tecnologia 3DNow! fu introdotta originariamente come alternativa di AMD alle istruzioni SSE presenti nei processori Intel. Dopo tre generazioni - 3D Now!, Enhanced 3D Now! e Professional 3D Now! (Aggiungevano pieno supporto alle SSE) - AMD annunciò nell'agosto 2010 che avrebbe abbandonato le istruzioni 3DNow! nei futuri processori.