先日の「月刊誌「日経WinPC」が休刊」するで書いたように今月はスキップ予定だったのですが、休刊の報を受けて急きょ先月発売(現在販売中)の10月号を購入し(併せて「DOS/V POWER REPORT 10月号」も買いました)いくつかの記事を読んでみました。
その中で、大原雄介さんの連載「PC技術興亡史」の「第30回 CPU」を読んで、自分の記憶とあまりに違うので、念のために8086から80386までのパイプライン構造を調べてみました。
私が気になったのは以下の記述です:
80386はIntelで初めてパイプライン処理を実現した製品だ。Intelは「Parallel Pipeline(並列パイプライン)」と呼んだが、実態はごく普通のパイプライン処理である。
80286までは1つの命令のフェッチ(読み出し)/デコード/実行という一連の作業が終わって、ようやく次のフェッチに取り掛かる仕組みだった。80386は命令の処理のいくつかの段階で切り上げた上で、並行して処理できる
~(中略)~
実は80286や8086でもパイプライン自体は実装されていた。ただし、命令の並列処理が事実上できていなかった。
日経WinPC 2013年10月号 P.136より引用
さて…。私の記憶が確かならば、8086もパイプラインを採用しており、また80286と80386は16ビットか32ビットかの差はあれ、基本的に同じ構造であったはずなのです。
まずは8086から見てみましょう。
8086は「Bus Interface Unit(BIU)」と「Execution Unit(EU)」から構成されたパイプラインを搭載しています。実行シーケンスは以下の例のように流れます:
「8086 Architecture – Brock Computer Science」より引用
このように2段とはいえ、きちんと動作するパイプラインが実装されています。
続いて80286を見てみましょう。
80286は8086の2つをさらに細分化した、以下の4ユニットから構成されています。
- BUS UNIT
- INSTRUCTION UNIT
- EXECUTION UNIT
- ADDRESS UNIT
「Intel iAPX 286 Programmer’s Reference Manual」の310/370ページより引用
このように4段のパイプラインを搭載し、8086よりも効率的に動作するように設計されています。これにより80286は8086と比較して同一のクロックでもより高速に動作します。
さらに続けて80386を見てみましょう。
「vanilla47.com」より引用
80386も80286と同様に4段のパイプライン構成です。内部構造もほぼ同じまま、32ビット拡張がなされています。このため、同一のクロックでは32ビット拡張と機能拡張の影響でやや遅くなります。
このように、少なくとも80386と80286のパイプラインは同等です。8086も半分の段数とはいえパイプライン構造です。これを最初に引用したように記載しているのは、残念ながら内容に誤りがあるといわざるを得ません。
80286と80386を別に扱うとしても、8086のパイプラインが使用できないというのであれば、何がどうだという定義をしっかりと書くべきでしょう。この記事では何を書いているのか意味不明だと私には思えます。
2013年11月11日追記
文献によっては、80386のパイプラインが4段ではなく、ブロックダイアグラムが6個に分割されていることから6段であるとすることもあります(Web検索をすると、4段※1と6段※2の両方の記述がみられることがわかります)。が、いずれにしても80286と80386の構造は大きく変わりませんし、80386が80286よりも同一クロックでは遅いということも事実です。
80386のパイプラインが4段か6段かは別として、8086は2段のパイプライン、80286は4段のパイプラインであり、「80286までは1つの命令のフェッチ(読み出し)/デコード/実行という一連の作業が終わって、ようやく次のフェッチに取り掛かる仕組みだった」および「命令の並列処理が事実上できていなかった」という指摘がおかしいという論旨の変更はありません(この追記項の追加を除いて前述本文に変更は行っていません)。
もしも80386で初めてパイプラインが現実的に動作したのであれば、パイプラインが現実的に動作していなかったとする80286より遅かったということはありえないでしょう。
2013年11月12日追記
私が勝手に80386のパイプラインが4段と思い込んだはずはなく、また上記本文で引用した図も何らかの資料を参考にしたはずです。ということは、私は具体的な何かを見ていたはずだと当時のことをいろいろと考えてみたところ、東京の池袋駅の東武百貨店の中にあった本屋さん(書店名失念)で、よくIntelやMotoloraなどのデータシートを立ち読みしていたことを思い出しました。
そこで、Intelが公開していたかつてのドキュメントをいろいろと探したところ、Intelによって発行された資料に4段であることを示す図を(再)発見しました:
iAPX 386 HIGH PERFORMANCE 32-BIT MICROPROCESSOR PRODUCT REVIEW
(APRIL 1984 / ORDER NUMBER: 231052-001)の1ページ目より引用
この点線で囲まれた4ブロックがパイプラインの段に相当します。このように80286と同様に4段を構成しています。パイプラインの構成要素は図の通り、以下の4つです:
- BUS INTERFACE UNIT
- INSTRUCTION DECODE UNIT
- EXECUTION UNIT
- ADDRESS TRANSLATION UNIT
このように80286と比較して、やや名称が変更されたものがあるものの、同一の構成であることが見て取れます。
以上のように、本稿の本文として私が記載した80386のパイプラインは4段で80286と同様の構成であるという内容について1次ソースで確認が取れたましたので、ここに追記しておきます。
P.S.
見ての通り、これは画像です。この資料はスキャンされてOCRにかけられることなく画像のまま保存されていたため、普通に検索しても見つけられずにてこずり、昨晩は掲載することができませんでした。本日、周辺資料から順番に検索して見ていき、なんとか見つけて掲載できました。
- 例えば「Intel 80386DX – PC Guide」というページでは「pipeline depth」欄に「4」と記載しています。また書籍「僕らのパソコン 30年史 ニッポン パソコンクロニクル SE編集部 / 翔泳社」においても4段との記載があります。
- 例えば「Intel 80386 – Wikipedia日本語版」には6段と4段の両方の記載が混在しています。