Intorno al 2000 gli ingegneri di Intel iniziarono a pensare che la società stava spremendo la linea di processori IA-32, quindi si inizio a spostarsi verso un ISA completamente nuovo. La nuova architettura, sviluppata da Intel venne chiamata IA-64, una macchia a 64 bit. Il processore che utilizza IA-64 è il Itanium .

IA-64 è utilizzato solo nei server di fascia alta.

Il problema dell’ISA IA-32

Prima di vedere IA-64, vediamo gli aspetti negativi del IA-32 :

  • ISA CISC con istruzioni di lunghezza variabile e formati differenti difficili da decodificare velocemente
  • memory-oriented ed a due indirizzi, ovvero che molte istruzioni referenzia la memoria ( accesso lento )
  • insieme di registri piccoli e irregolari
  • indirizzi a 32-bit limitano i programmi a soli 4 GB di memoria ( problema in server di fascia alta )

Modello IA-64

L'idea chiave alla base di IA-64 è di spostare il carico di lavoro dalla fase di esecuzione alla fase di compilazione. ( dall'hardware al software )

Le CPU moderne, hanno tantissime risorse che possono lavorare in parallelo, il problema è che i programmi sono scritti in modo sequenziale e con dipendenze tra le istruzioni, per risolvere questo, la CPU, durante l’esecuzione del programma, fa un sacco di lavoro extra ( rinomina dei registri, riordinare le istruzioni etc. ).

La soluzione del IA-64 è far fare al compilatore ciò che l’hardware fa durante l’esecuzione. Il compilatore infatti, può preparare un piano di esecuzioni ottimale.

Questo approccio, in cui il parallelismo dell’hardware è sfruttato esplicitamente dal compilatore, si chiama EPIC ( Explicitly Parallel Instruction Computing ) ( successore del RISC ).

Non è la CPU a “indovinare” cosa può andare in parallelo. Glielo dice il codice macchina stesso. IA-64 adotta il paradigma EPIC, in cui il compilatore esplicita il parallelismo tra le istruzioni, riducendo il lavoro dinamico dell’hardware. A differenza di IA-32, la CPU non scopre il parallelismo a runtime ma lo esegue come pianificato dal compilatore.

Riduzione degli accessi in memoria del IA-64

Il Itanium 2 ha un modello di memoria semplice :

  • memoria consiste in byte di memoria lineare
  • ordinamento little-endian o big-endian, specificato da un bit in un registro a disposizione del OS
  • per ridurre accessi alla memoria, si dispone di una grande cache L1 sulla CPU e una cache L2 vicina alla CPU
  • riferimenti in memoria non usati per niente