作戦を練る


役割分担を決める

プロセッサ実験は、1班5〜6人で行いますが、レイトレ完成までのいろいろなプロセスを分担しなければなりません。
普通はおおよそ次のようにわけることになります。

ただし、このわけ方は1つの例でしかありません。また、かなり大雑把な分けかたです。

やらなければならない仕事を列挙することにしましょう。

これらをどうわけるかは自由です。 それぞれが得意な分野を生かして作業を分担するのがよいでしょう。
たまに ものすごい人がいて、作業の半分くらいを一人でやってしまうことがありますが、 基本的には うまく分担することがレイトレ完成へのキーとなります。


インストラクションセットを決める

「インストラクション」とは、「命令」という意味です。
従って、インストラクションセットとは、プロセッサの命令にどのようなものがあるか、ということです。
例えば、足し算命令やジャンプ命令などは ほとんどの班が採用するでしょうが、かけ算の命令をいれるかどうかは、各班の作戦によって変わってきます。
ここでどのようなインストラクションセットにするかが、後々プロセッサの性能などに影響して来るので、重要なポイントだと言えるでしょう。

その際大事なことは、コンパイラを作る人や 基本アーキテクチャを考える 人と十分に議論することでしょう。
というのは、インストラクションセットが変われば、アーキテクチャも変わって、アーキテクチャが変わればインストラクションセットも変わるというように、 相互に関係してくるからです。
コンパイラに関しても、コンパイラが出力しない命令はいらないし、コンパイラにとってあると便利な命令はインストラクションセットに採り入れるのが良いということになるでしょう。

では、以下にインストラクションセットの決め方の、基本的なポイントだけ解説することにします。

まず、オペランドの数です。すなわち、命令の引数がいくつかということです。
これは、アーキテクチャと直接関係あります。(というよりこれをアーキテクチャと呼ぶのでしょう。) 例えば、オペランドが3つの場合と2つの場合とでは、同じレジスタアーキテクチャとしても 大部その作りは変わってきます。


基本アーキテクチャを考える

まずは、アキュミュレータマシンにするか、レジスタマシンにするかという選択があるでしょう。 他にスタックマシンというアーキテクチャもありますが、今回の実験では、「スタックマシンはなし」という暗黙の前提(?)があるので、考えないことにします。 もちろん、この他のアーキテクチャがあればそれでも構わないのでしょう。 アイディアの出しどころかもしれません。

ここでは一番一般的であろうレジスタアーキテクチャについて軽く触れておきます。 プロセッサで使われる「部品」については、基礎のところで軽く述べたとおりですが、 それらをどう並べるかは、決まりはありません。

例をひとつあげてみることにします。
例えば下のような「並べ方」も可能でしょう。
arch-s.gif

ここで命令
   add    r1, r2, r3
   (レジスタ1番と2番を足してレジスタ3番に格納する)
という命令を実行するとすると、処理の流れとしては、
メモリから命令を読み込む
このとき読み込む命令の格納されている場所はカウンタで示されていて 読み込まれた命令はデコーダで「解釈」してどう制御をする。
            |
解釈した「制御」にしたがって命令を実行する。
まずはレジスタ1番の内容をregAに「コピー」する。
            |
つぎにレジスタ2番の内容をregBに「コピー」する。
するとALUからは、足し算の答えが出力される。
            |
ALUからの出力をレジスタ3番に書き込む。
となるでしょう。

こういった制御をどうおこなうかについては別に述べたいと思います。 ここで留意したいのは、この「部品のならべかた」がCPUの性能を決めるといって 過言ではなく、その並べ方は千差万別であるということです。 ここがプロセッサ実験の「コンテスト」たる結縁でしょう。


〔トップページへ〕 〔「完成までのプロセス」のindexページへ〕
<vu@is.s.u-tokyo.ac.jp>

Last updated on 8 May, 1999