IA-64

IA-64 (engl. Intel Architecture 64, Itanium) on Intelin ja Hewlett-Packardin yhteistyössä kehittämä 64-bittinen suoritinarkkitehtuuri, jota Intelin Itanium -perheen suorittimet käyttivät. Sen käskykanta muistuttaa VLIW-suunnitteluperiaatetta, joka käytännössä tarkoittaa sitä, että käskyt koostuvat useammasta rinnakkaisesta RISC-tyylisestä käskystä, mutta IA-64 ei mene äärimmäisyyksiin VLIW-periaatteen seuraamisessa vaan sisältää kompromisseja RISCin suuntaan.
IA-64 tarkoitettiin korvaamaan 64-bittisiä RISC-arkkitehtuureita, kuten HP:n PA-RISC ja SGI:n MIPS-arkkitehtuuri. Tämä tarkoitti vähintään kaikkien ohjelmien kääntämistä uudelleen. Vuonna 2006 HP, NEC, Hitachi, SGI ja Fujitsu ilmoittivat sijoittavansa yhteensopivien koneiden kehittämiseen 10 miljardia dollaria vuoteen 2010 mennessä.Suorittimen myöhästyminen useita vuosia ja alun suorituskykyongelmat tekivät Itaniumista teollisuuden naurunaiheen ja se sai lempinimen "Itanic" Titanic-laivaan viitaten.
Intel tarkoitti IA-64:n jossain vaiheessa myös korvaamaan PC-koneissa käytetty x86-arkkitehtuuri. IA-64 soveltuu tähän huonosti, koska PC-maailmassa käytettyä IA-32-koodia pitäisi ajaa emuloimalla, mistä syystä useimmat 64-bittisyyttä kaipaavat PC-käyttäjät ovat valinneet mieluummin AMD:n 64-bittisen ratkaisun, AMD64:n.
IA-64:ssä on huomattavasti vaikutteita HP:n PA-RISC-arkkitehtuurista, ja se pystyy suorittamaan vanhaa PA-RISC-koodia ohjelmallisella emulaatiolla ilman kovinkaan suurta nopeushävikkiä. Ohjelmallinen PA-RISC-emulaattori on kaikissa IA-64:ää tukevissa HP-UX:n versioissa.
Kymmenen vuotta Itaniumin julkaisun jälkeen 95 % sitä käyttävistä myydyistä koneista oli HP:n palvelimia ja 3 % NEC:in. SGI sen sijaan ajautui konkurssiin.
Vuonna 2015 Hewlett-Packard on ainoa jäljellä oleva Intelin kumppani, joka käyttää IA64-alusta suorittimia.
Toukokuussa 2017 julkaistu Itanium 9700, koodinimeltään Kittson jäi viimeiseksi Itanium-suorittimeksi.

Käskyjen niputus

IA64-käskykannassa jokainen käskysana (bundle) voi sisältää kolme operaatiota.
Useampi käskysana voidaan niputtaa yhteen yhdeksi käskyjoukoksi, jos näiden välillä ei ole riippuvuuksia, ja tällöin nämä saadaan suorittaa rinnakkain, jos suoritin kykenee suorittamaan useamman käskysanan kellojaksossa. Tieto niputuksesta on tallennettu käskysanoihin. Tässä mielessä IA64 ei ole täysin puhdas VLIW, koska samassa kellojaksossa voidaan suorittaa useampia käskysanoja, ja käskysanat voivat sisältää verrattaen pienen määrän käskyjä.
Syy tähän kompromissiin lienee mahdollisuus tehdä myöhemmin tehokkaampia samaa konekielikoodia ajavaa koodia; puhdas VLIW jossa käskysanassa olisi aina kaikki rinnakkain ajettavat käskyt löisi lukkoon myös prosessorin suoritinyksiköiden määrän ja siten ei mahdollistaisi samaa konekielikoodia nopeammin ajavia uusia suoritinmalleja; IA64-käskykanta taas mahdollistaa useampia käskysanoja rinnakkain ajavien suorittimien tekemisen.
Kaikki markkinoille tulleet Itanium-mallit ovat pystyneet suorittamaan kaksi käskysanaa eli maksimissaan 6 operaatiota kellojaksossa.

Rekisterien pyöritys

Käskykanta määrittelee käskyt rekisterien uudelleennimeämiseen. Ylimpiä 3/4 rekistereistä käytetään uudelleennimeämismekanismin kautta. Uudelleennimeäminen perustuu indeksien pyöritykseen; jos rekisteri-indeksiä on pyöritetty kahden verran, tarkoittaa se sitä, että käsky joka näennäisesti osoittaa kokonaislukurekisteriin 32 osoittaakin oikeasti rekisteriin 34. Ylimpään rekisteriin 127 osoittava viite pyörähtää ympäri osoittamaan rekisteriin 33.
Rekisterien pyöritys mahdollistaa esimerkiksi nopeammat funktiokutsut; rekistereitä pyörittämällä voidaan haluttu toisissa rekistereissä oleva data saada näkyviin kutsuttavan funktion sisään tulevina parametrirekistereinä siirtämättä itse dataa.

Rekisterien automaattinen talletus

Jos rekistereitä tarvitaan enemmän kuin niitä on aikaisempien pyöritysten jälkeen vapaana, prosessori osaa itse automaattisesti tallettaa rekistereitä pinoon.

Ehdolliset käskyt ja predikaattirekisterit

IA-64-koodissa pyritään mahdollisimman suuri osa haarautumisista poistamaan ehdollisten käskyjen avulla. Prosessorilla on 64 1-bittistä predikaattorekisteriä, joihin voidaan tallettaa vertailuoperaatioiden tuloksia. Käskysanoissa voidaan määritellä, että operaatio suoritetaan jos tietty ehtorekisteri on tosi tai epätosi.