IA-32
IA-32(アイエー32、Intel Architecture 32)はインテルが開発した32ビットマイクロプロセッサのアーキテクチャの一つである。
呼称
IA-32は、インテルが新しい64ビットアーキテクチャであるIA-64を発表した際に、これと対比して従来の32ビットアーキテクチャ(すなわちx86)を総称したものである。インテルはIA-64に徐々に重点を移し、ハイエンドでRISCを追い落とし、ローエンドでx86互換CPUを振り切る狙いであった。
従って「IA-32」とは、本来は当時のx86(32ビット拡張後)を指すが、広くx86全般(32ビット拡張の前)を含めたり、更にはx86のその後の、AMD式64ビット拡張を基としたx64(x86-64。AMD64およびIntel 64)を含む場合もある。同じ64ビットでも、IA-64とx86-64は互換性が無いので注意が必要である。
なお名称の通りインテルの戦略面が強い用語のため、他社のx86互換CPUが「IA-32」と呼ばれる事は少ない。[1]。
概要
インテルが開発した8086およびその廉価版8088の命令セットは拡張を加えつつ後継CPUにも引き継がれ、(80186)、80286、80386(Intel386)、Intel 486に到るまで、その名称からまとめてx86アーキテクチャとも呼ばれている。そのx86アーキテクチャの中でも、命令セットに32ビット拡張命令を追加した80386以降のアーキテクチャを指して、現在はIA-32という。
しかし80386の発表と同時にIA-32と命名されたわけではない。インテルは旧来からの互換性を重視するあまりに冗長になってきたx86命令の置き換えを図り、ヒューレット・パッカードと共同で全く新たな64ビット命令セットを開発してIA-64と定義し、それを実装したプロセッサItaniumの開発に踏み切った。Itaniumには従来製品との命令に事実上互換性はなく、しかし普及への弾みを期待して市場の事実上の標準のインテルが開発している64ビットアーキテクチャであることを印象付ける目的があったと考えられる。IA-64が成立したことにより、対照的に従来の32ビット拡張命令を持ったx86アーキテクチャをIA-32と呼ぶことになった。
IA-64アーキテクチャはIA-32アーキテクチャと互換性がなく、市場において価格がこなれているIA-32アーキテクチャと上位互換性がある64ビット命令拡張の登場が望まれていた。インテルはIA-64を促進する裏でIA-32の64ビット拡張についても検討していたと思われるが、IA-64の普及を目指していた手前、64ビット拡張を公表せず、アドバンスト・マイクロ・デバイセズ (AMD) が先んじて64ビット拡張であるx86-64の計画を発表。後にAMD64と改称して正式発表を行った。これは、16ビットCPUである80286に32ビット拡張命令を追加して80386に拡張したように、IA-32アーキテクチャをベースに64ビット命令を追加して64ビットデータ処理機能を拡張したものである。
それに対しインテルは独自の64ビット拡張を検討していたが、仮にそれを実装した製品を発表した場合には市場占有率など優位な立場を利用したと見なされ、反トラスト法に抵触する恐れがあることや、基本ソフトの事実上の標準的立場にあるマイクロソフトから一本化の圧力をうけて、AMD64と互換性のあるIntel 64テクノロジを発表するにいたった。
AMD64もIntel 64もIA-32の64ビット命令拡張であり、共にIA-32に分類する場合もある。しかしながら、80386の命令互換であればIA-32のカテゴリに入るにもかかわらず、インテル製以外のプロセッサをIA-32と呼ぶことは多くはない。IA-32マイクロプロセッサは数多く存在し、i386DXから現行のIntel Atomまでがこのアーキテクチャが採用されている。
性質
IA-32のインストラクションセットはCISCアーキテクチャに分類される。頻繁に使用される命令の多くは1バイトで表現されることから、RISCの32ビットアーキテクチャに比べてコード密度が高い。これは前身のi8086と上位互換性を維持してきた事に由来する。また、複雑な動作をする命令も定義されており、例えば、インテルから提供されるリファレンスマニュアルに記載されている、命令動作を表現する擬似コードにおいてif文が3個も出現する、非常に複雑な命令も存在するほどである。
コード密度が高い事から一度のメモリアクセスでi386においては最大4命令、Pentiumにおいては最大8命令を同時に取り込むことができ、命令読み取りに要するバンド幅を低減させるとともに、演算パイプラインを複数備えるスーパースカラ構造においてIPCの向上に寄与する。また、単一の命令で複数の処理を一括処理できることから、高速に動作するマイクロコードでの実行比率を高め、特定の処理を達成するのに要する時間を短縮した。
しかし、命令の解釈実行をマイクロコードによらず、命令デコーダをワイヤードロジックで構成する時代にあっては、可変長の命令体系に対応するデコーダの回路規模が肥大化することとなった。また、スーパースカラ構成にするにあたり、前後の命令の依存関係をチェックする要求が加わると、なお回路規模が増すこととなり、完全にマイクロコードを排除することは困難であった。
インテルはこの問題に対しP6マイクロアーキテクチャという新しい設計によって解決を図った。高密度かつ複雑な命令を、単純かつ複数の命令に分割し、RISCプロセッサとして動作できるようにしたのである。これにより、RISCプロセッサではコード長が長い、複雑な命令が実行できないという欠点を克服しながらも、さらに従来のIA-32ソフトウエア資源を継承しつつ、新しい世代のプロセッサを開発する道筋を切り開いた。なおこのアイディアはインテルが最初に考案したものではない。NexGen(現在AMDに吸収された)のNexGenプロセッサーが最初である。インテルはそのアイディアを貪欲に吸収し、P6マイクロアーキテクチャの開発に役立てたと言われる。
その後、P6の考えをさらに推し進め命令発行部と命令実行部を分離したNetBurstマイクロアーキテクチャへと移っていった。しかし、パイプラインを細分化して動作周波数を高める事でパフォーマンスを向上させる事を前提としたアーキテクチャであり、パフォーマンスと引き換えに消費電力が増大して冷却が困難になるというデメリットを抱えた。消費電力が100W前後に達し、もはや通常のパソコンへの搭載が不可能な域に達すると、以後は、消費電力を増やさずにパフォーマンスを高める必要性が出てきた。その解決策としてP6とNetBurstを大きく見直し、クロックサイクル数を向上させるのではなく、1クロック中により多くの処理を行う方向へ転換し、消費電力を抑えたCoreマイクロアーキテクチャへと移行してきている。また、1命令で複数の演算を行うSIMDによる演算機構が拡張され、IA-32の弱点であった浮動小数点演算能力の低さを解消し、いくらか世代の古いスーパーコンピューターに匹敵する演算能力を獲得している。
IA-32プロセッサのFSBはPentium Pro時に大きな発展を遂げ、以降のプロセッサのFSBも基本的にPentium Pro時のプロトコルを継承している。但し世代ごとに若干の修正が加えられており、例えばPentium4世代においては、アドレス系バスが基本バスクロックの2倍、データ系バスが4倍の速度で転送が行われるようになった。この際同時に、キャッシュラインサイズが32Byteから64Byteに引き上げられた。またエラープロトコルにも若干の修正が加えられ、バスの使用効率が高まるよう変更された。さらにハイエンドプロセッサのXeon MP(4-Way以上をサポート)においては、IA-64のFSBプロトコルに似せて大きな拡張がなされており、複数のFSBを有する大規模なサーバ向けチップセットで、効率的にデータ転送が行えるようになっている。このように、IA-32プロセッサのハードウェア観点では、PC/ワークステーションなどの1-Way向け、ローエンドからミッドレンジ領域の2-Way向け、ハイエンドサーバ領域の4-Way以上向けの3種類が存在しており、それぞれでFSBプロトコルも互換性が無くなってきている。将来的にはシリアル通信を基本としたQuick Path Interconnectと呼ばれる新たなプロセッサ間接続をCPUへの導入計画している。
メモリ搭載の限界
セレクタを使用せず、オフセットのみを用いるFLAT MODELが多くのx86向けオペレーティングシステムに採用されている。このメモリモデルの場合、オフセットに使えるアドレス範囲は32ビットで、全てのセレクタが同一の仮想アドレス空間を参照していた場合1プロセスに許されるメモリ空間は4GB以下となる。
4GB未満の論理アドレス空間上に、任意の64ビット長アドレス指定で物理メモリへのウインドウを開く事が出来るOSはあるが、インメモリデータベースのような広大でリニアなメモリ空間が必要なソフトウェアにとっては64ビットアーキテクチャIA-64およびx64のような技術が必須となりえる。
x64により仮想アドレス空間は設計上では256TBまでリニアにアクセスする事ができるようになり、またWindows、NetBSD、FreeBSD、OpenBSD、Linux、Solarisはこれに対応し、また32ビットアーキテクチャで懸念事項であったカーネル空間の置き場所という問題も解決した(この問題は深刻であり、オペレーティングシステムのスケーラビリティを著しく制限するものであった)。
IA-32プロセッサの物理仕様上は40ビットアドレスをサポートしており、4-Way以上をサポートするXeon MPにおいては、MCHなどのチップセット側の制限はあるものの1TBの物理メモリをサポート可能である。但し、Xeon DP(2-Wayまで)やPC用の廉価CPUの領域においては、物理アドレスバスは36ビットであるため、物理アドレス空間は64GBまでとなっている。このアドレス空間の制限は、その世代において現実的に搭載可能な物理メモリの量を基準に決定されている。
近年の高速DDR SDRAMにおいては、1チャネルに実装可能なDIMMは電気的制限から4枚程度が限界とされている。このためメモリ搭載量を増やそうとした場合、必然的に多チャンネルをサポートする必要がある。しかし従来のDIMMは1チャネルあたり信号/GNDを合わせると150ピン前後を必要とするため、MCHなどのチップセット側の負担が大きく、多ピン化は即座にコストアップに跳ね返る。この問題を解決するためインテル主導でFBDIMM (Fully Buffered DIMM) と呼ばれる、シリアル転送に似た少ピンの高速インタフェースを有するDIMMを規格化した。2006年現在、既にDRAM各社はFBDIMMの生産を開始しており、FBDIMMサポートのサーバも出荷されている。FBDIMMではチップセット側で従来の半分以下のピン数しか必要としないため、少ピン数で多チャンネル化が可能である。またデイジーチェーンのようなトポロジを採用したため、1チャネルあたり8枚のDIMMをサポートすることが可能であり、今後サーバにおける搭載可能物理メモリ量も飛躍的に増大していくであろう。
FBDIMMの立ち上げに成功したインテルは、競合するAMDのOpteronに対抗する意味も含め、次世代XeonにおいてはDP領域のプロセッサに対しても40ビットのアドレスバスを持たせる事を計画している。
歴代のIA-32
Intel 80386
Intel 486
P5マイクロアーキテクチャ
P5マイクロアーキテクチャ。PentiumおよびMMX Pentium。
P6マイクロアーキテクチャ
P6マイクロアーキテクチャ。Pentium Pro、Pentium II、Pentium IIIとそれから派生したCeleronおよびXeonなどがある。
P7
Itanium開発のため、P7マイクロアーキテクチャ開発はキャンセルされた。
Intel Core
NetBurstマイクロアーキテクチャ
Coreマイクロアーキテクチャ
Nehalem(ネハレム)
2008年11月に最初の製品がCore i7として発売された。45nmプロセス。詳しくはNehalemマイクロアーキテクチャを参照のこと。
Westmere(ウェストメア)
Nehalemを32nmにシュリンクした上で小改良を行ったマイクロアーキテクチャ。1プロセッサ当たり最大でヘクサコアになるとされる。2010年前半に発売。ソケットLGA 1366とソケットLGA 1156(Socket H1)が採用される。
Intel Atom
詳しくはIntel Atomを参照のこと。
Sandy Bridge(サンディ・ブリッジ)
イスラエル・ハイファの開発チームの手による製品。2011年前半に発売された。Westmereと同じく32nmプロセスルールで製造される。以前はGesher(ゲッシャ)と呼ばれていた。Gesherは橋を意味するヘブライ語だが、イスラム圏への配慮からヘブライ語の名称は用いないこととなった。後継のIvy BridgeにもBridgeが付く。さらに以前ではGilo(ギロ)と呼ばれていた。
前時代では有効だったx86命令セットの継承が現在では逆に効率を大幅に落とす原因となっていることから、AVXと呼ばれる新しい命令セットが追加されている。コア毎に512KBのL2キャッシュを持ち、オクタ・コアとされている。全てのコアで共有されるL3キャッシュは、最大で16MB。
ソケットLGA 1155(Socket H2)とソケットLGA2011(Socket R)の二種類が採用される。
プロダクトネーム=Core i7/i5/i3 2xxx (ソケットLGA 1155)
プロダクトネーム=Core i7 3xxx (ソケットLGA2011)
Sandy Bridgeマイクロアーキテクチャを参照。
将来のIA-32
Ivy Bridge(アイビー・ブリッジ)
2012年に発売予定とされているSandy Bridgeに改良を加えたマイクロアーキテクチャ。32nmプロセスルールで製造されるSandy Bridgeとは違い、22nmプロセスルールで製造される予定。製造技術の刷新が行われるため、マイクロアーキテクチャの改良は小幅なものとなる見込み。
プロダクトネーム=Core i7/i5/i3 3xxx (LGA1155)
Haswell(ハスウェル)
2013年に発売を予定している22nmプロセスルールで製造される製品。Sandy Bridge、Ivy Bridgeのマイクロアーキテクチャを大きく刷新したものだとされている。
プロダクトネーム=Core i7/i5/i3 4xxx (LGA1150)
Broadwell(ブロードウェル)
2014年に発売を予定している14nmプロセスルールで製造される製品。マイクロアーキテクチャの改良は小幅なものとなる見込み。
プロダクトネーム=Core i7/i5/i3 5xxx
Skylake(スカイレイク)
2015年に発売を予定している14nmプロセスルールで製造される製品。Haswellのマイクロアーキテクチャを大きく刷新したものだとされている。 ここからLarrabeeが組み込まれる。
Skymont(スカイモント)
2016年に発売を予定している10nmプロセスルールで製造される製品。マイクロアーキテクチャの改良は小幅なものとなる見込み。
Larrabee(ララビ)
x86から派生した命令セットをシェーダーコアに採用したGPU、インオーダー実行。 詳細はLarrabeeを参照のこと。
脚注
関連項目
- IA-64 - 発表時にはIA-32の後継アーキテクチャとされた。IA-32とは互換性がないが、初期の製品はエミュレーションモードを有するものがある。
- AMD64 - AMDによる、IA-32互換な64ビットアーキテクチャ。
- Intel 64 - インテルによる、AMD64互換な64ビットアーキテクチャの実装。
- Intel iAPX 432 - 1981年発表の、インテル初の32ビットマイクロプロセッサ。IA-32とは互換性がない。
- Intel i960 - 1985年にテープアウトされた、インテルの32ビットRISCマイクロプロセッサ。IA-32とは互換性がない。
- Intel i860 - 1989年にリリースされた、インテルの32ビットRISCマイクロプロセッサ。IA-32とは互換性がない。
- XScale - 2002年にリリースされた、インテルが実装したARMアーキテクチャの32ビットRISCマイクロプロセッサ。IA-32とは互換性がない。