PowerPoint プレゼンテーション

4.1 Chapter Overview
4.2 The History of the 80x86
CPU Family
• Intel製CPU
の歴史
4004, 4040
• Intel
– 商用の初CPU
– まだ4ビットだった
8008, 8080, 8085
• Intel
– 4004を8ビットにしたも
の
– これを使って、Altair
8800 という初の
“Personal” Computer
が作られた
• 競合他社
– Motorola
• 6800: プログラムしやす
い
– Zilog
• Z80: 8080との互換性
8086
• Intel
• 競合他社
– 16ビットCPU
– メモリが16Kで$200の時代
• メモリ節約のため、8bitの
コードを実行可能に
– 当時としてはずば抜けた性
能
– Zilog
• Z8000
– Motorola
• 68000: 32-bit register
– National Semiconductor
• 16032 (renamed to
32016) : 32-bit register
• プログラムしやすさで勝っ
ていた
80186
• Intel
– 80186, 80188 (16-bit)
• 周辺回路を多数内蔵
• 8086の倍の速度
• 現在の主要なCPUはこれ
との互換性をもつ
• 1MBのメモリ制限(普通
のPCは4~64KB)
– iAPX432 (32-bit)
• Adaという言語のコンパイ
ラのみ
• IBMのPC/ATが人気に
• →自然消滅
80286
• Intel
– 80286 (16-bit)
• 1982年登場
• プロテクトモード採用
(メモリが最大16Mに)
• IBMのPC/ATに採用さ
れる→互換機普及
80386
• Intel
– 32ビットCPU
• 現在のPentium 4もこの命
令セットの拡張を使ってい
ます
– 4GBまでメモリが扱える(レ
ジスタ的に)
– FPUコプロセッサの80387
が存在する
– CISC
• 命令にかかるサイクルは
ばらばら
• 性能は良いが、開発が難
しい
• 競合他社
– RISCを開発
• 命令一つにかかるサイ
クルを小さく統一
• CPUをシンプルに
80486
• Intel
– FPU内蔵
– パイプライン導入
• 命令を予め処理してお
く
• 分岐に弱い
– 80386からの追加命令
は少ない
• 競合他社
– RISCでスーパースカ
ラを実現
• 1サイクルで命令を複
数実行
– 浮動小数点演算に強
かった
• CADなどに採用される
Pentium
• Intel
– 命名規則を変更
• 他社が同じ数字をつけ
るため
– デスクトップ用途で強
かった
Pentium Pro
• Intel
– 32ビットソフトウェアに
最適化
– サーバ用途向けの命
令セットを追加
– マルチプロセッサ可
– とはいえ、当時はまだ
まだ16ビットアプリ
ケーションが多く、実
力を発揮できずに消え
た
MMX Pentium
• Intel
– MMX命令をPentium
に追加
• ただし整数しか扱えな
い
– マルチメディア用途向
け
Pentium II
• Intel
– Pentium Pro += MMX
+ 16ビットの性能UP
– パフォーマンス主義に
→高価になり客減少
– ローエンド用のCeleron
を発表
• 2次キャッシュなし
• パフォーマンスは半分
– ハイエンド用にXeonを
発表
• キャッシュ増量
• 2つ以上のマルチプロ
セッサをサポート
Pentium III
• Intel
– SSE命令を追加
• 浮動小数点も扱える
– 1GHz達成はAMDに2
日遅れた・・・
– いつの間にか性能で
RISCを追い抜いてい
た
Pentium 4
• Intel
– Pentium Pro 以来の完
全に新しく設計された
コア
– このテキスト執筆時は
2GHzが最速
– その後追加の機能
• Hyper Threading
• Dual Core
• 競合他社
– RISCを64ビットCPUに
• 4GBを越えるメモリ搭
載も珍しくなくなった
Itanium (アイテニアム)
• Intel + HP
– Intel初の64ビットCPU
– IA-64という全く新しい
命令セットを使う
– 従来のx86はエミュ
レートで利用(遅い!)
– 当初の周波数は1GHz
• そのときPentium 4は
2GHzを達成
– 64ビット用コンパイラも
未成熟だった
• 競合他社
– 結局64ビット化は
AMD64が成功
– IntelはEM64Tによって
後追いになった
4.3 A History of Software
Development for the x86
• Intelが重視したもの
– 互換性
• 8085→8086
– バイナリ互換はない
– その代わり、CPU命令はほとんど同じ
– その頃のOSは CP/M、言語はMicrosoft
BASICが使用されていた
• これらの移行がもっとも大事
• 重要な出来事
– VisiCalc(世界初の表計算ソフト)の登場
• Appleはこれで急激に成長
– IBM PCの登場
• 趣味ではなく、ビジネス用に本格的にコンピュータ
が使われるようになった
• 多くのソフトウェアが作成されるようになった
• 8086のセグメントアーキテクチャ
– 4ビットのセグメントアドレスと16ビットのオフセットアド
レスを用いて20ビット(1MB)のメモリを扱う方法
• オフセットの値を間違えると、すぐにメモリの内容が破壊され
る
• IBM PC では640KBのメモリを搭載するものも
– 悪名高かった
– とはいえ従来の互換性+ハードウェア技術では仕方
なかった
– Z8000や68000の方が仕組みは優れていたが、既に
8086には大きなソフトウェア資産があった
• 80286
– プロテクトモードの登場
• 利点
– 16MBに緩和
– メモリ保護機能
• 欠点
– プロテクトモードとリアルモードの扱いが全く異なる
– 一度プロテクトモードになると、リセットしなければリアル
モードに戻れない
• 結局あまり使われなかった
• MS-DOS 1.0
– 当時のOSはフロッピ起動(IBMが紹介)
– Microsoft はQD-DOSを買収し、MS-DOSとして$50で
売り出した
– CP/Mは $595だった→誰も使わなくなった
• MS-DOS 2.0
– UNIXから色々機能をとってきて追加
– ハードウェアへのたいしたサポートがない
– システムリソースの管理はOSではなくアプリケーショ
ンの責任
• 80386
– 32ビットCPUになり、メモリがフラットに4GBま
で扱えた
– しかし、高価だったので8086や80286を使い続
ける人も多かった
– 結局Windows95が出るまで、セグメントアドレ
スは不平を言われ続けた
• その後
– 486, PentiumなどのCPUが普及
• 32ビットOSが本格普及
• 4GBまでメモリが扱える(Pentium Proは64GBまで)
• MMX、SSE
– 動画再生や3Dゲーム
– 音声認識や画像認識
4.4 Basic CPU Design
• 初期のプログラミング方法
– 物理的に結線していた
– 難しいので、ソケット方式に変更
• レジスタ追加後
4.5 Decoding and Executing
Instructions: Random Logic
Versus Microcode
4.6 RISC vs. CISC vs. VLIW
4.7 Instruction Execution, StepBy-Step
4.8 Parallelism - the Key to
Faster Processors
• 処理の並列化
– 互いに影響しない命令は同時処理できる
• 例:EIPのアップデートはいつでも良い
•Fetch the instruction byte from memory.
•Fetch the instruction byte from memory.
•Update the EIP register to point at the next byte.
•Decode the instruction to see what it does.
•Decode the instruction to see what it does.
•Fetch the source register and update the EIP
register to point at the next byte. .
•Fetch the source register.
•Store the fetched value into the destination register
•Store the fetched value into the destination register
• 場合によっては、命令の順序を入れ替える
•Fetch the instruction byte from memory.
•Fetch the instruction byte from memory.
•Decode the instruction and update EIP to point
at the next byte.
•Decode the instruction and update EIP to point
at the next byte.
•Fetch a displacement for use in the effective
address calculation
•Fetch a displacement for use in the effective
address calculation and update EIP to point
beyond the displacement value.
•Update EIP to point beyond the displacement
value.
•Fetch the constant value from memory and
send it to the ALU.
•Compute the address of the memory operand
(EBX+disp).
•Get the value of the source operand from
memory and send it to the ALU.
•Instruct the ALU to add the values.
•Store the result back into the memory operand
and update the flags register with the result of
the addition operation and update EIP to point
beyond the constant's value.
•Compute the address of the memory operand
(EBX+disp).
•Fetch the constant value from memory and
send it to the ALU.
•Get the value of the source operand from
memory and send it to the ALU.
•Instruct the ALU to add the values.
•Store the result back into the memory operand
and update the flags register with the result of
the addition operation and update EIP to point
beyond the constant's value.
4.8.1 The Prefetch Queue - Using
Unused Bus Cycles
• CPUとメモリ間のバスを有効利用
– 1サイクルに一つのデータしか転送できない
– レジスタへの値代入時はバスを使用しない
– →プリフェッチすると良い
• JNZなどでアドレスが突然変わると対応で
きない
4.8.2 Pipelining - Overlapping the
Execution of Multiple Instructions
• 80486から対応しました
4.8.2.1 A Typical Pipeline
– この命令を普通に4回行うと24クロック
– パイプラインを使うと9クロックで済む
4.8.2.2 Stalls in a Pipeline
• パイプライン処理を困難にする3つの問題
– 構造ハザード
– 制御ハザード
– データハザード
• 構造ハザード
– 同じタイミングで同じ回路を使用する時がある
– 前の処理が終わるまで待つ必要あり
• 制御ハザード
– JNZなどで条件分岐する場合におきる
• データハザード
– ある値を先に計算してしまうことにより、計算
結果が変わってしまう(4.8.4でまたやります)
4.8.3 Instruction Caches Providing Multiple Paths to
Memory
4.8.4 Hazards
4.8.5 Superscalar OperationExecuting Instructions in Parallel
4.8.6 Out of Order Execution
4.8.7 Register Renaming
4.8.8 Very Long Instruction Word
Architecture (VLIW)
4.8.9 Parallel Processing
4.8.10 Multiprocessing
• これまで紹介したテクニック
– fine-grained parallelism
– プログラマは特に意識しなくても高速になる
• Multi Processing
– Coarse-grained parallelism
– プログラマはマルチプロセッサを意識しなければいけ
ない
• 片方のCPUでの処理をもう片方に移動させるのは大きなコス
ト
– OSがマルチプロセッサ対応の必要
– キャッシュの一貫性
4.9 Putting It All Together
• CPUの進化は著しい
– X86アーキテクチャは10000倍の速度アップ
• いつまでもIA-32が続くとは限らない
– いずれIA-64などにとってかわられるかも?