アプリ版:「スタンプのみでお礼する」機能のリリースについて

あるプロセッサにおいて各命令タイプの命令実行の各ステップにおける所要時間は画像の通りとする。
1 以下の2種類のプロセッサ構成方式を採った場合のクロックサイクル時間(最小値単位はns)、各命令タイプの実行所要時間(単位はns)および実行所要クロックサイクル数を求めよ
  ・シングルサイクル・データパス
  ・マルチサイクル・データパス
  ・命令パイプライン処理
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
といった問題です
自分で解いてみたのですが解答がないため、答えが合っているのかが知りたいです

・シングルサイクル
実行時間:
ロード命令
  1.1+0.4+0.7+1.1+0.4=3.7ns
ストア命令
  1.1+0.4+0.7+1.1=3.3ns
演算命
  1.1+0.4+0.7+0.4=2.6ns
分岐命令
  1.1+0.4+0.8=2.3ns
よってクロックサイクル時間=3.7ns

・クロックサイクル数:
実行時間=クロックサイクル数*クロックサイクル時間より
ロード命令:3.7/3.7
ストア命令:3.3/3.7
演算命令:2.6/3.7
分岐命令:2.3/3.7

・マルチサイクル
実行時間:
ロード命令
  (1.1*4)+(0.4*4)+(0.7*3+0.8)+(1.1*2)+0.4=11.5ns
ストア命令
  (1.1*4)+(0.4*4)+(0.7*3+0.8)+(1.1*2)=11.1ns
演算命令
  (1.1*4)+(0.4*4)+(0.7*3+0.8)+(1.1*2)+0.4=11.5ns
分岐命令
  (1.1*4)+(0.4*4)+(0.7*3+0.8)=8.9ns
クロックサイクル時間は命令フェッチに合わせた4.4ns

クロックサイクル数
ロード命令:5
ストア命令:4
演算命令:4
分岐命令:3

・パイプライン
実行時間
ロード命令
  1.1+0.4+0.4+0.7+1.1+0.4=4.1ns
ストア命令
  1.1+4.1=5.2ns
演算命令
  1.1+5.2=6.3ns
分岐命令
  1.1+6.3=7.4ns

というのが私の考えです
全体的に自信がありません
どなたかお分かりになるのでしたら教えていただけませんか

一応画像のものを手書きしておきます
        命令フェッチ  レジスタ読み出し ALU演算 データアクセス レジスタ書き込み
ロード命令   1100ps      400ps       700ps    1100ps        400ps
ストア命令   1100ps      400ps       700ps    1100ps
演算命令    1100ps      400ps       700ps                 400ps
分岐命令    1100ps      400ps       800ps

「計算機工学のプロセッサについて教えて下い」の質問画像

A 回答 (2件)

計算機のH/W,S/W等の設計やメンテナンスについて経験を持っていますが、


 ・シングルサイクル・データパス
 ・マルチサイクル・データパス
の言葉はあまり意識した事は無かったので改めてサーチして調べてみました。

次等が参考になると思います。
http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture …
マイクロプロセッサ演習
はじめに~データパスと制御
データパス構成の準備1
データパス構成の準備2~レジスタファイル
データパスの構築と制御
問題

少し理解困難な点もありますが、シングルサイクル・データパス については自分なりに次のように考えれば良いのではと理解しました。

########

ALUまわりのレジスタファイルのR/Wデータパス、演算パス、メモリのR/W、命令の読み出し/デコード等があるが、同時実行可能な部分は平行して命令の実行が進んで行く。

命令の実行制御が簡単になるように、殆どの命令は1クロックで進んで行く。

その時各々のALUやデータパスに流れる信号は、最初にアドレスや制御の種類(add,sub,or,through....)が指定され、安定化するまでの時間に変化する事はあるが、二種類の有意な信号が流されたり、クロックの前半/後半で別々の信号が流れて変化したりする事は無い。

以上の前提条件で次のように命令の種類が分類出来ます。

A. 命令読み出し命令レジスタへの取り込み
 (命令フェッチ系、命令用メモリ、命令レジスタ==auto-increment機能付き)、
 命令用メモリとデータ用メモリが同一のメモリエリアから読み出される場合もあると思うが、命令アクセス用に専用のラインバッファが例えば2-lineがあり、そのline-fill動作は例えばALU命令実行と平行して(隠れて)実行されると仮定している。

B. レジスタ(ファイル)からの読み出し==>ALU演算==>レジスタへの書き込み
B-a メモリアドレス計算
B-r メモリRead==>レジスタWrite  (データ用メモリアクセス)
B-w レジスタRead==>メモリWrite
B-i Branch命令実行

上記のAとBは同時に並列に実行されるように構成されている。

メモリアクセス命令ではメモリアドレス計算(base+offset)の間はアドレスが変化するが、その変化途中の値をアドレスバスに流してもアクセス時間は早くならないし、メモリ系に妨害を与えるだけなので、アドレス計算が完了後にR/Wアクセス指令を出すように制御する必要がある。

レジスタファイルは読み出し系2-pass, 書き込み系1-passの同時アクセスが可能
前サイクルの演算結果の書き込みと読み出しが、命令サイクルの最初に実行されるが、書き込み結果は読み出し実行と完全にオーバーラップし、400psの後には前サイクルの書き込み結果が読み出される。

########

以上のように考えると、次のような結果になります。

Aの命令読み出し実行は1100psサイクルで進む。

レジスタ演算命令は1100psサイクルで進む。
(r1+r2==>r3, r1+r2==>r1, r1.OR.r2==>r3, ......)

メモリアクセス命令は1100psサイクルを2個:2200psサイクルの実行時間となる。
  最初のサイクルでメモリアドレス計算、確定
  次のサイクルでメモリアドレスサイクル起動:アドレス及びr/wコマンド送出
  ● ストア時は400ps遅れて安定確立したデータ送出
    (メモリ側ではアドレス取り込み==>デコード等の時間の間にデータ値が安定しておれば良いので、レジスタ読み出し時間はメモリアクセス時間:1100psの間に隠される)
  ● ロード時は2200ps後にデータが送られてくるが、レジスタへの書き込みは次の命令実行とオーバーラップして行われるのでCPU実行時間としては表に出てこない。


簡単なシステムでは、命令読み出しサイクル:1100psの次に1100psの演算サイクル:400psのレジスタread+700ps:演算、合計2200ns間隔で命令が実行されて行きます。
(レジスタwrite:400nsは次の命令サイクルとオーバーラップして実行)

命令アクセス回路を並列実行可能としている場合には、レジスタ演算命令は1100ps間隔で次々に実行されます。

########

質問にあげられていた次のクロックサイクルの値等は間違いです。

同一クロックの間にメモリとの間で命令リードとデータリード、或いは命令リードとデータライトを実行する形になりますが、そのような事は不可能です。

また、CMOS回路やFETトランジスタでは信号が変化する時やクロック変化時の消費電力が大きく、必要であれば途中にレジスタバッファやドライバを入れる等(その時はクロックサイクルは別となる)で信号は必要最小限の範囲に流す事が行われていると思います。

・シングルサイクル
実行時間:
ロード命令
  1.1+0.4+0.7+1.1+0.4=3.7ns
ストア命令
  1.1+0.4+0.7+1.1=3.3ns

########

・マルチサイクル・データパス  の場合も上記の
・シングルサイクル・データパス の場合と同様な考えでよい筈です。

しかしこの場合はクロックサイクルは多分400ps刻みで命令の実行制御が行われます。

ALU演算命令ではレジスタへの書き込み指令は、ALU演算結果が出た後400psの間だけ出される点が異なる程度でしょう。

ストア命令では、最初の400ps*3でアドレス計算を行い、次の400psでアドレス及びデータをメモリコントローラに送出したら、次の命令実行に移る事が出来ます。

従ってストア命令の連続実行をシングルサイクルの場合は2200ps毎、マルチサイクルの場合は1600ps毎に実行出来ます。

########
パイプライン実行の場合、ALUデータパスやレジスタ構成が同一の場合には殆ど性能向上は出来ないでしょう。

しかしfloating命令、string character命令、decimal命令等の処理専用のALUやレジスタファイル等が強化されて並列実行可能な場合、メモリ側も複数メモリモジュールの並列処理可能なように強化されている場合等には、パイプライン実行、複数命令の同時実行等が可能になります。
勿論命令の実行はそれなりに複雑な制御が必要になりますが。
 ALU演算命令:r1+r2==>r3の 2クロック=800ps毎の実行等

その他に次等も参照下さい。
(もし投稿後にリンク切れや問題サイトとしてはねられるサイトは無視して下さい。)

http://okwave.jp/qa/q8043298.html
大学の微積分の参考書について質問です!
(中学ー大学の数学参考サイト)

http://oshiete.goo.ne.jp/qa/6996128.html
集積回路が基礎から学べるサイト

http://oshiete.goo.ne.jp/qa/8033791.html
進路

分らない点がある場合には補足等で追加質問して下さい。
出来る範囲で回答します。

なおこの様な質問は次でされるのが良いと思います。
OKWave >  [技術者向] コンピューター ▼ > ハードウェア(サーバー) ▼
    • good
    • 0
この回答へのお礼

ご丁寧にURLまで貼って説明してくださってありがとうございます
まだninoue様が回答してくださったことを100%理解できてはいませんが
何度も読み返して理解を深めたいと思います。



ninoue様が回答してくださったことや、書籍をよんだり、他の人に意見を聞くなどして
シングルサイクル
ロード命令
  1.1+0.4+0.7+1.1+0.4=3.7ns
ストア命令
  1.1+0.4+0.7+1.1=3.3ns
演算命
  1.1+0.4+0.7+0.4=2.6ns
分岐命令
  1.1+0.4+0.8=2.3ns
よってクロックサイクル時間=3.7ns

1つの命令を1クロックサイクルで行うので全部の命令において
実行所要クロックサイクル数は1
よって実行時間は全ての命令において1*3.7=3.7ns

・マルチサイクル
クロックサイクル数:
ロード命令:5
ストア命令:4
演算命令:4
分岐命令:3
クロックサイクル時間:
各フェッチの中で最大時間である1.1ns

よって実行時間は
ロード命令:1.1×5=5.5ns
ストア命令:1.1×4=4.4ns
演算命令:1.1×4=4.4ns
分岐命令:1.1×3=3.3ns

という風に考えなおしたのですがどうでしょうか

またパイプラインに関してはまだ、合っているのか間違えているのか分かりません。
もしよろしければ教えていただけませんか


改めてサーチしていただいて、説明もしていただいたのに分かっておらず申し訳ありません

お礼日時:2013/07/24 03:16

回答では命令メモリとデータメモリが同一の主メモリの場合を仮定していました。


それで同一クロックサイクル内で命令フェッチと(データロード 或いは、データストア)は同時実行できず、誤りだと考えて回答していました。

http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture …
http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture …
図 2: MIPS の命令の実現方式の概念図。

それとは別に上記 MIPSの概念図のように命令メモリとデータメモリが別モジュールで平行動作出来る場合には質問で考えられているように

"よってクロックサイクル時間=3.7ns" との回答で正しいです。

########

しかしMIPS概念図の構成を取った場合には、命令フェッチ動作はCPU演算動作と同時動作可能で、命令実行サイクル時間は命令フェッチ時間と、CPU演算関係動作時間の何れか長い方の時間で決まるように構成出来る筈だと考えられます。

その場合PCはカウンタ(或いは専用の+1(or+4)アダー付)として実現され、命令実行中には次命令フェッチの為に1ステップ進んだ次の命令アドレスを示している形となります。

以上のように考えた場合のクロックサイクル時間は次のようになります。

・シングルサイクル
実行時間:
ロード命令
  0.4+0.7+1.1+0.4=2.6ns
ストア命令
  0.4+0.7+1.1=2.2ns
演算命
  0.4+0.7+0.4=1.5ns
分岐命令
  0.4+0.8+1.1=2.3ns
よってクロックサイクル時間=2.6ns

(通常命令フェッチ時間は演算実行とオーバーラップして隠されているが、分岐命令の場合はその代わりに隠されずに2.3nsとなる)

なお前の回答で記していたように、レジスタ書込み時間はレジスタアクセス時間に含まれ明示的には現れないと考えると、ロード、演算命令は2.2ns, 1.1nsとなり、一番実行時間が掛るのは分岐命令の2.3ns、クロックサイクル時間は2.3ns とする事も出来る筈です。

########

http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture …
http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture …
マルチサイクルのデータパス

なおマルチサイクルの場合については、上記の マルチサイクルのデータパス の例を参照下さい。

実行時間はシングルサイクルの場合と略同様で、2-4倍等となる事はありません。
次の*4, *3, *2 等は不要です。

ロード命令
  (1.1*4)+(0.4*4)+(0.7*3+0.8)+(1.1*2)+0.4=11.5ns
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!