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などにとってかわられるかも?
© Copyright 2024 ExpyDoc