ITmedia NEWS > STUDIO >

RISCの元祖、IBM 801はなぜ誕生したのか新連載「RISCの生い立ちからRISC-Vまでの遠い道のり」(2/3 ページ)

» 2020年02月28日 12時41分 公開
[大原雄介ITmedia]

 もちろんSystem/370の命令と互換性を保つ必要があれば、いやでもこうした命令をサポートする必要があるのだが、幸いにも交換機プロジェクトは単に性能が12MIPSあれば良い、ということで命令セットの互換性を保つ必要はなかった。そこで博士は全く新しい命令体系を生み出す。具体的には、

  • 演算は全てレジスタからデータを読み出し、結果もレジスタに書き戻す。メモリアクセスはLOAD/STORE命令のみが可能とした。この結果、デコーダーが簡単になり、また命令パイプラインもシンプルにできた
  • 命令キャッシュとデータキャッシュを分離した構造(いわゆるHarvard architecture)を取ることで、特に命令をスムーズにパイプラインに供給できるようにした
  • 命令長を固定にすることでデコードの効率を引き上げ、結果としてサイクル時間短縮(=動作周波数向上)を実現する
  • 分岐に対応するBRANCH AND EXECUTEという、一種の遅延スロットを実装する

──といった事柄が挙げられる。ちなみに最後の遅延スロットは博士の発明ではなく、もともとはLASL(Los Alamos Scientific Laboratory:現在のLANL: Los Alamos National Laboratorの前身)が52年に製造したMANIAC I(Mathematical Analyzer, Numerical Integrator, and Computer or Mathematical Analyzer, Numerator, Integrator, and Computer)というマシンで実装されたメカニズムが最初との話であった。

 この命令フォーマット原案は75年に完成し、これの評価が良かったためかプロジェクトはお取りつぶしとならず、あらためてIBM 801プロジェクトとして存続が決まった。この時点でまず開発チームは、原案を基にした初版の命令セットに基づいたシミュレーターの構築をSystem/370上で始めるとともに、ソフトウェアの移植が始まる。最初に開発されたのは、PL/1のサブセットであるPL.8で、次いでこのPL.8を利用してPL/1やFortran、Cなどのコンパイラが移植されていく。これと並行して細かい命令フォーマットの検討が行われていった。

この結果、

  • 命令長は4Bytesないし2Bytesの固定。初版は3Bytesだった
  • Non-Destructiveフォーマットの採用。初版はx86などと同じく、例えばA=A+Bのように「AとBの値を加算し、その結果をAに上書きする(からもともとのAの内容は破壊される)」Destructiveフォーマットだった。これがC=A+Bのような、元の値を破壊しないタイプになる
  • レジスタ数は16(当初は32)

──といった構成に落ち着くことになった。

 このあたりは、ハードウェアの実装とのトレードオフも絡んでくる部分ではある。ちなみにレジスタ長は24bitであり、アドレスも24bitなので最大16MBのメモリ空間ということになる。言うまでもなく、これは当時としてはとてつもなく大きかった。ただこの24bitというレジスタ長はなかなか中途半端で、32bitのデータを扱う場合は上16bitと下16bitを別々のレジスタに保存する形になり、これに向けてRegister 0/1、2/3……10/11と14/15はPairで動作するようになっていた(Register 12/13だけ特別扱い)。細かいところでは、例えば条件分岐の結果などは、Condition Registerという専用のレジスタに結果が返されるようになっていたので、汎用レジスタは純粋にプログラム側で利用可能になっている。

 77年にはこの第2版の命令フォーマットに基づくシミュレーターがSystem/370 Model 168上で動作するようになったが、ここでPL.8を利用して書かれたコードは、System/370のNative動作だと2MIPSだったのに、シミュレーター上では4.5〜6MIPSもの性能を発揮したというから、その意味では博士の狙いは当たったし、もともとの要求に近い製品ができそうだったというべきか。

Copyright © ITmedia, Inc. All Rights Reserved.