AMD64

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内, 検索

AMD64は、インテルの開発したx86アーキテクチャをアドバンスト・マイクロ・デバイセズ (AMD)が拡張して64ビット化した命令セットである。AMDのOpteronAthlon 64Turion 64など最初に実装されたK8マイクロアーキテクチャとその後継製品に実装されている。後に、インテルはAMD64と完全互換性を持つ命令セットをIntel 64の名称で採用した。

目次

[編集] 経緯

PC用アーキテクチャとして広く普及したx86は、半導体の製造技術とマイクロアーキテクチャの革新とともに性能の向上を続け、サーバやワークステーションといったエントリークラスのエンタープライズ市場でも広く受け入れられるに至った。しかし、IA-32の性能向上によって自社開発の64ビットアーキテクチャであるIA-64との競合を懸念したインテルは、x86の拡張を32ビットアーキテクチャの範囲に留めてIA-64との棲み分けを図った。これに対し、市場からは広く普及したIA-32アーキテクチャと互換性を保ちつつ64ビットに拡張した、よりコストパフォーマンスに優れたエンタープライズ製品の登場が待ち望まれていた。高収益を望めるエンタープライズ市場への進出を図っていたAMDはそうした需要に応えて、x86の64ビット拡張アーキテクチャとして、従来のIA-32のソフトウェアも利用が可能な命令セットとしてx86-64を発表した。その後の実際の製品発表でAMD64と改称された。この計画は、2000年8月に発表され、最初のプロセッサは2003年4月に出荷された。

インテルはIA-64を実装したItaniumで32ビットのx86アーキテクチャに対する明確な利点を示せず市場では苦戦を強いられていたため、AMDの64ビット拡張とは別個に社内でIA-32アーキテクチャを64ビットに拡張する計画[1]を持っていたが、これはAMD64とは互換性がなかった。OS市場を事実上掌握していたマイクロソフトは64ビット拡張の命令体系の一本化を要請し、その命令セットとしてAMDのx86-64を採用することを決定した。これによりintelは、自社開発のx86の64bit拡張アーキテクチャを断念し、AMD64を後にEM64Tとして採用するに至った。その後、Intel 64に改称されている。

Windows以外にも、Mac OS XLinuxBSD系OSなどがAMD64に対応している。AMD64、Intel 64 の総称としてx86_64 ( Windowsでは x64 ) が用いられている。

[編集] アーキテクチャ概要

AMD64命令セットには、インテルのIA-32アーキテクチャに指摘されるアンバランスで特異な部分を、きれいで使いやすいものにするという目論見があった。また、同時に先行している 64ビットRISC環境に似せたアーキテクチャにしようと考えて設計された。DEC Alpha の設計者の一人 ダーク・メイヤー が AMD64仕様の作成に関わり、彼をはじめとするDEC出身者の経験がこのプロジェクトに活かされた。特筆すべき点は以下のようなものである。

レジスタの追加と拡張
汎用レジスタ (GPR) 数はIA-32の8本 (EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP) に更にR8〜R15の8本を追加して16本に増やされ、各レジスタのビット幅も32ビットから64ビットに拡張された。IA-32は汎用レジスタが少ないことからコンパイラによる最適化に限界があり、これが最も大きな欠点とされた。AMD64に最適化されたアプリケーションでは、レジスタ本数の増加によって性能向上が見込まれ、特に深いループを持った演算主体のソフトウェアでその傾向が強いと見込まれる。さらに128ビットのXMMレジスタの本数も8本から16本に増やされた(Streaming SIMD命令で使われる)。
アドレス空間の拡張
AMD64アーキテクチャでは、現状の実装で48ビットのアドレス空間を持ち、256テラバイトまでのメモリを扱うことが出来る。IA-32アーキテクチャにおいて初期のプロセッサでは、アドレス空間は32ビットで表現できる4GiBに制約され、Pentium Pro以降の実装で追加された物理アドレス拡張機能を使用することで64GiBのメモリを接続できるが、1プロセスで利用可能なメモリ空間はやはり4GiBに制約された。32bit版Windowsシリーズにおいては、OSの仕様でアプリケーションが利用可能なメモリはおよそ3GiBに制約される[2]。これに対しAMD64のLongモードでは、IA-32の物理アドレス拡張をベースに、論理アドレス空間を48ビットへ拡張し(現状物理アドレス空間は52ビット)、将来の拡張で4エクサバイトまでの仮想空間をサポートできるようになっている。
関連:2進接頭辞
RIP相対データアクセス
プログラムカウンタ (RIP) 相対でデータにアクセスすることができ、リロケータブルな共有ライブラリのコードを作成できる。また、共有ライブラリを仮想アドレス空間のどこにでも配置することができる。
SSE 命令
AMD64アーキテクチャでは明確にインテルのSSESSE2を基本命令セットに組み込んでいる。SSE2はx87の80ビット浮動小数点数から 32ビット/64ビットの浮動小数点数に置き換えたものである。SSE/SSE2命令セットは追加の8本のXMMレジスタを扱えるように拡張された。SSEとSSE2がAMD64命令セットに組み込まれており、それが従来のx87 FPUMMX3DNow!の機能をカバーする。x64版Windowsでの64ビットプログラムでは、FPU/MMXレジスタをコンテキストスイッチの際に保存しないようにすると噂されたが、実際には保存されるようになっている[1]

[編集] 動作モード

動作モード 必要なOS 再コンパイルの必要性 アドレスサイズの既定値 オペランドサイズの既定値 レジスタの拡張 典型的な汎用レジスタの幅
Long モード 64ビット モード 新しい 64ビットOS 必要 64 32 有り 64
互換モード 不要 32 32 なし 32
16 16 16
レガシー モード プロテクト モード 従来の 16/32ビットOS 不要 32 32 なし 32
16 16
仮想8086 モード 16 16 16
リアル モード 従来の 16ビットOS

[編集] 動作モードの解説

このアーキテクチャでは、以下のふたつの動作モードに分類される。

Long モード
AMD64で拡張された部分に対応する動作モードである。これにはネイティブの64ビットモードと互換のための32ビットモードが含まれる。IA-32でのマイナーな動作モードはサポートされない。このモードは64ビットのOSで使用される。
基本的な命令セットは同じなので、x86コードを実行しても性能が低下することはない。インテルのIA-64では32ビットコードの性能低下が問題となったが、これは命令セットが全く違うためにエミュレート実行していたためである。一方、AMD64では32ビットのx86用アプリケーションを再コンパイルすれば(レジスタが増えているため)性能が向上する。
Long モードを使うと、64ビットOSは 32ビットアプリケーションと64ビットアプリケーションを並行して実行できる。また、AMD64は 16ビットのアプリケーションも実行することができる。しかし、Windowsの16ビットアプリケーション (Win16) のサポートに欠かせない仮想86モードは使用できないため、マイクロソフトは WOW64サブシステムでの16ビットアプリケーションの実行機能の実装を断念し、Windows XP Professional x64 Edition でのWin16アプリケーション実行をサポートしていない。これはWindows Vista以降のx64版にも引き継がれる制限となっている。
レガシーモード
16ビットOS(MS-DOS - Windows 3.1等)や32ビットOS(Windows 95 - Windows XP等)で使われるモード。このモードでは、64ビットのプログラムは動作できない。IA-32互換。

[編集] 脚注

[ヘルプ]
  1. ^ Yamhill、後にClakamas Technologyのコード名で呼ばれた。詳細はIntel 64を参照のこと。
  2. ^ 詳細についてはWindows NT系を参照のこと。

[編集] 関連項目

[編集] 外部リンク

個人用ツール
名前空間
変種
操作
案内
ヘルプ
ツールボックス
他の言語