# Intel i860

L'Intel i860 (conosciuto come 80860, e con il nome in codice N10) è un microprocessore RISC prodotto da Intel e presentato nel 1989.
L'i860 fu il primo tentativo (insieme all'Intel i960) di Intel di realizzare un nuovo set di istruzioni dopo il fallimentare Intel iAPX 432 degli anni ottanta. Venne presentato con una notevole campagna stampa e oscurò il rilascio dell'Intel i960 che disponeva di un progetto migliore. L'i860 non fu mai un vero successo commerciale e il progetto venne abbandonato verso la metà degli anni novanta. Il processore fu utilizzato in schede grafiche di alte prestazioni come la NeXT Dimension per il NeXTCube.

## Caratteristiche tecniche

L'i860 combinava molte caratteristiche uniche in un singolo processore. Il processore aveva un'architettura VLIW ed un sistema per i numeri in virgola mobile molto veloce e potente. Il processore aveva delle ALU a 32 bit mentre la FPU era a 64 bit ed era divisa in tre componenti. Un sommatore, un moltiplicatore e un processore grafico. Il processore aveva delle pipeline separate per l'ALU, per il sommatore e per il moltiplicatore della FPU. Questo permetteva al processore di eseguire fino a tre istruzioni per ciclo di clock.
Una caratteristica insolita del processore era che per mantenere le pipeline piene il compilatore doveva accuratamente ordinare le istruzioni nel programma. Questa caratteristica del processore derivava dall'architettura VLIW e dalla filosofia RISC che imponeva di realizzare processori semplici in modo da avere più transistor per altre unità funzionali o per la cache. Questa scelta d'architettura rendeva il processore semplice ma creava un'espansione del codice dato che alcune istruzioni complesse non erano presenti nel processore e venivano realizzati concatenando più istruzioni semplici. Un codice più grande metteva sotto sforzo i bus di comunicazione, le cache del processore e richiedevano una quantità maggiore di memoria RAM aumentando il costo complessivo dei sistemi. Quindi sebbene il processore per alcune operazioni grafiche e di matematica in virgola mobile fosse molto veloce nell'esecuzione di codice generico non brillava per velocità anche perché i compilatori avevano difficoltà a ottimizzare codice generico.
Tutti i bus interni erano almeno a 64 bit, il collegamento interno tra la memoria e la cache era a 128 bit. Le unità interne avevano trentadue registri a 32 bit ma la FPU li utilizzava come sedici registri a 64 bit. Le istruzioni per la ALU venivano caricate due alla volta per riempire il bus, Intel affermava che l'i860 era progettato come un microprocessore a 64 bit.
L'unità grafica era unica per l'epoca. In sostanza era un'unità per numeri interi a 64 bit che utilizzava i registri della FPU. Disponeva di istruzioni tipo SIMD in aggiunta alle usuali operazioni sui numeri interi. L'esperienza dell'i860 influenzò le funzionalità MMX che Intel aggiunse alcuni anni dopo alla linea di processori Pentium.

## Prestazioni

Sulla carta le prestazioni del processore erano impressionanti ma nella realtà le prestazioni erano molto modeste. Un problema che in fase di progettazione non era ancora noto era che l'esecuzione dei programmi è difficile da prevedere durante la compilazione e quindi è difficile ordinare in modo efficiente le istruzioni. Inoltre se per esempio un'istruzione deve sommare due numeri e uno di questi numeri non è presente nella cache il processore doveva attendere il suo caricamento dalla memoria introducendo degli stalli nella pipeline. L'intero progetto del processore i860 si basava sul presupposto che il compilatore potesse gestire efficientemente il caricamento dei dati e delle istruzioni. Questo nella realtà è molto difficile se non impossibile. Il processore in teoria era in grado di generare 60 MFLOPS ma con codice assembly ottimizzato a mano si raggiungevano solo 40 MFLOPS mentre il codice compilato spesso non raggiungeva i 10 MFLOPS.
Un altro grave difetto dell'i860 era che non prevedeva un metodo efficiente per gestire il cambio di contesto. Il processore aveva molte pipeline (per la ALU e la FPU) ed un interrupt poteva richiedere lo svuotamento della pipeline e il caricamento di nuove istruzioni. Nel migliore dei casi questo richiedeva 62 cicli, mentre nel peggiore più di 2000 cicli. Quindi il peggiore dei casi richiedeva 1/20000 di secondo, un'eternità per una CPU. Questo rese l'i860 un pessimo processore per un uso generico.

## Versioni e utilizzi

Il processore venne presentato in due versioni, la XR (la versione base) e la XP (nome in codice N11). La versione XP aggiunse una ampia cache di secondo livello nel chip e il supporto per la gestione condivisa della cache in modo da facilitare lo sviluppo di versioni multiprocessore per il calcolo parallelo. Il modello XR aveva frequenze di 25 o 40 MHz, mentre il progetto XP (grazie ad una riduzione dei transistor da 1 micrometro a 0,8) aveva frequenze di 40 o 50 MHz.
All'inizio l'i860 venne utilizzato su alcune macchine molto potenti come la iPSC/860 dei Los Alamos National Laboratory. Il compilatore utilizzato aveva migliorato le prestazioni del processore sebbene molti RISC di ultima generazione le superassero.
Intel provò a spingere il processore come CPU per workstation entrando in competizione con processori come i MIPS e altri. Microsoft inizialmente sviluppò Windows NT su macchine i860, tuttavia in seguito ne fece il porting per processori Intel 80386, MIPS e Alpha, abbandonando del tutto il supporto i860.
L'i860 è stato utilizzato come acceleratore grafico in schede grafiche per workstation. Venne utilizzato inizialmente dalla NeXT Computer per il NeXTDimension. Il processore faceva girare una versione ridotta del microkernel Mach su cui girava un completo emulatore PostScript. In quel ruolo il processore esprimeva al pieno le sue prestazioni dato che il nucleo del programma era interamente caricato nella cache e le operazioni grafiche per loro natura sono estremamente predicibili, quindi il compilatore poteva realizzare del codice molto ottimizzato. Anche Silicon Graphics utilizzò il processore. L'intel i860 venne utilizzato nella Onyx Reality Engine 2, e in particolare nel geometry engine. La sorte del processore comunque era segnata e con l'apparire di nuovi processori più performanti l'i860 è stato abbandonato. Intel si è concentrata nello sviluppo dei processori Pentium ed in seguito ha sostituito la linea i860 e i960 con i processori StrongARM prima e XScale dopo.