IA-32

**IA-32**（アイエー32、*Intel Architecture 32*）は80386の開発の際に定義された、16ビットx86を32ビットに拡張した命令セットアーキテクチャである。

## 呼称
**IA-32**という呼称自体は、インテルが新しい64ビットアーキテクチャである**[[IA-64]]**を発表した際に、それと対比して従来の32ビットアーキテクチャ（すなわち、386以降その時までのx86、及びその時点から未来の同一ISAプロセッサ）を指すものとして作られた一種のレトロニムである。

## 概要
インテル8086の命令セットアーキテクチャは拡張を加えつつ後継プロセッサに引き継がれ、(80186)、80286、386、486に到るまで、その名称からまとめてx86と呼ばれている。そのx86アーキテクチャの中で、アーキテクチャを32ビットに拡張した386以降、x64より前のアーキテクチャを指して（PentiumやCeleronやCoreやAtomなどのうちの32ビットのものも含む）、現在はIA-32という。

80386と同時にIA-32の名が生まれたわけではない。もっと後の、32ビットプロセッサが十分一般的になり将来の64ビット化が見えてきた1990年代後半、インテルは旧来からの互換性を重視するあまりに冗長になってきたx86の置き換えを図り、HPと共同で全く新たな64ビットアーキテクチャのIA-64を定義し、それを実装したプロセッサItaniumの開発に踏み切った。IA-64・Itaniumには従来製品と互換性はなく、しかし普及への弾みを期待して市場の事実上の標準のインテルが開発している64ビットアーキテクチャであることを印象付ける目的があったと考えられる。IA-64に対し、従来の32ビットx86のアーキテクチャをIA-32と名付けた。インテルはx86との連続性を断ち切ったIA-64に徐々に重点を移し、ハイエンドでサーバ用RISCメーカーを追い落とし、ローエンドで自社の過去であるx86と互換CPUを作る互換CPUメーカーを振り切る狙いであった。

インテルの狙いはともあれ、IA-64はIA-32と互換性がない（IA-64#IA-32サポートにより一応実行できるが、ろくな性能が出ない）ため、市場では従前のシステムをそのまま生かしたまま拡張できる、IA-32の上位互換の64ビット拡張が望まれていた。インテルはIA-64の普及を目指していたため自社の64ビット拡張を公表せず、AMDが先んじてx86の64ビット拡張であるx86-64、後のAMD64（x64#AMD64）を発表した。これは、16ビットの8086との互換性を保ったまま32ビットの386に拡張したように、IA-32との互換性を保ったまま64ビットに拡張したものである。

その後インテルはエンドユーザ向けシステムのオペレーティングシステムで大きなシェアを占めるマイクロソフトから一本化の圧力をうけて、AMD64と互換を取る方針に転じ、Intel 64（x64#Intel 64）を発表するにいたった。インテルは当初Intel 64についてIA-32eなどとも呼んでいた。

AMD64もIntel 64もIA-32の64ビット拡張であり、いろいろ紆余曲折があったが、結局総称としてはx64と呼ばれている。

IA-32マイクロプロセッサは始祖の386DXから現行のIntel Atomの一部まで数多く存在する（上位互換のx64を含めてIA-32にカウントすることもある）。x64ではなくIA-32を現行で採用する理由としては、性能より省電力の要求が高いモバイル用や、仮想化で軽い仕事をさせる前提である、といったものがある。

## 性質
8086との互換性を維持したまま拡張を続けてきたため、命令フォーマットに多数のバリエーションがある可変長命令セットとなっている。頻繁に使用される命令の多くが1バイトで表現されることから、典型的なRISCの4バイト固定長命令に比べてコード密度が高い。

1命令で複雑な動作をする命令もあり、例えば、インテルから提供されるリファレンスマニュアルに記載されている、動作を表現する擬似コードにおいてif文が3個も出現する、非常に複雑な命令も存在するほどである。

コード密度が高い事から一度のメモリアクセスで386においては最大4命令、Pentiumにおいては最大8命令を同時に取り込むことができ、命令読み取りに要するバンド幅を低減させるとともに、演算パイプラインを複数備えるスーパースカラー構造においてIPCの向上に寄与する。また、単一の命令で複数の処理を一括で行うことから、高速に動作するマイクロコードでの実行比率を高め、特定の処理を達成するのに要する時間を短縮した。

このような複雑な命令セットや複雑な命令は、ワイヤードロジックでの実行は難しいのではないかと考えられていたが、インテルは486で一部の複雑な命令を除いてワイヤードロジック化した。

PentiumのP5マイクロアーキテクチャでスーパースカラを採用するにあたり、前後の命令の依存関係をチェックする要求が加わると、なおのことデコーダの複雑性が増すこととなり、完全にマイクロコードを排除することは困難であった。

P6マイクロアーキテクチャでは、この問題を、複雑な命令を複数の単純な命令に変換し、内部のRISCプロセッサで実行するようにして解決した。これによりRISCの、命令コード密度が低い、複雑な命令が実行できないという欠点を克服しながらも、さらに従来のIA-32ソフトウエア資源を継承しつつ、新しい世代のプロセッサを開発する道筋を切り開いた。なおこのアイディアはインテルが最初に考案したものではない。古くはR800がそのようなデザインであったし、マイクロプログラム方式のアイディアをワイヤードロジックで実装したものとも言える。x86互換プロセッサでは、AMDに吸収されたNexGenのNx586が最初である（吸収された後AMD K6の基となった）。インテルはこのアイディアを貪欲に吸収し、P6マイクロアーキテクチャの開発に役立てたと言われる。

その後、P6の考えをさらに推し進め命令発行部と命令実行部を分離したNetBurstマイクロアーキテクチャへと発展した。しかし、パイプラインを細分化して動作周波数を高める事でパフォーマンスを向上させる事を前提としたアーキテクチャであり、パフォーマンスと引き換えに消費電力が増大して冷却が困難になるというデメリットを抱えた。消費電力が100W前後に達し、もはや通常のパソコンへの搭載が不可能な域に達すると、以後は、消費電力を増やさずにパフォーマンスを高める必要性が出てきた。その解決策としてP6とNetBurstを大きく見直し、動作周波数を向上させるのではなく、1クロック中により多くの処理を行う方向へ転換し、消費電力を抑えたCoreマイクロアーキテクチャへと移行した。Coreでは、「Coreマイクロアーキテクチャはもはや内部RISCプロセッサのアーキテクチャではない」と言われた。P5ではMMX、P6ではSSE (SSE1) が導入されたSIMD拡張だが、NetBurstではSSE2が導入され動画ストリームの処理が強化された。

IA-32プロセッサのFSBはPentium Pro時に大きな発展を遂げ、以降のプロセッサのFSBも基本的にPentium Pro時のプロトコルを継承している。但し世代ごとに若干の修正が加えられており、例えばPentium 4世代においては、アドレス系バスが基本バスクロックの2倍、データ系バスが4倍の速度で転送が行われるようになった。同時に、キャッシュラインサイズが32Byteから64Byteに引き上げられた。またエラープロトコルにも若干の修正が加えられ、バスの使用効率が高まるよう変更された。さらにハイエンドプロセッサのXeon MP（4-Way以上をサポート）においては、IA-64のFSBプロトコルに似せて大きな拡張がなされており、複数のFSBを有する大規模なサーバ向けチップセットで、効率的にデータ転送が行えるようになっている。このように、IA-32プロセッサのハードウェア観点では、PC/ワークステーションなどの1-Way向け、ローエンドからミッドレンジ領域の2-Way向け、ハイエンドサーバ領域の4-Way以上向けの3種類が併存し、相互に互換性が無くなってきている。将来的にはシリアル通信を基本としたQuick Path Interconnectと呼ばれる新たなプロセッサ間接続をCPUへの導入計画している。

## メモリ搭載の限界
多くのx86向けオペレーティングシステムで採用されている**フラットメモリモデル**では、全てのセグメントセレクタが同じリニアアドレス空間を参照する。この場合、プロセスごとに32ビットの仮想アドレス空間を利用し、1プロセスに与えられるメモリ空間は4GiBとなる。つまり、論理アドレス空間全体がフラットであり、セグメントによる区切りは事実上無視されている。

P6以降のプロセッサでは、物理アドレス拡張（PAE）により最大64GiBの物理メモリにページを割り当てることが可能となったが、ユーザープロセスが扱える仮想メモリ空間は依然として4GiBに制限されている。このため、大規模なメモリ空間を必要とするソフトウェア、特にインメモリデータベースのような用途では64ビット化が強く求められるようになった。

x64により、仮想アドレス空間は設計上256TBまでリニアにアクセスできるようになり、Windows、NetBSD、FreeBSD、OpenBSD、Linux、Solarisはこれに対応した。同時に、32ビットアーキテクチャで課題となっていたカーネル空間の配置問題も解消された。この問題はオペレーティングシステムのスケーラビリティを大きく制限していたが、x64では解決されている。

IA-32プロセッサは物理的には40ビットのアドレスをサポートしており、4-Way以上をサポートするXeon MPでは、MCHなどのチップセットによる制約があるものの、最大1TBの物理メモリをサポート可能である。ただし、Xeon DP（2-Wayまで）やPC用の廉価版CPUでは、物理アドレスバスが36ビットのため、物理アドレス空間は64GBに制限される。この制限は、その時代の現実的な物理メモリの搭載量を基準に決定されたものである。

近年の高速DDR SDRAMでは、1チャネルあたりに実装可能なDIMMは電気的制約から4枚程度が限界とされている。また、将来のDDR SDRAM（後のDDR3 SDRAM）では、これを1チャネルあたり1枚に減らすことも検討されていた。この場合、メモリ搭載量を増やすには多チャンネル対応が必須となる。しかし、従来のDIMMは1チャネルあたり約150ピン（信号/GND含む）を必要とするため、MCHなどのチップセットの負担が大きくなり、ピン数の増加はコストアップに直結する。この問題を解決するため、インテルは少ピン高速インターフェースを持つFBDIMM（Fully Buffered DIMM）を規格化した。2006年にはDRAM各社がFBDIMMの生産を開始し、FBDIMM対応のサーバも出荷された。FBDIMMでは従来の半分以下のピン数で多チャンネル化が可能であり、1チャネルあたり8枚のDIMMをサポートするため、サーバの物理メモリ搭載量が飛躍的に増加すると期待された。

しかし、FBDIMMにはいくつかの問題があった。DIMM基板上のDRAMチップに接続される高速インターフェース用コントローラ（AMB）は発熱と消費電力が大きく、チャネルあたりのモジュール数が増えると、メモリアクセス時のレイテンシが増大する（メモリ性能の低下）という問題もあった。レイテンシの増加は、一般にCPU内蔵キャッシュメモリの増量や命令処理の多段パイプライン化で隠蔽されるが、巨大データを扱うデータベースなどのアプリケーションでは効果が限定的だった。さらに、DDR3メモリが規格化された際には、1チャネルあたりのDIMM数が最大2枚に制限され、FBDIMMはライセンス料問題（ラムバスの特許）も重なり、各社がFBDIMMを積極的に採用する理由はなくなった。

その結果、インテルは2006年以降、方針を転換し、Nehalemマイクロアーキテクチャを採用したCPUにおいて、AMDのOpteronのようにメモリコントローラをCPUに内蔵し、通常のDIMMを利用可能にした。これにより、サーバではCPUソケット数が増えるとともにDIMMソケット数も増加するスケーラブルなアーキテクチャが実現された。この方式により、CPUとMCH間の通信によるレイテンシも削減され、Nehalemマイクロアーキテクチャ世代のXeonでは、前世代のCoreマイクロアーキテクチャ世代のXeonより低レイテンシなメモリアクセスが実現されている。

Nehalemのメモリアーキテクチャ以降、メモリ技術は大きく進化している。まず、DDR4メモリが2014年に登場し、DDR3に比べてデータ転送速度や消費電力効率が向上した。DDR4は最大で3.2GT/sのデータレートをサポートし、電圧は1.2Vまで低下し、エネルギー効率を高めた。これにより、特にサーバやデータセンター向けのシステムにおいて、メモリ性能の向上が求められる場面での効果が顕著だった。

次に、メモリアーキテクチャ全体においても変化があった。IntelはNehalem以降、メモリコントローラをCPUに内蔵する設計を続けており、これによりスケーラビリティの高いメモリアクセスを実現してきた。その後のSandy BridgeやHaswellアーキテクチャでもこの設計は引き継がれ、メモリ帯域幅の拡大やレイテンシの低減が続けられている。

さらに、2019年にはDDR5メモリが正式に標準化され、2021年から一般市場に登場している。DDR5はDDR4の2倍のデータレート（最大6.4GT/s）をサポートし、モジュールあたりのメモリ容量も大幅に増加可能となった。また、電圧はさらに低い1.1Vとなり、さらなる省電力化が図られている。加えて、DDR5では各モジュールが2つの独立した32ビットのサブチャネルを持ち、これによりアクセス効率が向上し、より高いメモリ帯域幅を引き出すことができる。

メモリ技術の進歩はこれだけに留まらない。IntelやAMDは、より高度なキャッシュコヒーレンシやNUMA（Non-Uniform Memory Access）をサポートすることで、マルチソケット環境でのメモリアクセスの効率化を進めている。たとえば、AMDのEPYCプロセッサは大量のメモリチャネルを提供することで、並列処理が多いワークロードに対して優れたメモリアクセス性能を発揮する。また、IntelのIce LakeやSapphire Rapids世代のXeonプロセッサもDDR5やPCIe 5.0をサポートしており、次世代の高速データ転送が可能となっている。

さらに、メモリとストレージの境界を曖昧にする技術として、IntelのOptaneメモリやSamsungのZ-NANDなどの新しい不揮発性メモリ技術が登場している。これらは、従来のDRAMに比べてデータの永続性を持ちながらも、高速なアクセスを提供する。特に、IntelのOptane Persistent Memoryは、大容量のメモリを必要とするワークロードにおいて、コスト効率よくメモリ容量を拡張する手段として注目されている。

総じて、メモリ技術はこの15年で飛躍的に進化しており、DDR4からDDR5への移行、NUMAの強化、さらには不揮発性メモリの普及など、システム全体の性能と効率を高める多くの技術革新が行われている。これにより、サーバや高性能コンピューティングの分野では、ますます大規模なデータ処理やリアルタイム分析が可能となっている。

## マイクロアーキテクチャ一覧
* 80386 80386
* 486 486
* P5 Pentium 他
* P6 P6マイクロアーキテクチャ。Pentium Pro、Pentium II、Pentium IIIとそれから派生したCeleronおよびXeonなどがある。
* P7 P7はItaniumの開発コードネームとされ、IA-64アーキテクチャでありIA-32のマイクロアーキテクチャではない。
* NetBurst NetBurstマイクロアーキテクチャ。Pentium 4やPentium Dやなどがある。
NetBurstの途中でIntel 64が拡張された。

### Atom系

### Intel 64

* Core Coreマイクロアーキテクチャ
* Nehalem Nehalemマイクロアーキテクチャ 2008年11月に最初の製品がCore i7として発売された。45nmプロセス。
* Sandy Bridge

イスラエル・ハイファの開発チームの手による製品。2011年前半に発売された。Westmereと同じく32nmプロセス・ルールで製造される。以前はGesher（ゲッシャ）と呼ばれていた。Gesherは橋を意味するヘブライ語だが、イスラム圏への配慮からヘブライ語の名称は用いないこととなった。さらに以前ではGilo（ギロ）と呼ばれていた。
前時代では有効だったx86命令セットの継承が現在では逆に効率を大幅に落とす原因となっていることから、AVXと呼ばれる新しい命令セットが追加されている。また、プロセスルールを22nmにシュリンクしたIvy Bridgeも存在する。
ソケットLGA 1155(Socket H2)とソケットLGA2011(Socket R)の二種類が採用される。
プロダクトネーム＝Core i7/i5/i3 2xxx (ソケットLGA 1155)
プロダクトネーム＝Core i7         3xxx (ソケットLGA2011)
* Haswell

2013年に発売を予定している22nmプロセスルールで製造される製品。Sandy Bridge、Ivy Bridgeのマイクロアーキテクチャを大きく刷新したものだとされている。
プロダクトネーム＝Core i7/i5/i3 4xxx (LGA1150)
プロダクトネーム＝Core i7         5xxx (ソケットLGA2011-v3)
* Broadwell
2014年に発売を予定しているHaswellを14nmプロセスルールに縮小したものによる製品。
プロダクトネーム＝Core i7/i5/i3 5xxx
* Skylake
2015年に発売を予定している14nmプロセスルールで製造される製品。Haswellのマイクロアーキテクチャを大きく刷新したものだとされている。
ここからLarrabeeが組み込まれる。
プロダクトネーム＝Core i7/i5/i3 6xxx (LGA1151)
* Cannonlake
2016年に発売を予定しているSkylakeを10nmプロセスルールに縮小したものによる製品。

### Larrabee

x86から派生した命令セットをシェーダーコアに採用したGPU、インオーダー実行。

## 脚注