IA-64(Intel Itaniumアーキテクチャ)は、既に生産終了となったIntelの64ビットマイクロプロセッサ「Itanium」ファミリーの命令セットアーキテクチャ(ISA)です。ISAの基本仕様はヒューレット・パッカード(HP)で策定され、その後、インテルがHPと共同で実装しました。最初のItaniumプロセッサは、コードネーム「Merced」として2001年に発売されました。
Itaniumアーキテクチャは、コンパイラが並列実行する命令を決定する明示的な命令レベル並列処理に基づいています。これは、実行時にプロセッサが命令の依存関係を管理するスーパースカラアーキテクチャとは対照的です。Tukwilaを含むすべてのItaniumモデルでは、コアは1サイクルあたり最大6つの命令を実行します。
2008年、Itaniumはエンタープライズクラスのシステム向けに4番目に多く導入されたマイクロプロセッサアーキテクチャであり、x86-64、Power ISA、SPARCに次ぐものでした。[ 1 ]
2019年、インテルはIA-64アーキテクチャで最後にサポートされたCPUの販売終了を発表しました。Microsoft WindowsのバージョンはServer 2003 [ 2 ]からServer 2008 R2 [ 3 ]までIA-64をサポートしていましたが、それ以降のバージョンではサポートされていません。Linuxカーネルはそれよりもずっと長くサポートしていましたが、2024年のバージョン6.7でサポートを終了しました(Linux 6.6 LTSではまだサポートされています)。HP -UX、OpenVMS、FreeBSDなど、IA-64をサポートしていた他のオペレーティングシステムはごくわずかです。HP-UXのサポートは2025年12月に終了しました。OpenVMSはまだサポートしていますが、FreeBSDはFreeBSD 11でサポートを終了しました。

1989年、HPはRISC( Reduced Instruction Set Computing )アーキテクチャが1サイクルあたり1命令の処理限界に近づいていることを懸念し始めた。インテルとHPの研究者はともに将来の設計のためのコンピュータアーキテクチャの選択肢を検討しており、1980年代初頭にイェール大学の研究から生まれたVLIW(Very Long Instruction Word ) [ 4 ]と呼ばれる新しい概念をそれぞれ独自に調査し始めた。 [ 5 ]
VLIWは、RISCやCISCのようなコンピュータアーキテクチャの概念で、1つの命令語に複数の命令を非常に長い命令語にエンコードすることで、プロセッサがクロックサイクルごとに複数の命令を実行できるようにするものです。典型的なVLIWの実装では、コンパイル時にどの命令を同時に実行できるか、これらの命令を適切にスケジューリングして実行するか、また分岐命令の方向を予測するために、高度なコンパイラに大きく依存しています。このアプローチの利点は、より少ないクロックサイクルでより多くの有用な処理を実行できること、プロセッサの命令スケジューリングと分岐予測に必要なハードウェア要件を簡素化できることですが、実行速度の向上と引き換えに、プロセッサの複雑さ、コスト、エネルギー消費が増加するという代償があります。
この頃、HPは自社のような個々のエンタープライズシステム企業にとって、独自のマイクロプロセッサを開発することはもはや費用対効果が高くないと考えるようになっていた。インテルもまた、ハイエンドのエンタープライズサーバーや高性能コンピューティング(HPC)の要件に対応するため、x86 ISAを超えるアーキテクチャの選択肢をいくつか研究していた。
IntelとHPは1994年に提携し、VLIW設計コンセプトのバリエーションであるIA-64 ISAを開発しました。Intelはこのコンセプトを明示的に並列命令コンピューティング(EPIC)と名付けました。Intelの目標は、HPが初期のVLIW開発で培った専門知識と自社の専門知識を組み合わせ、前述のハイエンドシステム向けに、すべてのOEM(相手先ブランドによる製品製造)に販売できる量産製品ラインを開発することでした。一方、HPは、Intelの量産技術と最新のプロセス技術を用いて製造された、自社のPA-RISCプロセッサよりも優れた既製プロセッサを購入できるようにしたいと考えていました。
Intel は設計と商品化のプロセスを主導し、HP は ISA の定義、Merced/Itanium マイクロアーキテクチャ、および Itanium 2 に貢献しました。最初の Itanium ファミリー製品である Merced をリリースする当初の目標年は 1998 年でした。[ 4 ]
Intel の製品マーケティングと業界との連携の取り組みは大規模で、当時 RISC プロセッサをベースとしていたものを含め、エンタープライズ サーバー OEM の大部分で設計採用を獲得しました。業界アナリストは、IA-64 がサーバー、ワークステーション、ハイエンド デスクトップで主流となり、最終的には汎用アプリケーションすべてにおいて RISC および CISC アーキテクチャの両方に取って代わると予測しました。[ 6 ] [ 7 ] CompaqとSilicon Graphics は、それぞれAlphaおよびMIPSアーキテクチャのさらなる開発を中止し、IA-64 への移行を決定しました。[ 8 ]
1997年までに、IA-64アーキテクチャとコンパイラの実装は当初の想定よりもはるかに困難であることが明らかになり、Itaniumの納入は遅れ始めた。[ 9 ] Itaniumは史上初のEPICプロセッサであったため、開発作業はチームが慣れ親しんだ以上に多くの予期せぬ問題に直面した。さらに、EPICのコンセプトはこれまで実装されたことのないコンパイラ機能に依存していたため、さらなる研究が必要であった。[ 10 ]
Microsoft Windows、Unix、 Linux 、HP-UX 、 FreeBSD、Solaris [ 11 ] [ 12 ] [ 13 ] Tru64 UNIX [ 8 ]、Monterey/64 [ 14 ]などのUnix ライクなシステムを含むいくつかのグループが、このアーキテクチャ向けのオペレーティングシステムを開発しました(最後の 3 つは市場に出る前にキャンセルされました)。1999 年、Intel は Linux を IA-64 に移植するためのオープンソースの業界コンソーシアムの結成を主導し、それを「Trillium (商標の問題により後に「Trillian」に改名)」と名付けました。これは Intel が主導し、Caldera Systems、CERN、Cygnus Solutions、Hewlett-Packard、IBM、Red Hat、SGI、SuSE、TurboLinux、VA Linux Systems が参加しました。その結果、動作する IA-64 Linux が予定より早く提供され、新しい Itanium プロセッサで動作する最初の OS となりました。
Intelは1999年10月4日にプロセッサの正式名称をItaniumと発表した。 [ 15 ]数時間後には、 Usenetニュースグループで、 1912年の処女航海で沈没した「不沈」の豪華客船タイタニック号をもじった「Itanic」という名前が考案された。[ 16 ]
翌日の1999年10月5日、AMDはIntelのx86命令セットを拡張して完全な下位互換性のある64ビットモードを含める計画を発表し、さらに、同社が既に取り組んでいたAMDの新しいx86 64ビットアーキテクチャを明らかにし、コードネームSledgeHammerと呼ばれるAMDの次期第8世代マイクロプロセッサに組み込む予定であることを明らかにした。[ 17 ] AMDはまた、アーキテクチャの仕様と詳細を2000年8月に完全に公開することを示唆した。[ 18 ]
AMDはIA-64アーキテクチャへの貢献者として招待されたことはなく、ライセンス供与も期待できなかったため、AMDのAMD64アーキテクチャ拡張は、既存のx86アーキテクチャに64ビットコンピューティング機能を追加しつつ、従来の32ビットx86コードをサポートするという進化的な方法として当初から位置づけられていました。これは、IA-64によって完全にx86と互換性のない全く新しい64ビットアーキテクチャを作成するというIntelのアプローチとは対照的です。
2019 年 1 月に Intel は Kittson の販売を終了すると発表し、最終注文日は 2020 年 1 月、最終出荷日は 2021 年 7 月としました。[ 19 ] [ 20 ] 2023 年 11 月に IA-64 サポートがLinux カーネルから削除され、それ以降はツリー外で維持されています。[ 21 ] [ 22 ] [ 23 ]
Intel は Itanium命令セットを詳細に文書化しており[ 24 ]、技術系メディアも概要を提供しています。[ 6 ] [ 9 ]
このアーキテクチャは、その歴史の中で何度か名前が変更されています。当初、HPはこれをPA-WideWordと呼んでいました。その後、IntelはこれをIA-64、次にItanium Processor Architecture(IPA)[ 25 ]と呼び、最終的にIntel Itanium Architectureに落ち着きましたが、現在でも広くIA-64と呼ばれています。
これは、64ビットのレジスタを豊富に備えた明示的な並列アーキテクチャです。基本データワードは64ビットで、バイト単位でアドレス指定可能です。論理アドレス空間は2⁶⁴バイトです。このアーキテクチャは、述語、推測、および分岐予測を実装しています。パラメータの受け渡しには、可変サイズのレジスタウィンドウを使用します。同じメカニズムは、ループの並列実行を可能にするためにも使用されます。推測、予測、述語、および名前変更はコンパイラによって制御されます。各命令ワードには、これらのための追加ビットが含まれています。このアプローチが、このアーキテクチャの特徴です。
このアーキテクチャは多数のレジスタを実装しています: [ 26 ] [ 27 ] [ 28 ]
gr0fr0fr1pr0br0br.callbspレジスタ ウィンドウが一周したときにハードウェアが自動的にレジスタをスピルする第 2 スタックを指します。128 ビットの命令語はそれぞれバンドルと呼ばれ、41 ビットの命令をそれぞれ格納する 3 つのスロットと、各スロットにどのタイプの命令が格納されているかを示す 5 ビットのテンプレートが含まれています。これらのタイプは、M ユニット (メモリ命令)、I ユニット (整数 ALU、非 ALU 整数、または長即値拡張命令)、F ユニット (浮動小数点命令)、または B ユニット (分岐または長分岐拡張命令) です。テンプレートには、ストップの前後のデータ間にデータ依存性があることを示すストップもエンコードされています。ストップは、バンドルの末尾だけでなく、任意のスロットの後に発生する可能性があります (使用可能なテンプレートによってのみ制限されます)。2 つのストップ間のすべての命令は、それがいくつのバンドルにまたがるかに関係なく、命令グループを構成し、多くの種類のデータ依存性から解放されている必要があります。この知識により、プロセッサは複雑なデータ分析を独自に実行することなく、命令を並列に実行できます。なぜなら、その分析は命令が書き込まれたときに既に行われているからです。
各スロット内では、ごく一部の命令を除いて、すべての命令に述語が付けられており、述語レジスタの値(真または偽)によって命令が実行されるかどうかが決まります。常に実行されるべき述語付き命令は、常に真と読み取られる に述語が付けられています。pr0
IA-64アセンブリ言語と命令フォーマットは、人間ではなくコンパイラが主に記述することを前提として意図的に設計されています。命令は3つずつグループ化され、3つの命令が指定されたテンプレートに一致するようにする必要があります。命令は特定の種類のデータ依存関係の間にストップ命令を発行する必要があり、ストップ命令は指定されたテンプレートに従って限られた場所でのみ使用できます。
フェッチ機構は、L1キャッシュからパイプラインに1クロックサイクルあたり最大2つのバンドルを読み込むことができます。コンパイラがこれを最大限に活用できる場合、プロセッサは1クロックサイクルあたり6つの命令を実行できます。プロセッサには、11のグループに30個の機能実行ユニットがあります。各ユニットは命令セットの特定の部分集合を実行でき、データ待ちで実行が停止しない限り、各ユニットは1サイクルあたり1つの命令を実行します。グループ内のすべてのユニットが命令セットの同一の部分集合を実行するわけではありませんが、共通の命令は複数のユニットで実行できます。
実行ユニットグループには以下が含まれます。
理想的には、コンパイラは命令をまとめて同時に実行できる 6 つのセットにできることが多い。浮動小数点演算ユニットは乗算加算演算を実装しているため、アプリケーションが乗算の後に加算を必要とする場合、1 つの浮動小数点命令で 2 つの命令の作業を実行できる。これは科学計算処理で非常に一般的である。これが発生すると、プロセッサは 1 サイクルあたり 4 FLOPsを実行できる。たとえば、800 MHz の Itanium の理論上の定格は 3.2 GFLOPSであり、最速の Itanium 2 (1.67 GHz) は 6.67 GFLOPS と評価されていた。
実際には、データ依存性や利用可能なバンドルテンプレートの制限などにより、プロセッサが十分に活用されず、すべてのスロットが有用な命令で埋め尽くされない場合が多い。最も密度の高いコードでは、1命令あたり42.6ビットが必要となるが、当時の従来のRISCプロセッサでは1命令あたり32ビットであった。また、無駄なスロットによるノーオペレーションによって、コードの密度はさらに低下する。投機的ロードや分岐およびキャッシュに関するヒントのための追加命令を最適に生成することは現実的ではない。なぜなら、コンパイラは、複数のプロセスを実行し、割り込みを受けるシステム上の異なるキャッシュレベルの内容を予測できないからである。
2002年から2006年にかけて、Itanium 2プロセッサは共通のキャッシュ階層を共有していました。 レベル1命令キャッシュは16KB、 レベル1データキャッシュも16KBでした。レベル2キャッシュは命令とデータが統合されており、256KBでした 。レベル3キャッシュも統合されており、サイズは1.5MBから 24MBまで様々でした 。256KBのレベル2キャッシュには、メインの算術論理演算ユニット(ALU)に影響を与えることなくセマフォ操作を 処理するのに十分なロジックが含まれています。
メインメモリは、オフチップのチップセットへのバスを介してアクセスされます。Itanium 2 バスは当初 McKinley バスと呼ばれていましたが、現在では通常 Itanium バスと呼ばれています。バスの速度は、新しいプロセッサのリリースとともに着実に向上しています。バスはクロックサイクルごとに 2×128 ビットを転送するため、200 MHz の McKinley バスは 6.4 GB/s を転送し、533 MHz の Montecito バスは 17.056 GB/sを転送します[ 30 ] 。
2006年以前に発売されたItaniumプロセッサは、レガシーサーバーアプリケーションをサポートするためにIA-32アーキテクチャのハードウェアサポートを備えていましたが、IA-32コードのパフォーマンスはネイティブコードよりもはるかに悪く、同時期のx86プロセッサのパフォーマンスにも劣っていました。2005年、インテルはより優れたパフォーマンスを提供するソフトウェアエミュレータであるIA-32実行レイヤー(IA-32 EL)を開発しました。そのため、インテルはMontecitoでIA-32コードのハードウェアサポートを廃止しました。
2006年にMontecitoがリリースされた際、Intelは基本的なプロセッサアーキテクチャに以下のような多くの改良を加えた。[ 31 ]
Intel Itaniumアーキテクチャ(IA-64)向けLinuxオペレーティングシステムの保守および開発