IA-64(Intel Architecture 64、アイエーろくじゅうよん[1])はインテルとヒューレット・パッカードが1994年に共同発表した64ビットマイクロプロセッサの命令セットアーキテクチャ(ISA)。Itaniumで採用された。
特徴としてEPICアーキテクチャを採用し、多数のレジスタを持つ。インテルの従来の32ビットであるIA-32 (x86) とは、命令セットの互換性は無いが、IA-32のエミュレーションモードを持つ。IA-64は当初はIA-32の後継ともされたが、実際にはx86を64ビットに拡張したx64の普及もあり、特定用途に留まった。2019年1月、インテルは2021年のItaniumの製造終了予定を発表し、後継も無いため、IA-64は終了した[2][3]。
正式には「Intel Architecture 64」で、インテルの戦略面の強い用語である。現在では、既存のx86ベースの64ビット化であるIntel 64などが主流となった影響か、インテルの資料でも「IA-64」の用語は減少し、Itanium 2などの説明も「EPICアーキテクチャを採用した」など個別の技術名が使われている。
インテルは1990年代に、x86で32ビットのパーソナルコンピュータ市場では主流となったが、64ビットのサーバ市場はいわゆるRISC陣営(SPARC、MIPS、PA-RISC、POWERなど)に占められており、また32ビット市場でもAMD、Cyrixなど互換プロセッサーメーカーの攻勢を受けていた。
インテルはRISC陣営の一社であるヒューレット・パッカード (HP)と提携し、HPのVLIW技術(後に改良版のEPICアーキテクチャ)を採用するIA-64の共同開発を発表した。この際、従来の32ビットまでのx86アーキテクチャをIA-32と呼び、将来的にはIA-64に置き換えられるとした。またHPはIA-64を自社のPA-RISC(HP-UX稼動CPU)の後継と位置づけた。
この提携の目的は、インテルには上位サーバ市場への本格進出と互換プロセッサーメーカーの振り切り、更にはWindows NTでRISC(MIPS、Alpha、PowerPC)もサポートしたマイクロソフトへの牽制、またHPには次世代プロセッサーの開発費用分担と事実上の業界標準への狙いがあったと言われるが、PC市場のインテル独占状態がサーバ市場にも及ぶと考えられ業界に衝撃を与えた。またIA-64は既存のIA-32とは互換性が無い(エミュレーションのみ)事も広く議論となった。
しかしIA-64は、Itaniumの開発遅延と性能の低さ、結果としてHP(およびHPと提携する日本電気、日立製作所)以外の採用メーカーの少なさ、自社以外のサポートOSの少なさ、その間の競合プロセッサ(SPARC、POWERなど)の性能向上、更にはx86市場の64ビット化にはx64(IA-64を批判したAMDによるAMD64、およびインテル版実装のIntel 64)が普及してしまった。2005年9月にはデルがIA-64から撤退した。POWERを持つIBMも2005年以降はほとんど採用していない。
IA-64は現状では、HP(およびHPと提携する日本電気、日立製作所)のPA-RISC後継、およびレジスタ数が多いなどエミュレーションによって異なるアーキテクチャからの移行が容易な事もあり、一部の無停止コンピュータ(HP Integrity NonStopなど)やOpenVMS、メインフレームやオフィスコンピュータ(富士通、日本電気、Bullなど)の置き換えプロセッサが中心となっている。
IA-64アーキテクチャは、128本の64ビット整数レジスタ (r0 - r127) と128本の82ビット浮動小数点レジスタ (f0 - f127) という非常に多くのレジスタを定義している。
128本の64ビット整数レジスタ (r0 - r127) の内、汎用レジスタとしてはr0 - r31の32本が使われる(r0はゼロレジスタで、読み出すと常に0を返し、書き込むと例外が発生する)。
残りの96本 (r32 - r127) はレジスタスタックエンジン (Register Stack Engine; RSE) を使ったレジスタローテーションという手法で管理され、プロシージャ呼び出し間で名前が変更される可能性がある。これは多くのRISCプロセッサに見られるレジスタ・ウィンドウを洗練させたもので、AMD Am29000のオーバーラップウィンドウサイズを変更可能なレジスタ・ウィンドウとの類似性が指摘されるが、IA-64ではプレディケーションと組み合わせることで、ループを自動的に展開して実行することができる。
本アーキテクチャはマルチメディア演算や浮動小数点演算に関する命令も用意している。
典型的なVLIWではロング命令ワードの各サブ命令の位置が特定の機能ユニットに対応しているが、Itaniumではサブ命令の配置についていくつかの組み合わせ(バンドル)を用意していて、その中にはシリアル実行モードとパラレル実行モードのバランスをとるものもある。バンドルのエンコーディングには将来のIA-64の拡張のために空きがある。加えて、Itaniumは個別に設定可能なプリディケートレジスタ(predicate register)を持っており、各命令について実行時に出力するか否かを決定できる。
Itaniumは、起動した時点ではいくつかの命令実行機能が動作しないようになっている。ブートストラップが実行されるとまずExtensible Firmware Interface (EFI) がロードされ、追加の命令がチップ内のメモリに格納される。続いてプロセッサモード(64ビットか32ビットか)や他のブート時の設定が行われる。この設計によりItaniumシステムはEFIプログラムの内容によって異なった機能を展開できる。
IA-32をサポートするため、Itaniumは特殊なジャンプ命令で32ビットモードに移行する。IA-32命令はItaniumの各機能ユニットで実行される。しかし、ItaniumはEPICスタイルの命令を高速に実行するよう設計されているため、アウト・オブ・オーダー実行機能を持っておらず、IA-32コードの実行はIA-64モードと比較してもPentium系プロセッサと比較しても非常に性能的に不利である。例えば、Itaniumの機能ユニットは通常のALUでの計算の副作用のため整数フラグを自動的には生成しないし、境界が整っていないメモリロードを複数続けて行うようにはできていない。LinuxやWindows上で動作するIA-32ソフトウェアエミュレータがあるが、ハードウェアがIA-32モードで実行するよりもエミュレータで実行した方が約50%高性能である。
Windowsエミュレータはマイクロソフトから、LinuxエミュレータはノベルのようなLinuxベンダーから入手可能である。Itanium 2のMontecitoからはハードウエアデコーダは削除され、Extensible Firmware Interface (EFI) でIA-32エミュレータがロードされる様になった。