R3000特訓講座
第1号
更新日付 1998-02-18
R3000を毎日1時間、1週間でマスターしてしまおうという無謀な企画。
中学、高校と6年間かかっても英語は話せません。
でもあなた、生まれて3年で日本語はぺらぺらだったでしょ?
・R3000の話
初日はR3000の特徴である「遅延スロット」を覚えてもらいます。
たった一つです。楽勝でしょ?
なお、ここで登場するCPUの構造、命令などは、
架空のものであり、R3000とは関係ありません。
あなたはなぜか落花生を食べたくなりました。
というわけで「落花生を食べる」ことについて考えます。
落花生を食べる手順は以下のようになります。
(1)殻をむく
(2)落花生を食べる
あなたが高性能な落花生マシーンを目指すのであれば、
高速に殻をむき、高速に食べることが重要になります。
しかし、それでは限界が見えています。
速く殻をむき、速く食べるにも限度があります。
そして多くの人は、次のような方法をとるはずです。
「落花生をむきながら食べる」
食べている間に次の落花生をむけばいいのです。
こうすれば、「平均的」に2倍もの高速化が見込めます。
つまり処理を分けて各処理を並行に行なうということです。
キスをしながらブラウスのボタンを・・・。
あ、いえ。いいんですけど。
実はR3000も同じようなことをしています。
(1)命令の取り込み(フェッチ)...F
(2)命令の処理(ALU操作)...A
(3)メモリアクセス(R/W処理)...M
(4)書き込み処理(実際に書き込むまでの時間)...W
このように処理すれば、
一つの操作に1クロックかかるとして、1命令は四つの処理、
すなわち4クロックで実行されることになります。
よって「平均的」に見れば、何と4倍もの高速化となります。
RISC-CPUは命令が単純で高速だとか、
1命令を1クロックで実行できるなどといいますが、
それにはこのような仕掛けがあったのです。
このような仕組みにより、R3000は高速に動作します。
何といっても、1クロック1命令です。
しかし、これが原因でいくつかの特徴的な制限があります。
--------------------------------------------------------------------
lda' pochi ;pochi番地の内容をAレジスタにロード
inc' a ;A = A + 1
sta' pochi ;Aレジスタの内容をpochi番地にストア
--------------------------------------------------------------------
このような処理は許されません。
各命令は1段階の操作のずれで並行に処理されます。
「lda pochi」がまだ終わっていないのに、
Aレジスタの内容が+1されてしますのです。
これを避けるためには、
--------------------------------------------------------------------
lda' pochi ;pochi番地の内容をAレジスタにロード
nop' ;何もしない命令
inc' a ;A = A + 1
sta' pochi ;Aレジスタの内容をpochi番地にストア
--------------------------------------------------------------------
このように何もしない命令「nop」を入れて、
ロードが完了するのを待たなければならないのです。
もう一つ、例を挙げておきます。
--------------------------------------------------------------------
jsr' tama ;サブルーチンtamaへ分岐
lda' #123 ;Aレジスタに123をロード
--------------------------------------------------------------------
このようなプログラムも同じ現象が起こります。
サブルーチンtamaへ分岐するのはいいのですが、
実際にtamaへ分岐するときには、
すでに「lda #123」が実行されているのです。
こう覚えてください。
「分岐命令を実行すると勢い余って実行される命令がある。」
これを「遅延スロット」といいます。
よって、分岐命令は以下のように記述します。
--------------------------------------------------------------------
jsr' tama ;サブルーチンtamaへ分岐
nop' ;何もしない命令
lda' #123 ;Aレジスタに123をロード
--------------------------------------------------------------------
今日はこれで終わりです。
でも、ちょっと時間が余りましたね。
少しだけR3000についての知識をたくわえておきましょう。
以下のことを覚える必要はありませんが、
知っていると自慢できるかもしれません。
・このようなCPUを設計するには
(1)操作にかかる時間を統一
流れ作業では、誰かがもたつくとライン全体が遅れます。
ブラのホックがなかなかはずれないと、
女のコも困ってしまうかもしれません。
もっとも、あまり手際がいいのも問題かもしれません。
女のコ「あら、慣れているのね・・・」
あ、ばれているようです。
R3000では、掛け算や割り算のように時間がかかる処理を、
専用レジスタに任せています。
こうすればパイプラインが遅れるようなことはありません。
(2)命令長を統一
次々に命令を取り込むためには、
次に実行すべき命令がどこにあるか予想できなければなりません。
命令の長さが統一されていないと、命令を解読してからでないと、
次の命令がどこにあるのかわかりません。
R3000ではすべての命令が4バイトとなっているので、
分岐命令に出会うまで、次々に命令を取り出すことができます。
というわけで、今日はおしまい。
とにかく「遅延スロット」を覚えておいてください。
お仕事ください(笑)...
koh@inetmie.or.jp