| デザイナー | HPとインテル |
|---|---|
| ビット | 64ビット |
| 紹介された | 2001 |
| デザイン | すごい |
| タイプ | ロード・ストア |
| エンコーディング | 修理済み |
| 分岐 | 条件レジスタ |
| エンディアン | 選択可能 |
| レジスター | |
| 汎用 | 128(64ビット+1トラップビット、32は静的、96はレジスタウィンドウを使用);64個の1ビット述語レジスタ |
| 浮動小数点 | 128 |
IA-64(Intel Itaniumアーキテクチャ)は、製造中止となった64ビットIntelマイクロプロセッサItaniumファミリーの命令セットアーキテクチャ(ISA)です。ISAの基本仕様はヒューレット・パッカード(HP)で考案され、その後IntelとHPの共同で実装されました。最初のItaniumプロセッサ(コードネームMerced)は2001年にリリースされました。
Itaniumアーキテクチャは、明示的な命令レベルの並列性に基づいており、コンパイラがどの命令を並列実行するかを決定します。これは、プロセッサが実行時に命令の依存関係を管理するスーパースカラ・アーキテクチャとは対照的です。Tukwilaを含むすべてのItaniumモデルでは、コアは1サイクルあたり最大6命令を実行します。
2008年、Itaniumはx86-64、Power ISA、SPARCに次いで、エンタープライズクラスのシステム向けに4番目に多く導入されたマイクロプロセッサアーキテクチャでした。[ 1 ]
2019年、Intelは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(縮小命令セット・コンピューティング)アーキテクチャが1サイクルあたり1命令という処理限界に近づいていることを懸念し始めました。IntelとHPの研究者は共に、将来の設計に向けたコンピュータアーキテクチャの選択肢を模索しており、それぞれ1980年代初頭にイェール大学の研究から生まれたVLIW(超長命令語)[ 4 ]と呼ばれる新しい概念の研究を始めました[ 5 ] 。
VLIW は、RISC やCISCのようなコンピュータ アーキテクチャの概念であり、1 つの命令ワードに複数の命令が 1 つの非常に長い命令ワードでエンコードされて含まれ、プロセッサが各クロック サイクルで複数の命令を実行できるようにします。一般的な VLIW 実装では、同時に実行できる命令とそれらの命令の実行の適切なスケジュールをコンパイル時に決定し、分岐操作の方向を予測するために、高度なコンパイラに大きく依存しています。このアプローチの価値は、より少ないクロック サイクルでより有用な作業を実行し、プロセッサの命令スケジュールと分岐予測のハードウェア要件を簡素化することです。ただし、実行速度は速くなりますが、プロセッサの複雑さ、コスト、およびエネルギー消費が増加するというデメリットがあります。
この頃、HPは、自社のようなエンタープライズシステム企業にとって、独自仕様のマイクロプロセッサを開発することはもはや費用対効果が高くないと考え始めていました。Intelもまた、ハイエンドのエンタープライズサーバーや高性能コンピューティング(HPC)の要件に対応するため、x86 ISAを超えるアーキテクチャの選択肢をいくつか研究していました。
1994年、インテルとHPは提携し、VLIW設計コンセプトの派生形である「明示的並列命令コンピューティング(EPIC)」を用いてIA-64 ISAを開発しました。インテルの目標は、HPが初期のVLIW開発で培った専門知識と自社の専門知識を活用し、前述のハイエンドシステムをターゲットとした量産製品ラインを開発し、すべてのOEM(相手先ブランド製造会社)に販売することでした。一方、HPは、インテルの量産技術と最新のプロセス技術を用いて製造された、自社のPA-RISCプロセッサよりも優れた既製のプロセッサを購入したいと考えていました。
インテルは設計と商品化プロセスを主導し、HPはISAの定義、Merced/Itaniumマイクロアーキテクチャ、Itanium 2に貢献した。Itaniumファミリーの最初の製品であるMercedの当初の目標年は1998年だった。[ 4 ]
インテルの製品マーケティングと業界への取り組みは多大なものであり、当時のRISCプロセッサ搭載企業を含むエンタープライズサーバーOEMの大半から設計受注を獲得した。業界アナリストは、IA-64がサーバー、ワークステーション、ハイエンドデスクトップで主流となり、最終的にはあらゆる汎用アプリケーションにおいてRISCとCISCアーキテクチャの両方に取って代わると予測していた。[ 6 ] [ 7 ]コンパックとシリコングラフィックスは、それぞれ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 ](最後の3つは市場に出る前にキャンセルされた)などのUnix系システムを含む、いくつかのグループによって開発された。 1999年、インテルはLinuxをIA-64に移植するオープンソース業界コンソーシアムの結成を主導し、「Trillium」(後に商標問題のため「Trillian」に改名)と名付けた。このコンソーシアムはインテルが主導し、Caldera Systems、CERN、Cygnus Solutions、Hewlett-Packard、IBM、Red Hat、SGI、SuSE、TurboLinux、VA Linux Systemsが参加した。 その結果、実用的なIA-64 Linuxが予定より早く提供され、新しいItaniumプロセッサで動作する最初のOSとなった。
インテルは1999年10月4日にプロセッサの正式名称をItanium と発表した。 [ 15 ]数時間後、 Usenetのニュースグループで、1912年の処女航海で沈没した「沈まない」豪華客船タイタニック号をもじってItanicという名前が作られた。[ 16 ]
1999年10月5日の翌日、AMDはインテルのx86命令セットを拡張し、完全な下位互換性を持つ64ビットモードを追加する計画を発表し、さらに同社が既に開発を進めていたAMDの新しいx86 64ビットアーキテクチャが、AMDの次期第8世代マイクロプロセッサ(コード名SledgeHammer )に組み込まれることを明らかにしました。[ 17 ] AMDはまた、アーキテクチャの仕様と詳細を2000年8月に完全に公開することを示唆しました。[ 18 ]
AMD は IA-64 アーキテクチャへの貢献者として招かれたことはなく、いかなる種類のライセンス供与も期待できないことから、AMD のAMD64アーキテクチャ拡張は当初から、x86 と完全に互換性のないまったく新しい 64 ビット アーキテクチャを IA-64 で作成するという Intel のアプローチとは対照的に、従来の 32 ビット x86コードをサポートしながら、既存の x86 アーキテクチャに64 ビット コンピューティング機能を追加する革新的な方法として位置付けられていました。
2019年1月、インテルはKittsonの製造を中止し、最終注文日は2020年1月、最終出荷日は2021年7月と発表しました。[ 19 ] [ 20 ] 2023年11月、IA-64のサポートはLinuxカーネルから削除され、それ以来ツリー外で維持されています。[ 21 ] [ 22 ] [ 23 ]
インテルはItanium命令セットについて広範囲に文書化しており[ 24 ]、技術系プレスも概要を提供している[ 6 ] [ 9 ] 。
このアーキテクチャは、その歴史の中で何度か名称が変更されてきました。HPは当初PA-WideWordと呼んでいました。その後、IntelはIA-64、Itanium Processor Architecture (IPA)と呼び、[ 25 ] Intel Itanium Architectureに落ち着きましたが、現在でもIA-64という名称で広く知られています。
これは、64ビットのレジスタを多用した明示的並列アーキテクチャです。基本データワードは64ビットで、バイトアドレス指定可能です。論理アドレス空間は264バイトです。このアーキテクチャは、予測、投機、分岐予測を実装しています。パラメータの受け渡しには可変サイズのレジスタウィンドウを使用します。ループの並列実行にも、同じメカニズムが用いられています。投機、予測、予測、およびリネーミングはコンパイラによって制御され、各命令語にはそのための追加ビットが含まれています。このアプローチがこのアーキテクチャの特徴です。
このアーキテクチャは多数のレジスタを実装している: [ 26 ] [ 27 ] [ 28 ]
gr0fr0fr1pr0br0br.callbsp2番目のスタックを指しており、レジスタウィンドウがラップアラウンドした際にハードウェアが自動的にレジスタをスピルする場所です。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 FLOP を実行できます。例えば、800MHz の Itanium の理論上の性能は 3.2 GFLOPSで、最速の Itanium 2 は 1.67GHz で 6.67 GFLOPS でした。
実際には、データ依存性や利用可能なバンドルテンプレートの制限などにより、プロセッサが十分に活用されていないことが多く、すべてのスロットが有用な命令で埋め尽くされるとは限りません。可能な限り高密度なコードでは、命令あたり42.6ビットが必要ですが、当時の従来のRISCプロセッサでは命令あたり32ビットでした。また、無駄なスロットによるNo-OP命令によって、コード密度はさらに低下します。投機的ロード用の追加命令や、分岐やキャッシュに関するヒントを最適に生成することは現実的ではありません。これは、複数のプロセスを実行し、割り込みが発生するシステムでは、コンパイラが各キャッシュレベルの内容を予測できないためです。
2002年から2006年にかけて、Itanium 2プロセッサは共通のキャッシュ階層を共有していました。16KBのレベル1命令キャッシュと16KBのレベル1データキャッシュを搭載していました。L2キャッシュは命令キャッシュとデータキャッシュの両方が統合されており、256KBです。L3キャッシュも統合されており、サイズは1.5MBから24MBまで様々でした。256KBのL2キャッシュには、メインの算術論理ユニット(ALU)の 動作を妨げることなくセマフォ演算を処理するのに十分なロジックが搭載されています。
メインメモリは、オフチップチップセットへのバスを介してアクセスされます。Itanium 2バスは当初McKinleyバスと呼ばれていましたが、現在ではItaniumバスと呼ばれることが多くなっています。バスの速度は、新しいプロセッサのリリースとともに着実に向上しています。このバスは1クロックサイクルあたり2×128ビットを転送するため、200MHzのMcKinleyバスでは6.4GB/秒、533MHzのMontecitoバスでは17.056GB/秒の転送速度を実現しました[ 30 ]。
2006年以前にリリースされたItaniumプロセッサは、レガシーサーバーアプリケーションのサポートを可能にするためにIA-32アーキテクチャのハードウェアサポートを備えていましたが、IA-32コードのパフォーマンスはネイティブコードよりも大幅に低く、同時期のx86プロセッサのパフォーマンスよりも劣っていました。2005年、Intelはより優れたパフォーマンスを提供するソフトウェアエミュレータであるIA-32実行層(IA-32 EL)を開発しました。そのため、IntelはMontecitoでIA-32コードのハードウェアサポートを廃止しました。
2006年にモンテシトのリリースに伴い、インテルは基本的なプロセッサアーキテクチャに次のようないくつかの機能強化を行いました。[ 31 ]
Itaniumアーキテクチャ(IA-64)向けLinuxオペレーティングシステムの保守と開発