わたしの好きなモノの話
辺根除音
第1話 MIPS R2000/3000
初っ端から誰が読むのか完全に意味不明な内容ですけれど。
逆に、うっかり開いた読者さんが1話切りしやすいので親切かもしれない?
これは、MIPS社が1986年発表した32BitCPUです。
殆ど同じ構成で高速化などの小改良されたものがR3000で、個人的にはR2000/3000としてひと纏めにしても良いんじゃないかと思ってます。
一般には初代PlayStationのCPUとして採用されたという事で有名です。実際にはLSI Logic社によるカスタムLSIの中にR3000が含まれており、単体のR3000がPSに載っているわけではありません。ファミコンのCPUが6502といっても、RICOHのカスタムLSIの中に含まれているのと一緒ですね。
余談ですが、何故かPlayStationの日本語版WikipediaではCPUがR3051との記載がありますが、英語版には存在しません。LSI Logicなので、IDT R3051は関係無いでしょうに。LSI Logicには同程度のキャッシュ容量の組み込み用途版LR33000が存在しますし、カスタムASIC用のCoreWare版のCPUコアとして、CW33000も存在します。PlayStationのCPUはこれがベースで、GTEやスクラッチパッドを追加した改造品、であると考えるのが一番無理が無いかと思われます。
Wikipediaついでに、R2000の日本語版ページも謎の記述があります。
チップセットの説明で、『ライトバッファ R2020(4個必要)』とあるのは良いとして、『R2020一つで書き込みを1エントリだけ保持できる。』は明確に間違っています。英語版には存在しない記述で、どこから生えたのか意味が不明です。
ライトバッファである以上、アドレスとデータで32+32=64Bit分の端子が、CPU側とメモリ側の双方で必要になります。Wikipedia日本語版の記載では、128Pin以上の端子のパッケージが4個も必要で、その相互接続に必要な配線も膨大になります。シリコンダイも多数のボンディングパッドを並べなければいけないので巨大化しますが、FIFO一段しか搭載しないのなら殆ど空き地で無駄になります。
実際には、R2020は一個あたり8+8=16Bitでの4段FIFOであり、4個並列に並べてアドレス32Bit、データ32Bitのライトバッファを実現します。以下のリンクにシルク印刷を読めるマザーボード写真があります。どうみてもピン数の少ないPLCCですね。
・https://computers.popcorn.cx/digital/decstation2100/
・https://computers.popcorn.cx/digital/decstation2100/ds2100-05.jpg
脱線が長くなりました。ついWikipediaへの愚痴が。
資料の現物が倉庫の奥で発掘困難なので確認できませんが、始めてR2000の事を知ったのは当時購読していた雑誌記事だったと思います。今は雑誌コードを引き継いでいるSoftwareDesgin誌が、Processor誌だった頃の話です。
Processor誌は、その名のとおり、プロセッサ=CPU/組み込み用MCUなどをメインに据えた雑誌でした。当時はまだx86系以外にも様々なCPUが存在しており、そっち方面が好きなマニアには大変面白い時代でした。
当時は、国内パソコン市場は8Bitから16Bitへと移行を始めた所でしょうか。
その頃のASCII本誌などでは、その時の一般的なPCなどに関する記事と、えらく先進的で将来を見据えた記事が入り混じっていました。1983年頃から継続的に読み始めましたが、カセットテープとBASICでZ80積んだ8BitPCを入手したばかりの中学生に、VAX11導入してBSDが動いてるぞ凄いぞという記事を見せつけるのは、随分な仕打ちではないでしょうか?おかげでUnixとは32Bitでデマンドページングの仮想記憶が前提だと長い間思い込んでました。下記の本を読んで、PDP-11が16BitでUnixも動いていたというのを始めて実感しました。もっと早く気付け。
・『はじめてのOSコードリーディング――UNIX V6で学ぶカーネルのしくみ』青柳隆宏
まぁ、そういうアジに煽られた当時は純真な中学生は、32BitのCPUに憧れるようになります。1983年くらいだとモトローラのMC68000が最有力候補ですね。国内ではSORD M68くらいしか搭載製品は見当たらず、高いし、そもそもパソコンショップなどで目にする機会も無かった気がします。日立S1の68008カードとかもありましたが、一般にはX68000発売まで入手困難だったイメージです。
仕方がないので、自作するか、と思い立ちます。
電子系技術雑誌などで68000を用いた製作記事などを集め始め、そのうちにProcessor誌が創刊されます。地元の書店には入荷しなかったので気づくのが遅れ、少し後から購読を開始します。R2000の記事を見たのはそういう経緯でした。
始めて見た時、なんじゃこれ、研究実験用アーキテクチャか?と思いました。
ディレイスロットって、そんなのユーザサイドに丸出しで任せて大丈夫なの? 仮想記憶用にTLBがあるのは良いとして、TLBミス時の入れ替えがソフトウェアだって?まともな速度で動くの? レジスタが32本(実質31本)あるのは良いとして、使い方決まってるの? アプリケーション側で破ったらどうなるの? これでまともに実用性のある構成を組めるの? 本当に?
ハード構成もなかなか強烈です。
RISCプロセッサでパイプラインを止めずに回すには、L1命令キャッシュがHitしないと無理です。当時の他のプロセッサは少容量のL1キャッシュを同一チップに搭載して速度を稼ぎ、若干速度は落ちる大容量の外部L2キャッシュを追加するのが一般的でした。
しかし、R2000は違います。大容量でパイプラインと同速の高速キャッシュを外付けします。しかも、命令とデータが分離されたハーバードキャッシュです。さすがにピンが足りんだろうと思えば、システムクロックの半相ずらしでデータ/命令を時分割アクセスします。ラッチやバッファを組み合わせてトリッキーな構成に驚きました。
このキャッシュ構成も、少し考えると非常に上手い構成だな、と思いました。
キャッシュのデータだけでなくタグも一緒にCPUが読み込み、Hit/Miss判定はCPUパイプラインに埋め込んで見かけの処理時間を0にしている。タグもデータもSRAMは同速で良い。ダイレクトマップでセットアソシアティブでは無いから容量の割にヒット率は低くなるけど、パイプライン同速で大容量のL1キャッシュが実装可能なのは大きな効果がありそうだ。
一般的なキャッシュはCPUの外部バスサイクル内にタグアドレスでHit/Miss判定を済ませないと、Hit時にNo-Waitでアクセスできない。そのため、判定ロジックの遅延分はタグSRAMがデータSRAMより速い必要がある。入手可能なSRAM速度の限界がCPUクロック速度を制限してしまう。ゆえにL1は少容量オンチップとし、CPU内部は高速駆動して、外部キャッシュの速度は妥協する、場合が多いと。
問題は、これを実際に基板に設計して実装するところ。
CPUが要求するクロックは、倍速で4相です。その4相クロックの位相差でキャッシュアクセスなどのタイミングを調整可能です。というか調整しないと動かない。最初期のクロック速度の遅かった頃はまだしも、R3000の末期は40MHz駆動とかしてますからね。なんて恐ろしい。
しかし、それだけ努力する価値はあるCPUだったようです。
主な用途はUnixWorkstationで、よく用いられる性能評価基準はSEPCMarkでした。R2000/3000は初期のRISCプロセッサにも関わらず、後発のRISCプロセッサに対して非常に長い間健闘しました。i860登場時などは、流石にこれは負けただろうと思いきや、Intel純正コンパイラのベンチマーク特化スコアでR3000を上回ったものの、市場の実機ユーザーテストで再現せず逆転することもしばしばだったとか。
CPUメーカーのベンチマーク特化チューニングに対し、SPECMarkも版を改めて対策します。そうなると、R2000/3000を超えたはずの最先端プロセッサとの差が縮んだり、時には逆転するのですよ。新ベンチに特化対応する前の段階で強いというのは地力の強さで、SinglePipelineのRISCプロセッサでは最強に見えました。
当時は何でこんなにしぶといのか不思議に思ってました。
今では、L1キャッシュの容量+帯域が鍵だったのだろうな、と考えています。
SPECMarkの改版ではワーキングセットが大きくなり、主にオンチップL1キャッシュに載るように特化チューニングしていたのが破綻する、と。当時の集積度でこれを防ぐレベルの大容量L1をオンチップで搭載することは不可能なので、外部キャッシュの速度と帯域が問題になる。外部キャッシュはR2000/3000のほうが速い。
……今でも、RyzenのX3Dでキャッシュドカ積みするのが強いですしね。
ただ、自作するのは完全に無理だ、と諦めました。
MC68000でも大変なのに、難易度の桁が違う。素人がダメ元で挑戦できるレベルじゃない。憧れるけど手が届かないなぁ、と。暫く後に、SonyのNEWSがMC68020/30からR3000に移行しますが、これも高くて手が出ない。ううむ。
そんな感じで悩んでいる時に、X68000が発売になりました。
Unixと仮想記憶に毒されていたので、MMUのある68030で無いのは少々残念だと思ったものの、中古で入手します。MicroEmacsとか、TwentyOneとUnix-likeToolsとか入れて、最終的にはKo-Windowなども使ってそれなりに満足します。
すると、Processor誌の新製品紹介でIDTのR3051を見ました。
L1キャッシュは小さいけれどオンチップで、外部バスはかなり普通の構成です。クロック低めで妥協すれば自作も不可能ではない?と妄想を開始します。実際には金も道具も技術も足りずに妄想してるだけでしたが、新製品としてMMU(TLB)やFPUもあるR3081Eとか、データ8Bitにバスサイジング可能なR3041なども出てきます。R3041に8Bit幅のSRAMとEPROMつなぐSBCなら割とイケるか?と。
実際には、PC/AT互換機、一般にはDOS/Vパソコンの方に移行しちゃいましたが。
いろいろ制約付きで遅くなったR3041よりも、i486の方が安くて速い。しかも、BSDやLinuxも動く。もはやMIPSへの憧れは断念すべきでは?と。
その頃に次世代のPCとして、Intel x86以外にも対応するARCSという規格があって、色々なCPUに対応する話もありました。MIPSのR4000やDECのAlphaとかも有ったと思います。対応OSは、最初はOS/2 3.0と呼ばれていたWindowsNTで、各種Unixも対応するはず、でした。i486からPentiumへとx86のコスパが良すぎて殆ど普及しませんでしたが、現在のPCのEFIの生みの親で、微かに痕跡が残っています。
R4000以降の後継プロセッサは、元のR2000/3000のシンプルにして絶妙なバランスとは変わっているのでそこまで好きではなかったりします。R10000系は現在主流のスーパスカラ源流となるキレイな構成だと思いますが、終わってしまいましたし。
MIPS好きとしてはPlayStationも好きですが、プログラマブルでないのが残念ですね。友人はネットやろうぜ!で開発環境入手して、動くティラノサウルスとか、自作のデモとか見せてもらいましたが、入手困難で真似できませんし。
後にPARを書き換えるCaela(だったかな?)でHomeBrewな開発環境を構築する手もありましたが、コピーなどの違法性のためPAR自体が販売されなくなりましたし。
後は、電子工作用のマイコンでMicrochipのPIC32が当初はMIPSでしたが、次第にARMに移行しているので廃れつつありますね。Microchipはあんまりディスコンしないので、今でも入手出来ますが。秋月電子にありますし。
MIPSではないものの、最近流行りのRISC-VはMIPSの転生版かなと思ってます。
BerkeleyRISC-I/IIはSPARCになりましたが、5まで進化したRISC-VがMIPSっぽくなるのは面白いですね。私の好きなR2000/3000が蘇ったようで、そのうち遊んでみたいなと思っています。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます