JPH07121371A - 複数命令同時取込み機構 - Google Patents

複数命令同時取込み機構

Info

Publication number
JPH07121371A
JPH07121371A JP5266434A JP26643493A JPH07121371A JP H07121371 A JPH07121371 A JP H07121371A JP 5266434 A JP5266434 A JP 5266434A JP 26643493 A JP26643493 A JP 26643493A JP H07121371 A JPH07121371 A JP H07121371A
Authority
JP
Japan
Prior art keywords
instruction
instructions
branch
address
fetched
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP5266434A
Other languages
English (en)
Inventor
Takaaki Kato
高明 加藤
Toshihisa Ono
利寿 小野
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
JFE Engineering Corp
Original Assignee
NKK Corp
Nippon Kokan Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NKK Corp, Nippon Kokan Ltd filed Critical NKK Corp
Priority to JP5266434A priority Critical patent/JPH07121371A/ja
Publication of JPH07121371A publication Critical patent/JPH07121371A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

(57)【要約】 【目的】 分岐命令を高速に実行することができ、ま
た、フェッチブロックが2ラインにまたがっても、キャ
ッシュ・ミスが無ければ、連続した4命令を1クロック
サイクルで常に供給することができる複数命令同時取り
込み機構を提供する。 【構成】 一方の分岐先命令を格納する第1のプリフェ
ッチ・バッファー26と、他方の分岐先命令を格納する
第2のブリッチ・バッファー27と、一対の分岐先命令
又は命令キャッシュからフェッチした命令のいずれかを
選択するマルチプレクサー28とを有し、分岐命令によ
るパイプライン停止時間を利用して両方の分岐先命令を
予め取り込んでおく。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は複数命令同時取込み機
構、特にスーパースカラ、スーパーコンピュータ等の高
速化のための分岐先命令の先読み・実行アルゴリズム及
びその機構に関する。
【0002】
【従来の技術】スーパースカラは、命令の読み出しか
ら、デコード、実行及び結果の格納までの一連の処理
を、複数命令に対して同時に行なうことにより、高速処
理を図るプロセッサである。このため、複数命令が同時
にフェッチされなければならない。ここでは説明を簡略
化するため、以下の項目を仮定する。
【0003】a)説明上の仮定 i.スケジューリング対象命令数(同時実行可能かどう
かを扱う命令数)及び同時フェッチされる命令数(フェ
ッチブロック)は4命令を基本とする。4命令はプログ
ラム順にそれぞれ命令1(又はInst.1,Ins
t.はInstructionの略とする)、命令2、
命令3、命令4と呼ぶ。但し、本発明は4命令に限ら
ず、2命令以上N命令まで任意に拡張することができ
る。 ii.1命令は32bitとする。これより大きくても小
さくても問題は無い。 iii.キャッシュ・ブロック・サイズは16bitとす
る。同様にこれより大きくても小さくても問題は無い。 iv.全ての命令は1クロックで実行される。そのため、
浮動小数点演算やアドレス計算を供なうload/st
ore命令などは説明上考慮しない。またロジックが少
し複雑になるが、実行に数クロックを要する命令を考慮
することは容易である。命令形式は次の通りである。 OP Rs1,Rs2,Rd : Rd ←Rs1 OP Rs2 …(1) 但し、OPは命令のオペコード(操作コード、oper
ation code)、Rs1,Rs2はそれぞれソース
(source,出所)レジスタ、Rd はデイステイネ
ーション(destination,行先)レジスタ、
オペランドはソースレジスタとデイステイネーションレ
ジスタからなる。条件分岐命令の形式は次の通りであ
る。 BRT Rs1,#O: ifRs1=true,thenPC←PC+#O, elsePC←PC+4 …(2) 但し、#Oは16進オフセット値である。また本命令形
式も説明上の仮定であって、本発明はこの命令形式に限
定されるものではない。
【0004】v.パイプライン構造は以下のような4ス
テージ構成を想定している。:命令フェッチ(IF;I
nstruction Fetch),命令デコード
(ID;Instruction Decode),実
行(EX;Execution),結果の書込み(又は
格納)(WB;Write Back)である(図4参
照)。IFステージでは、4命令を同時に命令キャッシ
ュ(又は主記憶装置)から取込む。4命令の先頭の命令
はプログラム・カウンタ(PC)から与えられる。ID
ステージの前半で、4命令のオペコード(加算、減算の
ような操作を定義するビット列)とオペランド(演算の
対象を示す。本例では、具体的にはレジスタの番地を指
定する。)がそれぞれデコード(解読)される。IDス
テージの後半で、オペランドの値がレジスタ・ファイル
から読込まれる。この読み込みと並行して命令発行のた
めのスケジューリングがなされる。EXステージではA
LU命令は演算を、load/store命令はデータ
・キャッシュにアクセスする。WBステージでは、EX
ステージの結果をレジスタ・ファイルに書込む。本発明
は5段のパイプライン構造(IF,ID,EX,MEM
[Memory Access],WB)(J.L.H
ennessy,and D.A.Patterso
n,“Computer Architecture:
A Quantiative Approach”Mo
rgan Kaufmann Publishers,
Inc.,1990(以下文献1という)参照)などほ
とんどのパイプライン構造に適用可能である。
【0005】b)従来の技術 分岐先命令は、分岐命令が実行されるまでは分岐先アド
レスが定まらないので実行不可能である。そのため、パ
イプライン上の命令の流れを大きく乱す原因(ハザー
ド)となり、制御ハザードと呼ばれる。スーパースカラ
の場合、RISCに比べて分岐命令が実行されるまでに
実行が待たされる命令数が大きいことから、制御ハザー
ドはパイプラインの性能を大幅に低下させるので重大な
問題である。
【0006】図4はRISCアーキテクチャにおける遅
延分岐法を示した説明図である。この図4を用いて制御
ハザードを説明する。典型的なRISCのようなスカラ
プロセッサでは、分岐の決定は分岐先アドレスを計算す
るための専用の加算器を用いてIDステージ内でなされ
る(文献1参照)。このようにして、分岐命令のIDス
テージの直後に分岐先命令がフェッチ(取込み)され
る。このような通常の分岐方法が図4に示すような4段
パイプラインに適用されると、1クロック分のストール
(パイプラインの停止)で済む。命令3が分岐命令のと
きには、クロックサイクル“5”(IDステージ)の
時、分岐先アドレスがアドレス演算用の加算器により演
算されるため、分岐先アドレスはクロックサイクル
“6”になって始めて分岐先の命令をフェッチすること
ができる。従って、クロックサイクル“5”では分岐先
命令はフェッチされず、パイプライン機能は停止され
る。この分岐命令の後の1サイクルを分岐遅延スロット
と呼ぶ。
【0007】これに対して、RISCでは遅延分岐(d
elayed branch)(文献1参照)と呼ばれ
る手法が使われている。コンパイラは、この遅延スロッ
トに有効な命令を挿入するよう努力する。図4の例で
は、命令1〜3にデータの依存関係などの影響を与えな
い命令0を遡って捜し出し、命令4に挿入することによ
って、パイプライン機能が停止しないようにしている。
このスロットを活用できる命令が存在しなかった場合に
は、コンパイラが遅延スロットにNOP(NoOper
ation;無操作)命令を挿入することになる。
【0008】これに対して、スーパースカラでは、一度
に複数命令がフェッチされるが、そのためコンパイラが
2命令以上の命令を捜して遅延スロットを活用するのは
難しい。また、スーパースカラでは、複数命令がフェッ
チされるため、分岐命令が早く検出されるが、分岐の結
果が他の命令に依存する場合、この間のストール・サイ
クルが比較的長くなるという問題点がある。(本発明で
は、この分岐の検出から分岐の決定までに要する時間を
利用して“taken(分岐)”側の分岐先命令と“n
ot taken(非分岐)”側の両方の分岐先命令を
命令キャッシュからバッファに格納する。このようにし
て、両方の分岐先命令の先読みをアドレス幅を拡張しな
いで実現している。)
【0009】一方、RISC及びスーパースカラのどち
らにも適用される方法として、分岐予測という方法があ
る。この方法を扱った文献には次のものがある。 文献2:J.K.F.Lee and A.J.Smi
th,“BranchPrediction Stra
gies and Branch Target Bu
ffer Design”,IEEE Compute
r ,Vol.17,No.1,pp.6−22,19
87 文献3:S.McFarling and J.Hen
nessy,“Reducing the Cost
of the Branches,“Pro.of t
he 14th Int´l Smp.L7RO0 C
omputerArchitecture,pp.39
6−403,1987 文献4:特開平4−247522号公報 文献5:特開平5−20067号公報
【0010】この方法は、“taken(分岐)”側の
分岐先命令又は“not taken(非分岐)”側の
分岐先命令のどちらかを予測し、実行してしまうもので
ある。分岐命令の実行の結果、予測通りであれば、実行
時間の大幅な短縮になる。予測がミスした場合には予測
した命令の実行を無効化し、パイプラインが予測前の正
しいプロセッサの状態を回復すれば良いという方式であ
る。しかし、この復元に要するハードウェア機構はかな
り複雑である。
【0011】このような分岐先の両方向の命令をプリフ
ェッチする方式の例がいくつか提案されている。例えば
特開平2−157939号公報では、命令を改造し、分
岐先を指定することによって、これを実現している。
(これに対して、本発明は、オブジェクト・ゴード・レ
ベルの互換性を保つため、いっさい命令に改造を加えて
いない。)特開平3−147134号公報や特開平3−
189824号公報では、スカラプロセッサのための方
法が開示されているが、スーパースカラのように複数命
令を同時にフェッチ・デコード・実行するプロセッサに
は対応できない。また、特開平3−156534号公報
では複数命令に対応した処理方法を開示しているが、o
ut−of−order発行には対応できない。なお、
このout−of−order発行とは、命令間のデー
タの依存関係が無く、プログラムが正しく演算されるな
ら、命令の実行順序を入れ換えて実行する方式である。
【0012】スーパースカラでは、プログラム・カウン
タ(PC)によって与えられた任意のアドレスから連続
した4命令が常に同時にフェッチされる必要がある。こ
の命令供給に支障をきたすとスーパースカラの性能低下
を引起こすことになる。スーパースカラのための複数命
令同時取込み機構には「G.F.Grohoski,
“Machine organization of
the IBM RISC system/6000
2”,IBM journal of Researc
h and Development,Vol.34,
No.1,pp.37−58,1990」、及び「原ほ
か1名、“SIMP(単一命令流/多重命令パイプライ
ン)方式に基づくスーパースカラ・プロセッサ『新風』
の命令供給機構”、情報処理学会研究報告、90−AR
C−80−7,1990」に記載のものがある。これら
の文献のものは、ラインクロッシングに対応できない。
なお、ラインクロッシングとは、同時にフェッチされる
n個の命令(フェッチブロック)が2つのキャッシュラ
インにまたがることである。これらの機構で2ラインの
命令キャッシュにアクセスするには、2クロックサイク
ル必要となる。または、1クロックサイクルにおいてフ
ェッチできる命令が1〜3命令になる。どちらにおいて
も性能は損なわれることになる。以下にこれを説明す
る。
【0013】CPUの性能(プログラムの実行に要する
CPU時間)及び性能向上については次のように表わせ
る。 プログラムの実行に要するCPU時間 =プログラムの終了に要するクロック数×t =IC×CPI×t, …(3) IC:プログラム内の命令数 CPI:1命令の実行に要するクロックサイクル数 t:クロックサイクル時間 命令フェッチに2クロックサイクルかかってもCPIが
大きくなることになり、命令フェッチを1クロックとし
た場合でも、フェッチできる命令数が少なくなり、CP
Iが大きくなる傾向となる。
【0014】
【発明が解決しようとする課題】本発明は、上述の問題
点を解決するためになされたものであり、分岐命令を高
速に実行することができ、また、フェッチブロックが2
ラインにまたがっても、キャッシュ・ミスが無ければ、
連続した4命令を1クロックサイクルで常に供給するこ
とができる複数命令同時取り込み機構を提供することを
目的とする。
【0015】
【課題を解決するための手段】本発明の一つの態様によ
る複数命令同時取り込み機構は、オペコード及びオペラ
ンドからなる命令を格納する記憶手段(主記憶装置,命
令キャッシュ)と、複数個命令を同時に読み出すフェッ
チ手段と、読み出された命令を命令別に同時に解読し、
命令の種別(オペコード)及びレジスタ参照番地(オペ
ランド)を識別する複数個のデコーダと、デコードの結
果から各命令間のレジスタ参照番地の競合又は衝突を検
出する手段と、その競合又は衝突の検出結果に基づい
て、複数の命令が同時実行可能かどうかを決定するスケ
ジュール手段と、次にフェッチすべき命令の先頭番地を
出力するプログラム・カウンタ(PC)及び一対の分岐
先命令(taken、not taken)又は命令キ
ャッシュからフェッチした命令を選択する分岐機構と、
演算を行う複数のパイプライン演算機と、このパイプラ
イン演算機又は汎用レジスタ・ファイルから複数のオペ
ランドを読み出す装置において、プログラム・カウンタ
(PC)の指し示す命令が分岐命令の場合を除き、直前
のクロックサイクルで発行された命令数を格納するバッ
ファと、命令数と前記プログラム・カウンタの値とを加
算し、次のクロックでフェッチするべき先頭アドレスを
決定する加算器とを有する。なお、この命令発行数は、
スーパースカラの他の構成要素である命令の発行をスケ
ジュール決定する機構から出力されるものとする。但
し、命令フェッチの開始時と命令が分岐された時の次の
クロック時だけは、PCの値にフェッチするべき命令数
を加算する。
【0016】本発明の他の態様による複数命令同時取り
込み機構は、上記の複数命令同時取り込み機構におい
て、命令ウィンドウ内に分岐命令があると、分岐命令の
アドレスを算出する第1の加算器と、分岐及び非分岐か
らなる一対の分岐先命令のアドレスを算出する第2の加
算器と、一方の分岐先命令(taken)を格納する第
1のプリフェッチ・バッファーと、他方の分岐先命令
(not taken)を格納する第2のブリッチ・バ
ッファーと、一対の分岐先命令(taken,not
taken)又は命令キャッシュからフェッチした命令
のいずれかを選択するマルチプレクサーとを有し、分岐
命令によるパイプライン停止時間を利用して両方の分岐
先命令を予め取り込んでおく。そして、分岐命令の結果
が決まる時には、分岐先命令のデコードから開始するこ
とができ、それによって分岐先命令の実行を早める。
【0017】本発明の他の態様による複数命令同時取り
込み機構は、上記の複数命令同時取り込み機構におい
て、スケジュールの結果、命令ウィンドゥ内の前回未発
行であった命令と命令キャッシュからフェッチしたN個
の命令から前回未発行命令数に等しい数の命令を除いた
残りを加え合わせて命令ウィンドゥに送り込む命令選択
部を有する。この構成によりout−of−order
発行にも対応できる。この機構では、命令ウィンドウ内
に分岐命令が検出されたら分岐命令以降の命令にはNO
P命令(無操作命令)が命令ウィンドウ内に送られるよ
うにして、out−of−order発行にも対応でき
るようにしている。out−of−order発行と
は、命令間のデータの依存関係が無く、プログラムが正
しく演算されるなら、命令の実行順序を入れ換えて実行
する方式である。out−of−order命令発行方
式では、分岐命令以降の命令が分岐命令よりも先に実行
されてしまうと、間違った答えが得られてしまうことが
ある。但し、命令フェッチの開始時と命令が分岐された
時の次のクロック時だけは、PCの値にフェッチするべ
き命令数を加算する。
【0018】本発明の他の態様による複数命令同時取り
込み機構は、上記の複数命令同時取り込み機構におい
て、プログラム・カウンタ(PC)によって与えられた
任意のアドレスから連続したN個の命令が1クロックサ
イクルで常に同時にフェッチできる、バンク数N個のイ
ンターリーブド・命令キャッシュと、各バンクでフェッ
チすべき命令のアドレスの先頭アドレスをインクリメン
トするインクリメンタと、命令のアドレスの最下位所定
ビットのデコード情報に基いて選択することによって連
続したN個の命令を出力させ、先頭アドレスから順にN
個の命令を整列させて命令ウィンドウに送るアライメン
ト回路とを有する。この機構では、連続した複数命令の
先頭アドレスのみを与えればよく、アドレスバスは先頭
アドレスの1命令分で済む。但し、データバスはN命令
分必要である。本発明の他の態様による複数命令同時取
り込み機構は、命令フェッチ・アドレスの最下位所定ビ
ットをデコードする手段と、アドレスのインデックスを
インクリメントする手段と、2ポート・メモリであるタ
グメモリとを有し、連続した複数命令が2つのブロック
に跨がった時でも1クロックサイクルで取り込むことの
できるようにしている。
【0019】
【作用】本発明は、分岐命令がパイプラインを長く停止
させる場合のその停止時間を逆に利用して両方の分岐先
命令を予め取り込み、分岐命令の結果が決まる時には、
分岐先命令のデコードから開始することによって分岐先
命令の実行を早めるようにしたものであり、その動作を
次の(a)〜(c)に分け説明する。 (a)スケジュール対象の命令中に分岐命令が無い場合 RISCのようなスカラプロセッサやVLIW(Ver
y Long Instruction Word)で
は、プログラム・カウンタ(PC)は分岐命令の場合を
除いて、常に1つづつ増加される。スーパースカラの場
合、PCは直前のクロックサイクルで実行された命令数
に依存して計算されなければならない。本発明で使用す
るアーキテクチャでは、この命令数は複数命令同時発行
機構から出力されるものとする。また、PCから指定さ
れたアドレスから4命令が常にIFステージで命令キャ
ッシュから取り込まれる。命令ウィンドウに分岐命令が
無い場合、命令ウィンドウ内の4命令は直前のIDステ
ージでの未発行命令とフェッチされた命令の中から加え
られた命令から構成される。分岐命令のある場合と無い
場合のパイプラインの挙動を図2に示す。命令ウィンド
ウはフェッチされた命令を一時的に格納するバッファで
ある。
【0020】(b)スケジュール対象の命令中に分岐命
令がある場合 本発明による分岐機構は制御ハザードに起因するストー
ルサイクルを減らすために、2つの先読みバッファを有
する。スーパースカラでは、命令が複数フェッチされる
ことから、分岐命令が早く検出されるのに対して、分岐
命令で真偽判断される内容が分岐命令の直前の命令で決
まることが多いので(RAWハザードと呼ばれる)、分
岐命令の実行が遅れることが多い。本発明では、このス
トールサイクルを利用して、分岐先命令の先読みが実現
され、分岐命令が実行され次第、分岐先命令のデコード
が開始される。フェッチではなくデコードから開始され
るため分岐先命令の実行が早まることになる。
【0021】IDステージの前半で、分岐命令はデコー
ドの結果検出され、分岐先アドレスのためのオフセット
が分岐先命令のアドレス計算専用加算器に送られる。I
Dステージの後半で、“taken(分岐)”側の分岐
命令のアドレスが計算される。これに並行して、分岐命
令が他の命令とのデータハザード(レジスタ競合)の有
無に基づいて実行しても良いかが判断される。データハ
ザードとは命令依存関係のうち、レジスタまたはメモリ
に格納されたデータ相互間の依存関係のあることを指
す。“not taken”側の分岐先4命令がクロッ
ク・サイクル“2”で“not taken”プリフェ
ッチ・バッファに格納される。これら4命令は常に直前
のIDステージでウィンドウ内にある分岐命令に続く命
令と現在フェッチされた命令から付加した命令から構成
される(図2(b)および(c)参照)。制御ハザード
の挙動は次の2つに区別けされる。
【0022】i.命令ウィンドウ内に分岐命令が他の命
令とデータハザードが無い場合、分岐命令は実行される
(図2(b)クロックサイクル“3”参照)。分岐命令
の結果はレジスタ・ファイルからのデータの読込みまた
は、もし現在実行中の機能ユニット(実行ユニット又は
パイプライン演算器)が分岐命令とデータハザード(R
AWハザード;Read After Write)を
有するなら機能ユニットのディステイネーション・レジ
スタからのデータをバイパスするかによって“take
n(分岐)”か“not taken(非分岐)”かが
判断される。もし判断の結果、“not taken
(非分岐)”であれば、クロックサイクル“3”で“n
ot taken”プリフェッチ・バッファ内に既にフ
ェッチされた4命令が即デコードされる。もし判断の結
果、“taken(分岐)”であれば、クロックサイク
ル“3”で分岐先アドレスから4命令がフェッチされ
る。
【0023】ii.命令ウィンドウ内に、分岐命令が他の
命令とデータハザードがある場合、分岐命令は実行され
ず、ウィンドウ内に残る(図2(c)参照)。この場
合、クロック・サイクル“2”で分岐命令の直後の命令
からプログラム順に4命令が“not taken”プ
リフェッチ・バッファに格納され、クロック・サイクル
“3”で分岐先アドレスから4命令が“taken”プ
リフェッチ・バッファに格納される。スケジューリング
の結果分岐命令が実行されるや否や、分岐命令の結果が
バイパス回路によって決定される。その結果に基づき、
“not taken”プリフェッチ・バッファもしく
は“taken”プリフェッチ・バッファから選択され
た4命令がクロック・サイクル“4”ですぐにデコード
される。
【0024】(c)複数命令の同時取り込みについて 複数命令の同時取り込みは、PCが指定する命令フェッ
チ・アドレスの最下位2bitをデコードする手段と、
このアドレスの最上位30bitをインクリメントする
手段と、インターリーブド・命令キャッシュと、アライ
メント回路と、命令フェッチ・アドレスの最下位4bi
tをデコードする手段と、アドレスのインデックスをイ
ンクリメントする手段と、2ポート・メモリを有するタ
グメモリによって達成される。
【0025】
【実施例】図3は本発明が適用されるスーパースカラ・
アーキテクチャの一例を示したブロック図である。この
アーキテクチャは主に6つの部分から構成されており、
命令デコード及びスケジューリング機構1、プログラム
・カウンタ(PC)及び分岐機構2、命令キャッシュ及
びフェッチ機構3、機能ユニット(FU)4、データキ
ャッシュ5、及びレジスタ・ファイル6から構成されて
いる。均質ユニット構成の場合には、各機能ユニットは
ALU命令とLoad/Store命令を実行すること
ができる。不均質ユニット構成の場合には、機能ユニッ
トはALU命令又はLoad/Store命令を実行す
ることができる。Load/Storeユニットだけが
データキャッシュにアクセスされる。どちらの構成にお
いても分岐命令は分岐機構で処理される。この構成の
内、特に本発明に関連するのはプログラム・カウンタ
(PC)及び分岐機構2と命令キャッシュ及びフェッチ
機構3である。
【0026】図1はプログラム・カウンタ(PC)及び
分岐機構2を中心に、命令デコード及びスケジューリン
グ機構1と命令キャッシュ及びフェッチ機構3との接続
関係を含めた詳細を示した構成図である。プログラム・
カウンタ(PC)及び分岐機構2は、プログラム・カウ
ンタ(PC)20、加算器21〜23、マルチプレクサ
24、パラレルシフタ25、プリフェッチバッファ2
6,27、マルチプレクタ28及び命令選択部29から
構成されている。命令デコード及びスケジューリング機
構1は、命令ウインドウ30、スケジューリング部3
1、オペランド読み込み選択部32及び比較器33から
構成されている。
【0027】図1のこの機構においては、アドレス計算
を行う部分と、命令キャッシュ及びフェッチ機構(図3
及び図1の符号3参照)から命令を取り込み、スケジュ
ールされるべき適切な命令を命令デコード及びスケジュ
ーリング機構(図3及び図1の符号1参照)の命令ウィ
ンドウ30に送り込む部分からなる。アドレス計算及び
命令の選択はスケジューリング部31及びオペランド読
み込み選択部32からの信号(図1のa〜g、D、E参
照)により制御される。
【0028】(a)アドレス計算 アドレス計算は分岐命令がウィンドウ内に無い時、分岐
命令実行直後及びプログラム立ち上げ初期時、無条件分
岐命令(jump又はcall命令)の実行時、及び条
件分岐命令(BRT命令)の実行時の4つのケースがあ
る。 i.分岐命令が命令ウィンドウ30内に無い時 分岐命令が命令ウィンドウ30内に無い時は、PC20
の現在値に、スケジューリング部31による命令スケジ
ューリングの結果発行された(命令発行とは機能ユニッ
トでの命令実行を起動させるプロセスをいう。)命令数
(図1の信号c)を加算器21(図1参照)加えること
によって次にフェッチすべき命令の先頭番地であるアド
レス(A)が算出される。
【0029】ii.分岐命令実行直後及びプログラム立ち
上げ初期時 無条件分岐命令及び条件分岐命令を問わず、分岐命令の
実行直後は分岐先命令より4命令先の命令からの4命令
が取り込まれることになる。また、プログラム立ち上げ
初期時も同様である。そのため、このときは信号c(図
1)に数値“4”が出力され、PC←PC+4の加算が
加算器21で行われる(図1のA)。 iii .無条件分岐命令のためのアドレス計算 jump命令又はcall命令のような無条件分岐命令
の実行時には、命令のオペランドの指し示すアドレスが
次にフェッチすべき命令の先頭番地となるようにPC2
0に与えられる(図1のE)。 iv.条件分岐命令のためのアドレス計算 まず、分岐命令の格納されているアドレスを算出するた
めに、PC20の現在値に命令ウィンドウ30における
分岐命令の位置(命令ウィンドウ30の先頭からの位
置、信号a)を加えて5を引くことによって求める。こ
れは加算器22によってなされ、分岐命令のアドレスB
が得られる。次に、分岐先アドレスが算出される。“n
ot taken”の場合の分岐先アドレスは分岐命令
プラス1(B+1)して求められる(図1のC)。“t
aken”の場合の分岐先アドレスは分岐命令のアドレ
スに分岐命令をデコードの結果得られる分岐先のための
オフセット・アドレス(式(2)の#Oまたは図1のD
参照)を加えることによって、分岐先アドレスCが得ら
れる。
【0030】(b)分岐先命令の先読み・格納 i.“not taken”分岐先命令 図5は命令ウインドウ内の命令3が分岐命令の時の“n
ot taken”分岐先4命令の状態を示す説明図で
ある。“not taken”分岐先4命令はプログラ
ム順で分岐命令に続く4命令であるが、実際には、命令
ウィンドウ30内に分岐命令直後の命令が残り、次のク
ロックでフェッチされる4命令と加え合わされて“no
t taken”プリフェッチ・バッファー26に格納
される。そして、分岐命令の命令ウィンドウ30内の位
置(表1のa参照)に基づいて表1のような組合わせで
格納されることになる。
【0031】
【表1】
【0032】ii.“taken”分岐先命令 “taken”側分岐先4命令は、分岐先アドレスCか
らの4命令が“taken”プリフェッチ・バッファー
27に格納される。
【0033】(c)スケジュール対象命令の選択 図6は図1で示した命令選択部の詳細を示した図であ
る。スケジュールの対象となる命令は、分岐命令の実行
直後、プログラム立ち上げ初期時、無条件分岐命令の実
行時、及び条件分岐命令の実行時は、PC20の指し示
す値からの4命令が自動的に命令ウィンドウ30に送り
込まれる。分岐命令が命令ウィンドウ30内に無い時
と、条件分岐命令が発行されずに命令ウィンドウ30内
に残る時は次に示されるように命令が選択されて、命令
ウィンドウ30に送られる。
【0034】i.分岐命令がウィンドウ内に無い時 命令ウィンドウ30内の命令1は必ず発行されるが、命
令2〜4はデータの依存関係が無ければ、発行される。
本発明のスーパースカラではout−of−order
発行可能なスーパースカラを想定している。これに対
し、プログラムの命令実行順序で命令を発行する方式を
in−order発行という。このout−of−or
der発行の場合、命令2と命令4が発行されるという
ように歯抜けようになるときもある。発行されなかった
命令とフェッチされた4命令が加え合わされて新たなス
ケジュールの対象となる4命令が命令ウィンドウ30に
送り込まれる。1クロック前にスケジュールされた4命
令のうちどの命令が発行されたかどうかという情報に基
づいて、命令ウィンドウ30に送られるべき命令は決定
される(図6(a)参照)。
【0035】ii.条件分岐命令が発行されずに命令ウィ
ンドウ30内に残る時 本発明では、命令(n−1)が分岐命令であったら、命
令n以降の命令は取り除かれてスケジューリングされる
(発行・実行しない)。これは、out−of−ord
er命令発行方式なので、分岐命令以降の命令が分岐命
令よりも先に実行されてしまうと、間違った答えが得ら
れてしまうことが頻繁に起こるからである。これについ
て図7を用いて説明する。
【0036】図7は分岐命令(基本ブロック)を飛び越
えてout−of−order実行される場合の問題を
図示した説明図である。この例では、命令2は命令1と
RAWハザードを持ち、命令3は命令2の結果を使用し
ている(RAWハザード)。命令3は分岐命令であり、
命令2の実行結果がクロックサイクル“4”で決定する
ため、分岐先命令のアドレスもクロックサイクル“4”
で確定する。そして、クロックサイクル“5”で始めて
命令フェッチが可能になる。命令3は命令2の結果が格
納されるレジスタR5の値で真偽判断され、真であれ
ば、次の命令である命令4からの4命令が、偽であれ
ば、命令Xからの4命令がフェッチされるという命令で
ある。命令4は分岐命令の後続命令であり、命令1〜3
と同時にスケジューリングされる。このとき、命令4は
命令1〜3とRAW・WAW・WARハザードを持たな
いために、out−of−order発行を許すと命令
3の分岐命令より前に実行される。もし命令3の実行結
果から分岐先命令として命令Xが選択された場合には、
命令4は既に実行されており、命令4の結果がレジスタ
R10に書き込まれていて、レジスタR10を参照する
命令Xは間違った答えを得てしまう。それゆえ、本発明
では、スケジューリング時に分岐命令の後続の命令は無
視する。そのため、プログラム順で分岐命令以降の命令
は、スケジューリングの対象にならず(命令ウィンドウ
30内には残らず)、分岐命令の結果が決定するまで発
行されない。従って、分岐命令の後続の命令は無意味な
ものとして処理されなければならない。図6の新しくフ
ェッチされた4命令(n1〜n4)にはNOP命令が出
力され、(b)〜(e)(図6)に基づいて命令ウィン
ドウ30に送られるべき命令が決定される。
【0037】次に、複数命令の同時取込み機構について
述べる。図8は命令キャッシュ及びフェッチ機構3の詳
細構成図である。この機構は、図示のように、インクリ
メンタ40,47、タグメモリ41、比較器42,4
3、デコーダ44,46、セレクタ45、マルチプレク
サ48〜51、ドライバ52〜55、インターリーブド
命令キャシュ60及びアライメント回路70から構成さ
れている。インターリーブド命令キャシュ60はバンク
Ba0〜Ba3構成され、アライメント回路70はマル
チプレクサ71〜74から構成されている。
【0038】CPUから出力されるアドレスはフェッチ
すべき命令の先頭アドレス(1命令分)であり、3つの
フィールド(tag[タグ]、index[インデック
ス]、block offset[ブロックオフセッ
ト])に分割される。ブロックオフセットはブロックか
ら適切なデータを選択するために使われる。インデック
スはセット(キャッシュ内のブロックの集合体)を選択
するために使われる。言い換えれば、インデックスによ
ってタグメモリ41内のタグが参照され、アドレス内の
タグとタグメモリ内のデータとを比較することによって
命令キャッシュに存在する(ヒット)か否か(ミス)を
チェックするために使用される。
【0039】(a)インターリーブドメモリ 本発明で採用する命令キャッシュ60は4つのメモリバ
ンクを有する単一ポートインターリーブド・メモリと同
様である。各バンクはアドレスバス(32bit;b31
−b0 )の最下位2bit(b1 −b0 )によって識別
される。PC20が指示すフェッチすべき命令の最初の
命令のアドレスは最下位2bit(b1−b0 )を使用
してデコーダ46によりデコードされる。もしこの最初
の命令のアドレスがバンクBa1(XX01)、バンク
Ba2(XX10)又はバンクBa3(XX11)にあ
るなら、1個以上の命令が次の列(X(X+1)00)
からフェッチされなければならない。XXは最上位30
bitを示す。それゆえ、最上位30bit(b31−b
2 )は予めインクリメンタ47によりインクリメントさ
れ、各バンクBa0〜Ba3においてデコーダー46の
出力に基づいて(XX00)又は(X(X+1)00)
のどちらかの列が、図9に示すようにマルチプレクサー
71〜74によって選択される。
【0040】(b)ラインクロッシング 常に連続した4命令をフェッチする場合、いくつかの命
令は異なるブロックをアクセスすることがある(ライン
クロッシング)。本発明では、ブロック・サイズを16
としているので、ブロックオフセットは最下位4bit
(b3 −b0 )で識別される。PC20によって指定さ
れた最下位4bit(b3 −b0 )が1101,111
0,1111である場合には、1つ以上の命令は異なる
ブロックを参照しなければならない。すなわち、PC2
0で示されるindex(インデックス)に対し、in
dex+1をも参照する必要がある。各バンクBa0〜
Ba3における参照すべきインデックスの選択はブロッ
クオフセット値に基づいてなされ、その条件を表2に示
す。
【0041】
【表2】
【0042】2つのインデックス(indexとind
ex+1)が同時に命令キャッシュを参照するため、タ
グメモリ41は2ポート・メモリを使用する。そして、
ヒット/ミスの状況が4ケースあり、命令キャッシュお
よびメインメモリ・アクセスのアルゴリズムを表3に示
す。
【0043】
【表3】
【0044】(c)アライメント回路 以上のハードウェア回路によりキャッシュ・ミスが起き
ない限り、命令キャッシュ60から連続した4命令がフ
ェッチできるが、PC20が指し示すアドレスの命令が
命令のスケジュールを行う命令ウィンドウ30の先頭に
来るようにし、プログラム順に並ぶようにしなければな
らない(アライメント)。図8に示すように最下位2b
it(b1 −b0 )のデコード結果に基づいて並べ変え
られる。
【0045】上述の実施例の分岐先命令の先読み・実行
機構の性能を評価するために、ベンチマークテストを行
った。用いたベンチマークテストは10個で表4に示
す。本分岐先命令の先読み・実行機構を含むスーパース
カラと含まないスーパースカラとのベンチマーク上での
総クロック数の調和平均値を比較すると、CPU数が4
個の時で27%、CPU数が2個の時で23%という速
度向上をもたらすことが実証できた。
【0046】
【表4】
【0047】
【発明の効果】以上のように本発明によれば、スーパー
スカラの性能を低下させる分岐命令の高速実行が可能と
なっており、そして、分岐予測のような複雑なハードウ
ェア回路を必要としないで、スーパースカラの性能向上
が実現できる。また、従来の方法ではフェッチすべき命
令がブロックをまたがる時(ラインクロッシング)2ラ
インのアクセスに2クロック必要であったが、本発明に
おいては、キャッシュミスの場合を除き、プログラムカ
ウンタで与えたアドレスから連続した複数命令を常に同
時に1クロックサイクルで取り込むことができ、高速化
が図られる。また、本発明においては連続した複数命令
の先頭アドレスのみを与えれば、アドレスバス幅は1命
令分で済むという利点がある。
【図面の簡単な説明】
【図1】本発明の一実施例におけるPCユニット及び分
岐機構の内部構成図である。RISCアーキテクチャに
おける遅延分岐法である。
【図2】本発明において命令ウィンドウ内の命令3が分
岐命令で、クロックサイクル“2”で検出される時のパ
イプラインの挙動を示した説明図である。
【図3】前記実施例のスーパースカラ・アーキテクチャ
の構成図である。
【図4】RISCアーキテクチャにおける遅延分岐法で
ある。
【図5】図1の実施例において命令ウィンドウ内の命令
3が分岐命令の時の“nottaken”分岐先4命令
についての説明図である。
【図6】図1の実施例の命令選択部の詳細図である。
【図7】分岐命令がout−of−order実行され
る場合の問題点を示した説明図である。
【図8】図1の実施例の命令キャッシュ・フェッチ機構
の内部構成図である。
【図9】図8の命令キャッシュ・フェッチ機構において
PCの指定するアドレスの最下位2bitのデコード値
に基づく連続4命令のフェッチの方法を示した説明図で
ある。
【符号の説明】
図1において:A…分岐命令が無い場合の次のPCのア
ドレス、B…分岐命令のアドレス、C…分岐先命令のア
ドレス、D…分岐先アドレス算出のためのオフセット、
E…jump(call命令を含む)命令用の飛び先ア
ドレス、a…命令ウインドウ内の分岐命令の位置、b…
命令ウインドウ内の分岐命令2〜4が発行可能か不可か
を示す信号、c…発行命令数、d…命令ウインドウ内の
分岐命令の有無、e…分岐命令が発行可能か不可かを示
す信号、f…jump(call命令を含む)命令が行
可能か不可かを示す信号、g…分岐命令の結果分岐か非
分岐かを示す信号(taken or not tak
en)、ADD…加算器、MUX…マルチプレクサー。 図2において:IF…命令フェッチ(取り込み)、ID
…命令デコード(解読)、EX…実行、WB…結果の書
き込み(格納)、MEM…メモリ・アクセス、Ins
t.1…命令スケジューリングの対象になるウインドウ
内の命令1、Inst.2…命令2、Inst.3…命
令3、Inst.4…命令4、Inst.0…命令1の
前の命令、Rs…ソースレジスタ、Rs1…ソースレジ
スタ1、Rs2…ソースレジスタ2、Rd…デイステイ
ネーションレンジスタ、R1〜R2…レジスタ・ファイ
ル内の汎用レジスタ、ADD…加算命令、#x…分岐命
令の飛び先が命令X、BRT…条件分岐命令、NOP…
無操作命令。 図3において:1…命令デコード・スケジューリング機
構、2…プログラムカウンタ(PC)ユニットおよび分
岐機構、3…命令キャッシュおよびフェッチ機構、4機
能ユニット群(FU)、5…データキャッシュ、6…レ
ジスタ・ファイル。 図4において:IF…命令フェッチ(取り込み)、ID
…命令デコード(解読)、EX…実行、WB…結果の書
き込み(格納)、MEM…メモリ・アクセス、Ins
t.1…命令スケジューリングの対象になるウインドウ
内の命令1、Inst.2…命令2、Inst.3…命
令3、Inst.4…命令4、Inst.0…命令1の
前の命令、Rs…ソースレジスタ、Rs1…ソースレジ
スタ1、Rs2…ソースレジスタ2、Rd…デイステイ
ネーションレンジスタ、R1〜R2…レジスタ・ファイ
ル内の汎用レジスタ、ADD…加算命令、#x…分岐命
令の飛び先が命令X、BRT…条件分岐命令、NOP…
無操作命令。 図6において:p1〜p4…1クロック前にスケジュー
ルされた4命令、n1〜n4…新しくフェッチされた4
命令、w1〜w4…命令ウインドウに送られる4命令。 図8において:PC…プログラムカウンタ、tag…タ
グ、index…インデックス、block offs
et…ブロック・オフセット、MSB30bit(b32
−b0 )、LSB2bit(b1 −b0 )…最下位2b
it、MUT…マルチプレクサー、driver…イン
ターリーブド・メモリへのアクセスをタグメモリでのヒ
ット/ミス情報に基づきON/OFFする回路。 図9において:XX…再上位30bit。

Claims (5)

    【特許請求の範囲】
  1. 【請求項1】 オペコード及びオペランドからなる命令
    を格納する記憶手段と、複数個命令を同時に読み出すフ
    ェッチ手段と、読み出された命令を命令別に同時に解読
    し、命令の種別及びレジスタ参照番地を識別する複数個
    のデコーダと、デコードの結果から各命令間のレジスタ
    参照番地の競合又は衝突を検出する手段と、その競合又
    は衝突の検出結果に基いて、複数の命令が同時実行可能
    かどうかを決定するスケジュール手段と、次にフェッチ
    すべき命令の先頭番地を出力するプログラム・カウンタ
    及び分岐先命令、又は分岐先命令若しくは命令キャッシ
    ュからフェッチした命令を選択する分岐機構と、演算を
    行う複数のパイプライン演算機と、このパイプライン演
    算機又は汎用レジスタ・ファイルから複数のオペランド
    を読み出す装置において、 前記プログラム・カウンタの指し示す命令が分岐命令の
    場合を除き、直前のクロックサイクルで発行された命令
    数を格納するバッファと、 前記命令数と前記プログラム・カウンタの値とを加算
    し、次のクロックでフェッチするべき先頭アドレスを決
    定する加算器とを有することを特徴とする複数命令同時
    取込み機構。
  2. 【請求項2】 命令ウィンドウ内に分岐命令があると、
    分岐命令のアドレスを算出する第1の加算器と、分岐及
    び非分岐からなる一対の分岐先命令のアドレスを算出す
    る第2の加算器と、一方の分岐先命令を格納する第1の
    プリフェッチ・バッファーと、他方の分岐先命令を格納
    する第2のブリッチ・バッファーと、一対の分岐先命令
    又は命令キャッシュからフェッチした命令のいずれかを
    選択するマルチプレクサーとを有し、分岐命令によるパ
    イプライン停止時間を利用して両方の分岐先命令を予め
    取り込んでおくことを特徴とする請求項1記載の複数命
    令同時取込み機構。
  3. 【請求項3】 スケジュールの結果、命令ウィンドウ内
    の前回未発行であった命令と命令キャッシュからフェッ
    チしたN個の命令から前回未発行命令数に等しい数の命
    令を除いた残りを加え合わせて命令ウィンドウに送り込
    む命令選択部を有することを特徴とする請求項1又は2
    記載の複数命令同時取込み機構。
  4. 【請求項4】 プログラム・カウンタによって与えられ
    た任意のアドレスから連続したN個の命令が1クロック
    サイクルで常に同時にフェッチできる、バンク数N個の
    インターリーブド・命令キャッシュを有する請求項1、
    2又は3記載の複数命令同時取込み機構。
  5. 【請求項5】 命令フェッチ・アドレスの最下位所定ビ
    ットをデコードする手段と、アドレスのインデックスを
    インクリメントする手段と、2ポート・メモリであるタ
    グメモリとを有し、連続した複数命令がブロックを跨が
    った時でも1クロックサイクルで取り込むことのできる
    ようにしたことを特徴とする請求項1、2、3又は4記
    載の複数命令同時取込み機構。
JP5266434A 1993-10-25 1993-10-25 複数命令同時取込み機構 Pending JPH07121371A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP5266434A JPH07121371A (ja) 1993-10-25 1993-10-25 複数命令同時取込み機構

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP5266434A JPH07121371A (ja) 1993-10-25 1993-10-25 複数命令同時取込み機構

Publications (1)

Publication Number Publication Date
JPH07121371A true JPH07121371A (ja) 1995-05-12

Family

ID=17430885

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5266434A Pending JPH07121371A (ja) 1993-10-25 1993-10-25 複数命令同時取込み機構

Country Status (1)

Country Link
JP (1) JPH07121371A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100335747B1 (ko) * 1998-02-09 2002-05-08 포만 제프리 엘 무순서 인스트럭션 발행이 가능한 프로세서의 인스트럭션 버퍼에 인스트럭션을 로드하는 방법 및 장치
WO2009107462A1 (ja) * 2008-02-26 2009-09-03 日本電気株式会社 低コストに複数命令流を実行するプロセッサ、その方法及びそのプログラム
JP2012059163A (ja) * 2010-09-13 2012-03-22 Sony Corp プロセッサ

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100335747B1 (ko) * 1998-02-09 2002-05-08 포만 제프리 엘 무순서 인스트럭션 발행이 가능한 프로세서의 인스트럭션 버퍼에 인스트럭션을 로드하는 방법 및 장치
WO2009107462A1 (ja) * 2008-02-26 2009-09-03 日本電気株式会社 低コストに複数命令流を実行するプロセッサ、その方法及びそのプログラム
JP5333433B2 (ja) * 2008-02-26 2013-11-06 日本電気株式会社 低コストに複数命令流を実行するプロセッサ、その方法及びそのプログラム
US8745359B2 (en) 2008-02-26 2014-06-03 Nec Corporation Processor for concurrently executing plural instruction streams
JP2012059163A (ja) * 2010-09-13 2012-03-22 Sony Corp プロセッサ
US9841978B2 (en) 2010-09-13 2017-12-12 Sony Corporation Processor with a program counter increment based on decoding of predecode bits
US11200059B2 (en) 2010-09-13 2021-12-14 Sony Corporation Processor with a program counter increment based on decoding of predecode bits

Similar Documents

Publication Publication Date Title
US5606676A (en) Branch prediction and resolution apparatus for a superscalar computer processor
US7197603B2 (en) Method and apparatus for high performance branching in pipelined microsystems
US7941654B2 (en) Local and global branch prediction information storage
US5958041A (en) Latency prediction in a pipelined microarchitecture
US20060248319A1 (en) Validating branch resolution to avoid mis-steering instruction fetch
US20050149698A1 (en) Scoreboarding mechanism in a pipeline that includes replays and redirects
US20070288733A1 (en) Early Conditional Branch Resolution
US6192466B1 (en) Pipeline control for high-frequency pipelined designs
US6728872B1 (en) Method and apparatus for verifying that instructions are pipelined in correct architectural sequence
US7454598B2 (en) Controlling out of order execution pipelines issue tagging
JPH1069385A (ja) 命令ループを推論的に実行するプロセッサ及び方法
JPH07152559A (ja) パイプ制御及びレジスタ変換機能を増強したスーパースカラーパイプライン式のプロセッサ
US7272704B1 (en) Hardware looping mechanism and method for efficient execution of discontinuity instructions
US8301871B2 (en) Predicated issue for conditional branch instructions
WO2006122941A2 (en) Controlling out of order execution pipelines using skew parameters
US20080168260A1 (en) Symbolic Execution of Instructions on In-Order Processors
US6622240B1 (en) Method and apparatus for pre-branch instruction
US20070288732A1 (en) Hybrid Branch Prediction Scheme
US20070288731A1 (en) Dual Path Issue for Conditional Branch Instructions
US20050223201A1 (en) Facilitating rapid progress while speculatively executing code in scout mode
US20110055523A1 (en) Early branch determination
US20070288734A1 (en) Double-Width Instruction Queue for Instruction Execution
US7779234B2 (en) System and method for implementing a hardware-supported thread assist under load lookahead mechanism for a microprocessor
US6708267B1 (en) System and method in a pipelined processor for generating a single cycle pipeline stall
JP3736866B2 (ja) スーパーパイプライン式スーパースカラーマイクロプロセッサ用のマイクロコントロールユニット