CPU をトイレに例えた、とってもわかりやすい (!?) CPU の解説
本文書の内容は、まるまる転載である。
その出展は、2ch の自作 PC 板の [x86]CPUアーキテクチャについて語れ![RISC] スレより、 >>155-163 である。 [→ ミラー] その後のレスでは絶賛するものの他、「破綻がない」などとされているため、その内容は正しいものと思われる。
またこの情報はそれゆけ !! だよもん星 の 07/07 の記事により知った。
最後に、本文書は非常に下品な例えにより成るもので、 そういうのが許せない、受け付けない方は Google あたりでまともな解説をお探しになる事を強くお勧めする。 あと女性にはわかりにくいかもしれない。
「おしっこをして手をあらってでてくる」。 トイレが一室しかないと混雑時は長蛇の列ができます。
二段のパイプにすると、手を洗ってる間に別の人が用を足せるようになります。 トイレ一室で二人が気持ちよくなれて、効率が倍になります。
もうすこし深くしてみましょう。
7ステージに分解すると、なんと 7人が同時に処理できます。 これがパイプラインです。
トイレの利用はおしっこだけではありません。 うんこもします。どういう手順でしょうか。
前半と後半は同じ処理ですが、途中がおしっことは別処理です。 ということは、小便器と大便器をわけると、途中は並列に処理ができそうです。
うんちとおしっこは処理時間が異なるので、手を洗ったりする所でどっちかが待たされる事もありえますが、理想的には効率は倍になります。
これがスーパスケーラです。
うんこする時間と、ズボンとパンツを脱ぐ時間は同じでしょうか。 いいえ、うんこする時間のほうが圧倒的に長いです。
ということは、前の人がうんこしてる間パンツを下ろす人は尻をだしたままぼ〜とまっていなくてはいけません。 かかる時間を考慮してみましょう。 括弧内は、実際に処理に必要な時間です。
パイプラインは、一ステージ毎タイミングを合わせて処理をします。 一番時間がかかる処理は、例では60秒ですから、トイレにはいってから出てくるまで60秒x8回、480秒の時間がかかります。
ちょっと発想を広げ、時間のかかる処理を分解してみましょう。
ステージ数は増えてしまいましたが、1ステージにかかる時間は30秒と半分になりました。 クロックでいうと倍のクロックに出来ることになります。
トータルでかかる時間はどうでしょう。30秒x11で 330秒ですね。 前より早く処理が完了しました。しかしクロックが倍になったけどトイレにかかる時間は半分にはなりません。
これが、スーパパイプラインです。
あなたは今、これから迎えるであろう至福の時を迎える為にパンツをおろし、 あとは出すだけという所です。しかし!あろうことか神の声が轟きます。
「なにをしている、ここは女子便所だぞ」
条件判断ミスです。あなたの後ろには、つられて入って来てしまった数人の男性が、 ジッパーをさげズボンを降ろし、尻をだしたまま待っています。 しかし、ここで用を足すわけにいきません。あなたは数名の男性と共に廊下にほうりだされます。
あなたはもう一度、正しいトイレにいってジッパーを降ろす所から始めなくてはいけません。
一方女子トイレはというと、あなた達がほうりだされた事により三つの席が空いてしまいました。 ステージは規則正しく順番に進みますから、この席はもう埋まりません。 三つ分の埋まっていない席の為、女子トイレは利用されることなく無駄な時間が経過するでしょう。
その分、女子トイレの利用率は下がります。 これがハザードです。
トイレの危険はまだまだいっぱいあります。 トイレットペーパーが無くなったらどうでしょうか。 尻を拭くことが出来ず、それ以降のステージは凍結してしまいます。
手拭きのペーパータオルが無くなる危険もあるし、汲み取り式のトイレだと肥溜めがいっぱいになってしまう事もあるでしょう。
その度にあなたは、本来やりたかった放尿を一時中断し、紙をとってきたり汲み取ったりしないといけません。
本来は放尿や脱糞だけできればどんなに気持ちの良いことか。 そこで、トイレ掃除の人を雇って紙の補充をしてもらったり、汲み取り業者を雇って定期的に組み上げてもらいます。 お金がかかりますが知っちゃこっちゃありません。 それで本来の目的が気持ちよく遂行できるなら安いものです。
そう思うでしょう?
トイレが汚いとあまり気持ち言いものじゃありません。 知った人が前にすましてたら、そのトイレがきれいかどうか聞いてみるといいですね。 でも、その人がトイレから出てくるまで聞けませんから、待ってる事になります。
折角11ステージにも増えて、同時に11人処理できるトイレも、入って来てくれなければ利用率は下がります。
あなたと連れが二人います。 一人がトイレに行きました。あなたともう一人の連れは入りたいけど綺麗か気になります。
この時、全体にあかる時間は
聞かずに入れば330+30+30で390秒で済む所が、トータルで690秒もかかってしまいました。
これが依存関係です。
そこで、トイレがきれいか同か聞かなくてもいい人を先に通してみるとどうでしょう。 どうせあなたは10ステージ分経過するまでトイレには入れないんです。
丁度バスツアーの観光バスがサービスエリアに到着しました。 あなたと、もう一人の連れとの間に並んでます。おばはんは男トイレでも気にしません。
処理時間はどれだけでしょうか。
あなたのグループはトータル 990秒かかります。 おばはんは、あなたが入った後にしか入れませんから、330+30で360秒後にトイレにはいって、全員がでてくるのは330秒後ですから、690秒後です。
先におばはんをいれてみたらどうなるでしょう?
あなたのグループは、トータル690秒で済みます。 おばはんは30秒後にははいってますから、なんと360秒後には全員でてきています。
処理を入れ換えてあげると、トイレの利用率はあがり全体の処理時間が短縮されることがあります。 これがリオーダです。
大勢が素早く滞り無く気持ちよくなる工夫はいろいろあります。
トイレを二部屋用意するとか(Dualトイレ)、使用中のトイレに行列ができない ように振り分けて上げるとか(Threadコントロール)、トイレに待合室とかつくっ ておくと(Cache)、すれ違え無い程廊下が狭くてもまとめて入室させたり退室さ せれば(WriteBack)混乱は減りますね。
とここまで書いておいて、トイレを流すのを忘れていたことに気がつきました。 くさいです。ちゃんと流しましょう。