今日は、デイビッド・パターソンの誕生日(1947)
RISC と RAID の生みの親、とされています。
一般に RISC のほうが功績とされるのですけど、僕はへそ曲がりなので(笑)RAID から説明しましょう。
というのも、RAID のほうが必要としている人多いと思うから。
ハードディスクは安いけど信頼性が低い。
信頼性が低いというのは「いつか壊れる」ということです。まぁ、当たり前。
当たり前なのですが、壊れると致命的で困ります。
ディスクが壊れてデータを失った、という経験、誰にでもあるのではないでしょうか。
これ、SSD の時代でも話は同じだと思ってね。
ハードディスクのように物理動作が無くなった分、壊れにくくはなっている。でも、いつか壊れます。
パターソン博士と、共同研究者は「壊れないハードディスク」を開発しました。
といっても、当たり前だけど機械は必ず壊れます。
開発したのは、壊れたとしてもデータを失わないで済む方法。
これが RAID です。論文発表は 1988年。
複数台のディスクを組み合わせ、「冗長性」を持たせてデータを記録します。
冗長性って、同じことを複数のディスクに書き込む、ということね。
どれか一台が壊れても、ほかのディスクにも同じ内容が書いてあります。
だから、壊れても復活できる。
2台が同時に壊れたりするとダメだけど、そこは確率問題だから。
1台壊れてすぐに「元の状態に復旧」していれば、2台が故障することは減らせる。
この冗長性の計算には、できるだけ容量を無駄遣いせず、でも信頼性を上げるために複雑な数学を使っています。
一番わかりやすいのが、数学を一切使わずに「同じ内容を2台に書き込む」ことですけどね。
2台に書き込んでいると、片方が壊れてももう片方から読みだせます。
その代わり、2台あるのに容量は1台分。容量としては最大の無駄遣い。
この「2台に同じ内容を書く」のが RAID 1 。
本当は、RAID の目的は「データ保全」だけではない。
物理的な動作のあるハードディスクを、高速に使用する、なんてことも考えられている。
目的によって RAID 6 まで考えられています。
速くてデータ保全もできる方法は費用もかかったり、費用を抑えて高速にするとデータ保全性が悪かったり。
データ保全性を考えた際には、RAID 1 を使うのが良い、とデータ復旧会社の人は言っています。
容量の半分無駄になるから、経済性は悪いのだけどね。
RAID って、複雑な数式を使うから、データとしては暗号化されたような状態。
RAID 1 は単純に2台に同じデータを書き込むだけだから、最悪状況からの復旧もやりやすいのだそうです。
「人間の目で見てわかるデータ」も冗長性として重要、ということか。
つづいて、RISC の話。
こちらは、パターソン博士以前にもう基礎的な考え方は始まっていて、博士の仕事は状況を整理し、その有用性を広めた部分になります。
黎明期のコンピューターは、非常に低機能でした。
計算機として作られたため、計算機能はそれなりにある。でも、決して使いやすくはありません。
以前に書いた記事ですが、Whirlwind のアセンブラや、FORTRAN の実行制御命令を見てみるとよくわかります。
条件分岐、はあっても、サブルーチン呼び出しはありません。
サブルーチン呼び出しするためには、呼び出す前に変数に「戻り先」を入れて置き、呼び出された側で最後のジャンプ先を自己書き換えして、呼び出し元に戻す、というような技法が必要だったのです。
名著「ハッカーズ」に、PDP-6 (1963) の制作話が出ています。
PDP-6 は DEC 社が作成したものですが、商業的には失敗でした。
ただ、この機械の設計段階で、MIT のハッカーたちに何度も意見を聞いています。
設計担当者が、MIT 出身の先輩だったのです。
結果として作り上げられたマシンは、当時のコンピューターとしては非常にプログラムしやすいものでした。
レジスタを16本も持ち、スタック構造を作り出すための命令があります。
レジスタ内の値をアドレスとしてアクセスを行う、というような命令もありました。
これらを使うと、サブルーチンを簡単に呼び出すことができましたし、以前なら何ページ分ものプログラムが必要だった「10進数プリントプログラム」を、ほんの数命令で作れるようになりました。
PDP-6 自体は失敗でしたが、こうした「アセンブラでのプログラムの作りやすさ」は、この後の PDP シリーズに受け継がれていきます。
最終的には PDP-11 (1970) で、究極の命令セットと言われるようになるのです。
PDP-11 の命令セットが「究極」とまで言われるのは、直交性が非常に高いためです。
この「直交性」自体が現在では死語ですが、命令とデータの使い方を、自由に選べることを言います。
これ、非常にプログラムが作りやすいんです。…アセンブラでは。
IBM も、System/360 (1964)では、直交性の高いシステムを作り上げています。
(スタック構造が入れられるのは、1970年の System/370 から)
しかし、1970年代の半ばに、System/370 で実際に使われているアプリケーションを詳細に調べたところ、意外なことがわかります。
ほとんどがコンパイラが作り出したプログラムでしたが、直交性の高さはほとんど活かされておらず、ほんの一部の命令の組み合わせしか使っていないのです。
これはある意味、コンパイラの「癖」でした。
人間ならば、生成されるコードの速度よりも、記述しやすさを優先したくなることがよくあります。
そのため、直交性の高さが役立ちます。
しかし、コンパイラはたとえ複雑な記述になったとしても、速度やメモリ効率を優先します。
その結果、使いやすくても遅い命令はあえて使わない、一部の命令の組み合わせを好んで使う、などの偏りが現れたのです。
逆に考えれば、コンパイラが使わない命令を、苦労して回路にくみ上げる必要はありません。
一方、「よく使う」とわかっている命令は、できるだけ高速に実行できるようにしたほうが良いです。
IBM はこうした実験として、IBM 801 (1976) を作り上げています。
狙い通り、回路規模は小さいのに高速に動作するコンピューターとなりました。
ただし、これは実験プロジェクトであり、製品として世に出たわけではありません。
#のちの POWER 命令セットになります。XBOX 360 や Wii U などが使用している PowerPC もこの命令セットを採用したプロセッサの1つ。
IBM 以外でも同じような動きはあり、コンパイラが普通に使われる世の中で、直交性にこだわって設計を複雑にすることにどれだけの意味があるのか…設計者が懐疑的になり始めていました。
各社がまちまちの方法で「直交性よりも良い設計指針」を求めていた中で、これをまとめたのが今日紹介する、デイビッド・パターソン博士でした。
カリフォルニア大学バークレイ校で、バークレイ RISC プロジェクトを開始します(1980)。
このときに「RISC」という言葉を作り出しました。
Reduced Instruction Set Computer の略。「簡略化された命令を持つコンピューター」と訳しましょうか。
これに対し、パターソン博士は従来の CPU 命令を「CISC」と命名しました。
Complex Instruction Set Computer の略。「複雑な命令を持つコンピューター」です。
…この言葉、翻訳では表現できない恣意的な語彙選択をしています。
自分がこれから作ろうとするものを「素晴らしいもの」に見せるための言葉選びがうまい。
Complex って、単純に「複雑」というような意味なのですが、いわゆる「コンプレックス」や「嫌悪」のような負のイメージのある言葉です。
それに対し、Reduced というのは、小さくした、とか簡略化した、という意味合いなのだけど、「方程式を解く」とか「征服する」とか「ダイエットする」というような、物事を良い方向に導くイメージのある言葉。
CISC と RISC は、冒頭の部分以外同じ言葉になっています。
だから、この2者の比較は、「Complex と Reduced のどちらがいい?」と聞いているのと同じ。
そんなもの、誰だって Reduced って答えます。悪いイメージの言葉と良いイメージの言葉を並べているんだから。
かくして、RISC プロセッサの大ブームが起こります。
パターソン博士の定義では、RISC とは1クロック実行できる程度の簡略な命令だけを持ち、使い方の区別がない多数のレジスタを持ち、すべての命令が同じ長さで…というようなものでした。
これ、いわゆる「RISCプロセッサ」がみな取り入れた特徴。
こうすることで、CPU の設計が非常にすっきりとするので、回路も単純で実行速度を上げられるのです。
でも、RISC ブームによって、Intel の…CICS の代表みたいな CPU も、「RISCだ」と言い出した。
Pentium の時に、RISC の特徴を大幅に取り入れたのね。一番重要な部分は今まで通りだったのだけど、これによって「RISC」を名乗りだした。
今ではなし崩し的に…RISC か CISC か、って論争自体がどうでもよくなった感はあります。
ちなみに、パターソン博士が作った「バークレイRISC」は、その基本設計を元に SUN が SPARC プロセッサとして商用化しました(1985)。
SUN はその後無くなってしまいましたが、富士通と提携していました。
SPARC の後継である SPARC64 は、今でも富士通がスーパーコンピューターなどに使っています。
その SUN は BSD を商用化することを目的に作られたベンチャー企業でした。
BSD とは、「Berkeley Software Distribution」の略。バークレイ校が改造して広めた UNIX の一種でした。
そして、CPU までバークレイ RISC の流れを汲むものにしたわけです。
SUN のワークステーションの信頼性はすごくて、何年も電源入れっぱなしで動いてる…とか、UNIX の信頼性を高める伝説を多数作っています。
#Linux の話として一時期語られることが多かったのだけど、SUN 由来。
この話がよく使われたころの Linux はそんなに信頼性高くなかった。今ではずっと良くなったけど。
SPARC プロセッサ、「リングレジスタ」という非常に面白い特徴を持っていて、速度の遅いメモリへのアクセスを極力減らしています。
特に、C言語のような「関数呼び出しでスタックを多用する」言語では効果絶大。
というか、C言語の呼び出しを前提に考えられたような機構。
解説すると長いのでここには書きません。興味を持った人は調べてみてね。
同じテーマの日記(最近の一覧)
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 【雷更新世】 ええと、それでいうとXBox360も旧世代機ですね。現世代機がXBoxOne(x86)で。 (2015-11-21 18:49:05)【あきよし】 おっと、勘違いしてました。Cell使ってたのは一世代前だった。…旧世代機種書いとくのも変な感じなので削除しました。 (2015-11-19 09:24:24) 【雷更新世】 PlayStation4はx86ですね。3の間違いでしょうか。 (2015-11-18 00:17:10) |