AMD64
AMD64の最新ニュースをまとめて検索!
AMD64は、インテルの開発したx86アーキテクチャをアドバンスト・マイクロ・デバイセズ (AMD)が拡張して64ビット化した命令セットである。AMDのOpteron、Athlon 64、Turion 64など最初に実装されたK8マイクロアーキテクチャとその後継製品に実装されている。後に、インテル社はAMD64と完全互換性を持つ命令セットをIntel 64の名称で採用した。
目次 |
[編集] 経緯
PC用アーキテクチャとして広く普及したx86は、半導体の製造技術とマイクロアーキテクチャの革新とともに性能の向上を続け、32ビットアーキテクチャであるIA-32に拡張してサーバやワークステーションといったエントリークラスのエンタープライズ市場でも広く受け入れられるに至った。しかし、IA-32の性能向上によって自社開発の64ビットアーキテクチャであるIA-64との競合を恐れたインテルは、IA-32の拡張を32ビットアーキテクチャの範囲に留めてIA-64との棲み分けを図った。これに対し、市場からは広く普及したIA-32アーキテクチャを64ビット化した、よりコストパフォーマンスに優れたエンタープライズ製品の登場が待ち望まれていた。高収益を望めるエンタープライズ市場への進出を図るAMDは市場のそうした需要に応えて、IA-32の64ビット拡張アーキテクチャとして、従来のIA-32のソフトウェアも利用が可能な命令セットとしてx86-64を発表した。その後の実際の製品発表でAMD64と改称された。この計画は、2000年8月に発表され、最初のプロセッサは2003年4月に出荷された。
インテルはIA-64を実装したItaniumで32ビットのIA-32アーキテクチャに対する明確な利点を示せず市場では苦戦を強いられていたため、AMDの64ビット拡張とは別個に社内でIA-32アーキテクチャを64ビットに拡張する計画[1]を持っていたが、OS市場を事実上掌握していたマイクロソフトから64ビット拡張の命令体系の一本化を要請され、AMDとほぼ同一の命令セットを採用することを決定した。これはIA-32eとしてその存在が公表され、後にEM64Tとして正式に発表された。その後、Intel 64に改称されている。
Windows以外にも、Mac OS XやLinux(FedoraやSUSE、Gentoo、Debian、Ubuntu)、BSD系OSなどがAMD64に対応している。
なお、AMD64を指す識別子としてUNIX及びLinuxではx86_64[2]というシンボルが与えられ普及している。BSD系OSではamd64というシンボルを与え、従来のi386と区別している。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アーキテクチャでは現状の実装で256テラバイトのメモリを扱うことが出来る。IA-32では標準で4ギガバイトであり、Windowsシリーズの一般的なバージョンにおいては、アプリケーションはその半分までしか使えない。ただし、IA-32でもPentium Pro以降の実装で追加されたアドレス空間を36ビットに拡張する物理アドレス拡張使用時であれば64ギガバイトまで使える。AMD64は、IA-32の物理アドレス拡張36ビットをベースに、更に52ビットへ拡張したものであり(ただし現状の実装では48ビットまでしか使用できないようになっている)、将来の拡張で4エクサバイトまでの仮想空間をサポートできるようになっている。ページングを使えば Long モードを使わなくても拡張された物理メモリ空間を32ビットオペレーティングシステムでアクセスすることができる。但し、32ビットモードで動作するプログラムは依然として仮想空間が4ギガバイトに制限される。物理メモリ空間は、現状の実装で1テラバイト、アーキテクチャ上の最大では2エクサバイトまでに拡張される。
- 関連:2進接頭辞
- RIP相対データアクセス
- プログラムカウンタ (RIP) 相対でデータにアクセスすることができ、リロケータブルな共有ライブラリのコードを最適化できる。また、共有ライブラリを仮想アドレス空間のどこにでも配置することができる。
- SSE 命令
- AMD64アーキテクチャでは明確にインテルのSSEとSSE2を基本命令セットに組み込んでいる。SSE2はx87の80ビット浮動小数点数から 32ビット/64ビットの浮動小数点数に置き換えたものである。SSE/SSE2命令セットは追加の8本のXMMレジスタを扱えるように拡張された。SSEとSSE2がAMD64命令セットに組み込まれており、それが従来のx87 FPUやMMXや3DNow!の機能をカバーする。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版にも引き継がれる制限となっている。
-
詳細は「Windows_NT系#Win16サブシステム」、「仮想DOSマシン#NT系での仮想DOSマシン」をそれぞれ参照
- レガシーモード
- 16ビットOS(MS-DOS - Windows 3.1等)や32ビットOS(Windows 95 - Windows XP等)で使われるモード。このモードでは、64ビットのプログラムは動作できない。IA-32互換。
[編集] 脚注
[編集] 関連項目
[編集] 外部リンク
最終更新 2009年10月26日 (月) 11:17 (日時は個人設定で未設定ならばUTC)。
【AMD64】変更履歴

