JPH0520067A - 並列演算処理装置における分岐命令処理方式 - Google Patents

並列演算処理装置における分岐命令処理方式

Info

Publication number
JPH0520067A
JPH0520067A JP3172203A JP17220391A JPH0520067A JP H0520067 A JPH0520067 A JP H0520067A JP 3172203 A JP3172203 A JP 3172203A JP 17220391 A JP17220391 A JP 17220391A JP H0520067 A JPH0520067 A JP H0520067A
Authority
JP
Japan
Prior art keywords
instruction
branch
instructions
queue
executed
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.)
Granted
Application number
JP3172203A
Other languages
English (en)
Other versions
JP2875909B2 (ja
Inventor
Hideki Ando
秀樹 安藤
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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP17220391A priority Critical patent/JP2875909B2/ja
Priority to DE4244924A priority patent/DE4244924C2/de
Priority to DE19924222776 priority patent/DE4222776C2/de
Publication of JPH0520067A publication Critical patent/JPH0520067A/ja
Priority to US08/594,358 priority patent/US5809294A/en
Application granted granted Critical
Publication of JP2875909B2 publication Critical patent/JP2875909B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

(57)【要約】 【目的】 並列演算処理装置において分岐命令実行に伴
う性能低下を防止する。 【構成】 4命令ずつプリフェッチした命令がキュー1
3に格納される。キュー13からは、読出ポインタ14
からのポインタに従って4命令が読出され、分岐処理部
11、命令発行解析部10へ送出される。分岐処理部1
1からの分岐することまたは分岐しないことを示す信号
と、命令発行解析部10からの発行命令数、分岐命令が
キュー13に格納されているアドレスの下位2ビットを
無視した信号および読出ポインタ14からの読出アドレ
ス、および書込ポインタ15からの書込アドレスの値に
従って次のサイクルにおける読出ポインタ14の値およ
び書込ポインタ15の値を決定する。 【効果】 分岐命令にかかる遅延分岐スロットが複数の
命令構成され、この遅延分岐スロットを分岐先側の命令
で定めることにより、分岐命令が実行された際に生じる
性能低下が軽減される。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】この発明は並列演算処理装置にお
ける分岐命令の処理方式に関する。
【0002】
【従来の技術】パイプライン計算機においては、通常、
分岐が発生すると、すでにパイプラインに入っている命
令は無効にされる。このパイプラインに投入された命令
の無効化はパイプライン計算機の性能を低下させる。こ
の事情を理解するために、次のような5段のパイプライ
ンを備えるプロセッサを考える。
【0003】IF:命令フェッチを行なう。 ID:命令デコード、レジスタ・ファイルの読出、およ
び分岐命令の実行を行なう。
【0004】EXC:ALU(算術論理演算装置)を用
いて演算を行なう。 MEM:メモリ(データメモリ)をアクセスする。
【0005】WB:レジスタ・ファイルへのデータの書
込を実行する。図2に、分岐が生じた場合のパイプライ
ンの動作を示す。パイプラインは、分岐が存在しない場
合には、与えられた命令を順次実行する。したがって、
パイプラインへは、命令は、命令i,i+1,i+2,
i+3,…の順に入っていく。今、命令i+1が分岐命
令であったとする。命令i+1によって、実際に分岐が
発生するか否かは、IDステージの終了時点においてし
かわからない。したがって、時刻(サイクル)T+2に
命令i+1がIDステージへ入ったときには、次の命令
i+2がIFステージへ入ってしまう。
【0006】時刻T+2の終了時に、分岐命令i+1に
従って分岐することが判明したとすると、次に実行すべ
き命令は命令i+2ではなく、分岐先命令である。した
がって、この時点(時刻T+2の終了時点)において命
令i+2はキャンセルされる。分岐先命令を命令jとす
ると、命令jは、時刻T+3にIFステージへ入る。す
なわち、分岐が発生した場合、1クロック、命令の処理
を行なわない期間がパイプラインに生じる。このパイプ
ラインにおける1クロックの空白期間がプロセッサの処
理速度を低下させ、性能低下を招く。
【0007】通常、RISC(縮小命令セットコンピュ
ータ)においては、遅延分岐方式を用いることにより、
この分岐命令による性能の低下を防止している。遅延分
岐においては、分岐が生じたときにすでにパイプライン
に入っている命令を無効化しない。すなわち、分岐が生
じることによってパイプラインに空きが生じる期間(分
岐遅延)が“1”サイクルの遅延分岐では、命令は次の
ように実行される; 分岐命令 <命令> 分岐先命令 <命令>の部分は分岐遅延スロットと呼ばれる。分岐遅
延スロットの命令は、分岐の正否にかかわらず実行され
る。したがって、コンパイラは、実行結果が正しくなる
ように命令を移動させて遅延スロットを形成する必要が
ある。
【0008】図3に、分岐遅延スロットに移動すること
のできる命令の例を示す。図3において分岐命令は“I
F…THEN”で示され、その分岐先は矢印で示され
る。
【0009】図3(A)において、命令“R1←R2+
R3”が遅延スロットへ移動される。命令“R1←R2
+R3”は分岐命令による分岐の有無にかかわらず実行
されるため、無条件で分岐遅延スロットへ移動させるこ
とができる。
【0010】図3(B)の場合、分岐命令の分岐先が命
令“R4←R5−R6”であるとき、この命令“R4←
R5−R6”を遅延スロットへ移動させる。この遅延ス
ロット内の命令“R4←R5−R6”は分岐が起こらな
い場合においても実行されるため、この分岐が生じなか
った場合にも正しい結果が得られることが保証されなく
てはならない。
【0011】図3(C)においては、遅延スロットの次
の“命令R4←R5−R6”が遅延スロット内に移動さ
れる。この場合、命令“R4←R5−R6”はもともと
分岐が生じた場合には実行されない命令であるため、分
岐が生じた場合にも正しい結果が得られることが保証さ
れなくてはならない。
【0012】次に、スーパースカラーについて説明す
る。スーパースカラーとは、以下の特徴を備えるプロセ
ッサである: (1) 命令を複数個フェッチする。
【0013】(2) 複数の機能ユニットを備え、複数
の命令を同時に実行する。 (3) フェッチされた複数の命令の中から、同時に実
行可能な命令を検出し、この同時実行可能な命令を各関
連の機能ユニットに投入する。
【0014】図4に、スーパースカラーの一般的な構成
を示す。図4において、1は、命令を格納するための命
令メモリ、2は命令メモリ1に対しフェッチする命令の
アドレスを送出する命令フェッチ・ステージ(IFステ
ージ)、3は、フェッチされた複数の命令のデコード、
レジスタ・ファイル(図示せず)の読出し、分岐命令の
実行を行なう命令デコード・ステージ(IDステー
ジ)、4a,4b,6および7はそれぞれ所定の演算を
実行する機能ユニット、8はデータを格納するデータメ
モリである。
【0015】命令デコード・ステージ3は、またデコー
ドした複数の命令の中から、同時に実行可能な命令を検
出し、この同時実行可能な命令を機能ユニット4a,4
b,6および7へ投入する。
【0016】機能ユニット4aおよび4bは、整数加算
等を実行するユニットである。機能ユニット6は、デー
タメモリ8へのデータのロードまたはストアを実行す
る。機能ユニット7は、浮動小数点加算等を実行する。
【0017】この機能ユニット4a,4b,6および7
は、それぞれパイプライン化された複数のステージを備
える。機能ユニット4a,4bは、与えられた命令を実
行する実行ステージEXCと、この実行結果をレジスタ
ファイルへ書込むためのレジスタファイル書込ステージ
WBを含む。機能ユニット6は、与えられた命令からデ
ータメモリ8へアクセスするアドレスを計算するアドレ
ス計算ステージADRと、計算されたアドレスに従って
データメモリ8へアクセスするメモリアクセスステージ
MEMと、データメモリ8からロードされたデータをレ
ジスタ・ファイルへ書込むためのレジスタファイル書込
ステージWBを含む。
【0018】機能ユニット7は、3段の実行ステージE
XC1,EXC2,およびEXC3と、この実行された
結果をレジスタファイルへ書込むためのレジスタファイ
ル書込ステージWBを含む。スーパースカラーでは図4
に示すように、命令メモリ1から複数の命令が同時にフ
ェッチされ、機能ユニット4a,4b,6および7にお
いて並列に複数の命令が実行されるため、通常のパイプ
ラインが1本のプロセッサに比べて、処理速度の向上が
得られる。
【0019】
【発明が解決しようとする課題】図5に、スーパースカ
ラーにおいて、分岐が生じたときのパイプラインの動作
を示す。図5においては、2命令が同時にフェッチさ
れ、かつ最大2つの整数演算を同時に実行することので
きるスーパースカラーにおけるパイプラインの動作が一
例として示される。命令i+3が分岐命令であるとす
る。命令i+3がIDステージ(命令デコードステー
ジ)に到達したときに分岐することがわかったとする。
この時点では、命令i+4およびi+5はすでにIFス
テージ(命令フェッチステージ)にある。これらの命令
i+4およびi+5は分岐発生が判明したときにキャン
セルされる。
【0020】分岐先命令である命令jは、時刻(サイク
ル)T+3から開始される。この図5に示すように、ス
ーパースカラーにおいては、複数の命令が同時に実行さ
れるために、キャンセルされる命令が複数存在すること
になり、1本のパイプラインを備えるプロセッサに比べ
て性能へ及ぼす影響がより大きくなる。
【0021】また、この分岐命令の後に分岐遅延スロッ
トを投入する遅延分岐方式の場合、複数の命令を分岐遅
延スロットとして設ける必要がある。
【0022】J.Hennessy,D.A.Patt
erson,“ComputerArchitectu
re:A Quantitative Approac
h”、P.276,Figure6.22に示すところ
によれば、現在のRISCコンピュータにおいて、分岐
遅延スロットをコンパイラによる命令の移動によって埋
めることのできる確率は約50%である。通常、埋めら
れない分岐遅延スロットに対しては、NOP命令などが
挿入される。したがって、分岐遅延スロットが複数個存
在するスーパースカラーにおいては、すべての分岐遅延
スロットを命令の移動により埋めることのできる確率は
非常に低いと予想される。
【0023】また、スーパースカラーでは、分岐遅延ス
ロットに移動可能な命令は、分岐遅延スロットを埋める
ことに利用される以前に、同時に実行可能な命令として
他の命令とともに実行されるように移動させることがで
きる。したがって、スーパースカラーにおいては、従来
の遅延分岐方式では、性能を向上させることが困難であ
る。
【0024】それゆえに、この発明の目的は、分岐発生
時においても性能が低下することのない並列演算処理装
置における分岐命令処理方式を提供することである。
【0025】
【課題を解決するための手段】第1の発明にかかる分岐
命令処理方式においては、分岐遅延スロットは、分岐命
令の次に位置する命令から、分岐命令のフェッチおよび
実行のサイクルの間にフェッチされる命令のすべてと定
義される。
【0026】第2の発明にかかる分岐命令処理方式にお
いては、命令メモリからの命令をプリフェッチして格納
するための命令プリフェッチ用キューメモリ手段を設
け、このキューメモリの各エントリにこのエントリに格
納される命令が分岐予測に従って実行されたことを示す
ためのフィールドを設け、このフィールドの値に従って
命令の実行/実行禁止を制御するようにする。
【0027】
【作用】第1の発明においては、分岐命令の実行結果が
分岐でない場合、分岐命令が実行された次のサイクルに
フェッチされる命令は、分岐遅延スロットの命令である
ため、分岐による遅延を生じることなく命令が実行され
る。
【0028】また分岐命令の実行結果が分岐である場
合、分岐命令がフェッチされた次の、次のサイクルにフ
ェッチされる命令が次に実行されるべき命令であるが、
この命令はキューメモリにプリフェッチされているた
め、キューメモリの読出ポインタを移動するだけで分岐
による遅延なく分岐先命令を実行することができる。
【0029】第2の発明に従えば、各命令には、分岐予
測に従って実行されたか否かを示すフィールドが設けら
れており、分岐予測が正しかった場合には、この分岐予
測命令がそのまま実行されるため、分岐先命令を新たに
フェッチする時間が節約され、性能低下が緩和される。
【0030】
【実施例】
実施例1 図1にこの発明の一実施例である並列演算処理装置にお
ける命令デコード・ステージの要部の構成を示す。図1
において、命令デコード・ステージは、命令キュー9
と、命令発行解析部10と、ポインタ制御部12と、分
岐処理部11とを備える。
【0031】命令キュー9は、命令メモリから1(図4
参照)から複数の命令(命令1〜命令4)をプリフェッ
チして格納する。キュー9は、命令を格納するための記
憶部(キュー)13と、読出アドレスscopeを保持
する読出ポインタ14と、書込アドレスqueue
opを保持する書込ポインタ15を含む。
【0032】命令発行解析部10は、命令キュー9から
読出された命令のうちどの命令が発行可能かを解析す
る。この命令発行解析部10の解析結果は、信号ins
availとして各命令に付随して出力される。信
号inst availがオンであれば、その命令は発
行可能な命令であり、実行すべき命令であることを示
す。この図1に示す構成においては、4つの命令を命令
キュー9から同時に読出し、命令発行解析部10で発行
解析を行なう。4ビットの信号inst availに
対して、発行可能な場合に対応の信号inst ava
ilがオンとされる。命令発行解析部10は、さらにこ
の信号inst availの信号に基づいて、発行可
能命令数を示す信号issue countを発生し
て、ポインタ制御部12へ送る。
【0033】命令発行解析部10はさらに、与えられた
命令中に分岐命令が含まれている場合、分岐命令の格納
されていた命令キュー9のアドレスの下位2ビットを無
視した値br blockをポインタ制御部12へ送
る。
【0034】分岐処理部11は、命令キュー9から読出
された命令の中に、分岐条件があれば、(条件付分岐命
令の場合)、その分岐条件のテストを行ない、分岐すべ
きか否かを決定する。分岐すべき場合には,分岐処理部
11は、信号Takenをオンとし、分岐しない場合に
は、信号NotTakenをオンとする。
【0035】ポインタ制御部12は、命令キュー9のポ
インタ14および15の読出ポインタscopeおよび
書込ポインタqueue topの値を制御する。ま
た、ポインタ制御部12は、命令のデコードステージI
Dからパイプラインへの命令の発行を全面的に禁止する
信号issue stopを発生して命令発行解析部1
0へ与える。
【0036】4命令を同時に命令メモリからフェッチ
し、かつ同時に4命令をデコードするスーパースカラー
の構成においては、命令メモリ1から供給された命令
(命令1〜命令4)は、書込アドレスqueue to
pから始まるキュー13の4つのアドレスに格納され
る。次のサイクルにおいて書込ポインタqueue
opは4加算される。
【0037】また、読出ポインタscopeから始まる
キュー13の4つのアドレスに格納されている4命令が
キュー13から読出され、命令発行解析部10およびデ
コード回路(図示せず)へ与えられ、解析およびデコー
ドされる。この解析の結果、n個の命令が発行されたと
すると、次のサイクルでは読出ポインタscopeの値
はn加算される。
【0038】図6に、この命令キュー9の動作を説明す
るための図を示す。図6において、キュー13のサイズ
(エントリー数)は16としている。
【0039】今サイクルTにおいて、書込アドレスqu
eue topは、8を示す。命令メモリから読出され
た4命令は、キュー13のアドレス8,9,10および
11に書込まれる。
【0040】また、読出ポインタscopeは3を示し
ており、キュー13のアドレス3,4,5および6の命
令が読出される。このサイクルTにおいて、2命令が機
能ユニットに投入されたとする。すなわち発行命令数が
2であるとする。この場合、次のサイクルT+1におい
ては、読出ポインタscopeは、2増加されて5を示
す。また、書込ポインタqueue topは、4加算
され12となる。このキュー13は、4命令を同時に書
込むことができ、また4命令を同時に読出すことができ
る。この書込動作と読出動作は非同期的に実行可能であ
る。
【0041】分岐遅延スロットを定めるために、まず命
令ブロックを定義する。次の4つの命令を命令ブロック
と呼ぶ:アドレスが4n,4n+1,4n+2,4n+
3(n:整数)である命令分岐遅延スロットは、分岐命
令の次のスロットから、分岐命令を含む命令ブロックの
次の命令ブロックの最後のスロットまでと定義する。図
7に、命令ブロックおよび分岐遅延スロットを例示す
る。図7において、ブロックB1に分岐命令が含まれる
場合、この分岐命令の次のスロットから、このブロック
B1に隣接する次のブロックB2の最後のスロットまで
が分岐遅延スロット(図7において斜線で示す)と定義
される。図7に示す場合には、分岐遅延スロットに含ま
れる命令数(スロット数)は5である。
【0042】さらに、分岐遅延スロットは、分岐する側
の命令(分岐後に実行される命令)で埋める。この分岐
遅延スロットを埋める命令の条件としては、分岐する側
の命令であり、かつ分岐命令以外の命令という条件が要
求されるだけである。従来の遅延分岐方式においては、
分岐遅延スロットには、分岐の方向(分岐の発生/非発
生)がいずれであっても結果が正しくなるような命令が
選ばれて埋められる。
【0043】本発明においては、分岐遅延スロットに
は、分岐する側の命令でのみ埋める。分岐命令の実行結
果が、分岐非発生を示し、信号NotTakenがオン
とされた場合、この分岐遅延スロットに埋められた命令
は実行されないようにハードウェアが制御する。以下
に、分岐命令が実行されたときの命令キューの動作につ
いて説明する。
【0044】「分岐発生の場合:信号Takenがオ
ン」 分岐命令が格納されているキュー13のアドレスの下位
2ビットを切り捨てた値をbr block、そのとき
の書込アドレスqueue copの下位2ビットを切
り捨てた値をqt blockとする。この下位2ビッ
トを切り捨てることにより、分岐命令が格納されている
ブロック(キュー13におけるブロック)と、そのとき
に命令が書込まれたブロックが示される。
【0045】br blockとqt blockが等
しい場合は、分岐遅延スロットは、まだ、命令キュー9
にフェッチされていないことを示す。この場合、次のサ
イク0で分岐遅延スロットをフェッチする必要がある。
命令キュー13には、与えられた命令をブロックに書込
めばよい。したがって、書込ポインタqueue to
pは4加算される。式を用いて示すと以下のようにな
る。
【0046】br block=(分岐命令が格納され
ているキューのアドレス)(3..2) qt block=queue top(3..2) If br block==qt block then queue top=queue top+4 上式において、qt block=queue top
(3..2)とは、書込ポインタqueue topの
ビット2およびビット3をqt blockに代入する
ことを示す。ここで、キュー13は16エントリを備え
ており、そのキューの書込ポインタおよび読出ポインタ
は4ビットで表わされる。したがって、ビット2および
ビット3の上位2ビットを見ることによりキューにおけ
るブロックが識別される。また上式において“==”
は、その右辺と左辺の値が等しいことを示す。
【0047】br blockとqt blockが等
しくない場合、分岐遅延スロットはすでにフェッチさ
れ、命令キュー9にすでに格納されていることを示す。
この場合、分岐先の命令を格納するためのキュー13の
アドレス、すなわち、分岐遅延スロットが格納されてい
るキューアドレスの次のアドレスを書込ポインタque
ue topにセットする。すなわち、 IF br block!=qt block then queue top=br block##02 +8 と表わされる。この上式において、“!=”は右辺と左
辺の値が等しくないことを示す。“##”は、右辺と左
辺とを結合することを示す。Xn は、操作Xをn回繰返
すことを示す。したがって、上式において、br bl
ock##02 は、値br blockを上位2ビット
とし、その下位2ビットに0を付加することを示す。こ
の操作により分岐命令が含まれるブロックの先頭アドレ
スが求められる。この先頭アドレスに8を加えることに
より、次の次のブロックの先頭アドレスが求められる。
【0048】さらに、この場合、分岐命令が実行された
次のサイクルでは、分岐先命令は命令メモリからは送ら
れてこない。したがって、分岐命令が実行された次のサ
イクルでは、書込ポインタqueue topは、その
値は分岐命令実行時のものと同じ値とされる。
【0049】読出ポインタscopeは、分岐遅延スロ
ットがすでにフェッチされているかいないかにかかわら
ず、分岐命令が実行される場合でないときと同様に更新
される。
【0050】上述の動作を具体的に図面を参照して説明
する。図8ないし図10に、分岐命令が実行されたサイ
クルで、分岐遅延スロットがまだフェッチされていない
場合のキューの動作を示す。
【0051】図8は、分岐命令が実行されたサイクルに
おける命令キュー9の状態を示す。読出ポインタsco
peおよび書込ポインタqueue topはともに0
を保持している。キュー13のアドレス2に分岐命令が
存在し、このサイクルで、この分岐命令が実行されたと
する。
【0052】図9に示す次のサイクルにおいては、書込
ポインタqueue topは4加算されているため、
4となる。キュー13のアドレス4,5,6および7
に、遅延スロットの命令が書込まれる。このとき、命令
メモリへは、分岐先アドレスに従ってアクセスが行なわ
れている。
【0053】さらに次のサイクルでは、図10に示すよ
うに、書込ポインタqueue topは4加算されて
いるため、8となる。命令メモリからは分岐先の命令が
送られて来る。キュー13のアドレス8,9,10およ
び11に、分岐先の命令が書込まれる。読出ポインタs
copeが示す遅延スロット内の命令は分岐する側の命
令である。分岐遅延スロット内の命令の発行後、このフ
ェッチされた分岐先命令がデコードステージへ送出され
る。したがって、分岐命令が実行されたサイクルで、分
岐遅延スロットがまだフェッチされていない場合におい
ては、分岐が生じることによる性能低下(パイプライン
空き)は生じない。
【0054】図11ないし図13に、分岐命令が実行さ
れたサイクルで、分岐遅延スロットがすでにフェッチさ
れている場合の命令キュー9の状態を示す。
【0055】図11は、分岐命令が実行されたサイクル
での命令キュー13の状態を示す。読出ポインタsco
peは0を示し、書込ポインタqueue topは1
2を示している。キュー13のアドレス2に分岐命令が
存在し、このサイクルで、この分岐命令が実行されたと
想定する。
【0056】図12に示す次のサイクルでは、書込ポイ
ンタqueue topは、分岐遅延スロットの次のア
ドレスを保持するため、8となる。このサイクルでは、
命令メモリから送られて来る命令は不要な命令である。
すなわち遅延スロット外の分岐元の命令(分岐非発生時
に実行される命令)である。このため、図13に示す次
のサイクルでは、書込ポインタqueue topの値
は更新されない。この不要な命令は、キュー13に書込
まれてもよい。これは次のサイクルで、分岐先命令で書
き換えられるだけである。
【0057】また図12に示すサイクルにおいては、分
岐先アドレスに従って命令メモリへアクセスが行なわれ
ている。
【0058】図13に示すサイクルにおいては、命令メ
モリからは分岐先の命令が送出される。書込ポインタq
ueue topは分岐遅延スロットの次の値を保持し
ている。このため、キューアドレス8,9,10および
11に分岐先の命令が書込まれる。この図11ないし図
13に示す動作からも明らかなように、分岐命令が実行
されたサイクルで、分岐遅延スロットがすでにフェッチ
されている場合においても、分岐が生じることによる性
能低下はもたらされない。
【0059】「分岐非発生の場合:NotTakenが
オンの場合」 命令キュー9から読出されデコードされていた命令のう
ち、分岐命令の後方にある命令を無効化する。これは、
分岐命令以後の命令が分岐遅延スロットに対応し、分岐
遅延スロットは分岐する側の命令であるからである。こ
こで、分岐遅延スロットを満たす分岐する側の命令と
は、この分岐命令による分岐が生じたときに実行される
分岐先の命令である。具体的には分岐する側の命令は、
この分岐遅延スロットにかかわる分岐命令が分岐したと
きに実行される分岐先アドレスの命令から、次に実行さ
れる分岐命令より1つ前方のアドレスの命令のなかの命
令である。したがって、分岐発生時において、分岐先命
令ブロックに投入される命令は、この遅延スロットを構
成する命令に続いて実行される命令である。
【0060】分岐が生じず、信号NotTakenがオ
ンの場合、次のサイクルでは、分岐遅延スロットの命令
は実行してはならない。この分岐遅延スロットの命令は
飛ばされて、その次の命令が実行されなければならな
い。したがって読出ポインタscopeは、 scope=br block##02 +8 とされる。分岐遅延スロットの次の命令ブロックがすで
にフェッチされていれば、分岐命令が実行された次のサ
イクルではすでに実行すべき命令がフェッチされている
ことになる。したがって、分岐命令実行による性能低下
は生じない。
【0061】分岐遅延スロットがまだフェッチされてい
ない場合、すなわち、ポインタbr blockとポイン
タqt blockが等しい場合、分岐命令が実行され
た次のサイクルでは、実行すべき命令がまだフェッチさ
れていない。この実行すべき命令のフェッチを待つた
め、パイプラインは1サイクル停止する必要がある。す
なわち、ポインタbr blockとポインタqt
lockが等しい場合、次のサイクルでは、命令の発行
が禁止される。
【0062】書込ポインタqueue topは、分岐
遅延スロットがすでにフェッチされているか否かにかか
わらず、分岐命令が実行される場合でないときと同様に
更新される。
【0063】図14ないし図16に、分岐が発生せず、
信号NotTakenがオンでありかつ分岐遅延スロッ
トがまだフェッチされていない場合の命令キューの動き
を具体的に示す。以下、図14ないし図16を参照して
分岐命令による分岐が生じた場合に分岐遅延スロットが
まだフェッチされていない場合の命令キューの動きにつ
いて説明する。
【0064】図14は分岐命令が実行されたサイクルに
おける命令キュー13の状態を示す。読出ポインタsc
opeおよび書込ポインタqueue topはともに
0を示す。キュー13のアドレス2に分岐命令が存在
し、このサイクルで分岐命令が実行されたとする。
【0065】図15に示す分岐命令実行の次のサイクル
では、書込ポインタqueue topが4加算され、
4となる。キュー13のアドレス4,5,6および7
に、遅延スロットの命令が書込まれる。読出ポインタs
copeは、遅延スロットの次のアドレス、すなわち8
に更新される。キュー13のアドレス8,9,10およ
び11には、実行すべき命令は格納されていない。この
サイクルでの命令発行が禁止される。すなわち、図1に
示す命令発行解析部10へ発行禁止信号issue
topが送出され、命令発行が禁止される。
【0066】その次のサイクル(図16)においては、
書込ポインタqueue topは4加算され、8にな
る。命令メモリからは遅延スロットの次の命令ブロック
が送出され、キュー13のアドレス8,9,10および
11に書込まれる。このとき読出ポインタscopeは
また8を示しているため、この命令メモリから送出され
た命令ブロックか同時に読出されて命令デコーダへ送ら
れる。
【0067】ここで、スーパースカラーの各ステージ
は、2相の互いに重なりあわないクロック(Tクロック
およびLクロック)で動作しており、各ステージの入力
段にはTクロックに応答して与えられた信号をラッチす
るラッチ回路が設けられており、出力部には、Lクロッ
ク信号に応答して与えられた信号をラッチするLラッチ
が設けられている。このとき、キュー13へのデータの
書込がTクロックに応答して行なわれ、データの読出が
Lクロックに応答して行なわれる構成とされることによ
り、命令メモリから与えられた命令のキュー13への書
込と同時に命令デコーダへの送出が実現される。また、
これはデータの書込および読出がTクロックに応じて行
なわれ、データの読出タイミングがデータ書込タイミン
グより遅く、キュー13のデータが確定した状態で読出
されるようにされていてもよい。
【0068】図17および図18に分岐命令が実行され
たサイクルにおいて、分岐遅延スロットがすでにフェッ
チされている場合のキューの動きを示す。
【0069】図17は、分岐命令が実行されたサイクル
における命令キュー9の状態を示す。
【0070】読出ポインタscopeは0を示し、書込
ポインタqueue topは8を示す。キュー13の
アドレス2に分岐命令が存在し、この図17に示すサイ
クルでこの分岐命令が実行されたとする。
【0071】図18に示す次のサイクルにおいては、読
出ポインタscopeは、遅延スロットの次のアドレス
を示すため、8となる。書込ポインタqueue to
pは、通常の場合と同様に、4加算されて12となる。
【0072】以上示したように、分岐命令が実行された
サイクルで、分岐遅延スロットがすでにフェッチされて
いる場合、分岐命令実行による性能の低下は生じない。
分岐遅延スロットがフェッチされていない場合、分岐非
発生時に、1サイクルのフェッチ待ちが生じる。しかし
ながら、一般に、命令フェッチのバンド幅(1サイクル
にフェッチされる命令数)を、命令発行平均速度(1サ
イクルに発行される命令の平均数)よりも大きくしてお
けば、分岐命令が実行されるサイクルで遅延スロットが
すでにフェッチされている確率は高い。したがって、こ
の構成により、分岐命令実行により処理装置の性能が低
下する確率は極めて低くなる。
【0073】図19に、図1に示すポインタ制御部12
が実現する論理(上で説明した)を一覧にして示す。図
19において“X”は任意の値を示す。また“−”は特
に規定されないことを示す。
【0074】図20にポインタ制御部の構成を示す。図
20において、16aは、レジスタ15の出力queu
topと4とを加算する加算器、16bは、レジス
タ14の出力ポインタscopeと発行命令情報iss
ue countとを加算する加算器、16cは、分岐
命令が含まれるブロック(キューにおけるブロック)の
先頭アドレスbr block##02 と8とを加算す
る加算器、17aは、レジスタ15の出力queue
topと加算器16aの出力と加算器16cの出力のい
ずれかを選択し、レジスタ15へ選択結果を書込むセレ
クタ、17bは、加算器16bと加算器16cの出力の
いずれかを選択してレジスタ14へ書込むセレクタ、1
8は、ポインタbr blockとポインタqt blo
ckとを比較する比較器、21は比較器18の出力を反
転するインバータ、22は比較器18の出力と信号No
tTakenとの論理積をとるAND回路、23は信号
NotTakenを反転するインバータ、24はインバ
ータ21の出力と信号Takenとの論理積をとるAN
D回路、19は、AND回路24の出力を1クロック保
持(遅延)させるためのレジスタ、25はAND回路2
4の出力とレジスタ19の保持データとの否定論理和を
とるNOR回路である。
【0075】AND回路22から発行禁止信号issu
stopが発生される。信号sel c、sel
aおよびsel bはセレクタ17aの入力を選択する
ための信号である。
【0076】信号sel dおよびsel eはセレク
タ17bの入力を選択するための信号である。
【0077】図21に、図1に示す発行解析部10の構
成を示す。図21において、命令発行解析部10は、ハ
ザード解析部30と、発行禁止部31および発行数計算
部32と、発行禁止信号issue inhibitに
従って有効性信号inst availを制御するゲート
33を含む。
【0078】ハザード解析部30は、命令間のハザード
を解析する。ハザード解析部30には4つの命令命令1
〜命令4が入力される。入力された命令の中でi番目の
命令にハザードがまったくない場合には、i番目の信号
ia(有効性信号)をオンにする。“ハザード”とは、
命令が利用するレジスタの値が確定していない状態を示
す。このハザードの解析は、レジスタファイルのスコア
ボードに従って行なわれる。
【0079】発行禁止部31は、命令1〜命令4を受
け、また、分岐命令が格納されているキューのアドレス
の下位2ビットを無視した信号br blockを生成
する。発行禁止部31はまた、ハザード以外の条件で発
行を禁止すべき命令に対して、その発行を禁止するた
め、対応の発行禁止信号issue inhibitを
オンにする。この発行禁止信号issue inhib
itは、ポインタ制御部12から送出される発行停止信
号issue stopでオンとなるか、または信号N
otTakenがオンである場合の分岐命令以後の命令
に対してはオンとされる。
【0080】ゲート33は、発行禁止部31からの発行
禁止信号issue inhibitを反転するインバ
ータと、このインバータ出力とハザード解析部30から
の信号iaとを受けるAND回路とを含む。このインバ
ータおよびAND回路はそれぞれ各命令に対応して設け
られる。ゲート33から有効性信号inst avai
lが各命令に対応して発生される。すなわち、信号in
st availは、信号iaと信号/issue
nhibitの論理積である。
【0081】発行数計算部32は、このゲート33から
の信号inst availを受け、発行された命令数
を計算し、この発行命令数を示す信号をissue
ountを発生する。
【0082】図22に、図21に示す発行禁止部の論理
図を示す。図22において、各命令1〜命令4に対応し
て、分岐検出回路43が設けられる。分岐検出回路43
は、与えられた命令が、分岐命令であるか否かを検出
し、与えられた命令が分岐命令である場合に、その出力
信号をオン状態とする。
【0083】分岐検出回路43の出力はプライオリティ
エンコーダ44へ与えられる。プライオリティエンコー
ダ44は、最も小さなアドレスの分岐命令の位置を検出
する。プライオリティエンコーダ44からは、この最先
の分岐命令の位置を示す信号(2ビットデータ)が出力
される。プライオリティエンコーダ44の出力は加算器
45へ与えられる。加算器45はこのプライオリティエ
ンコーダ44の出力と読出ポインタscopeとを加算
する。この加算器45の出力はキューにおける分岐命令
のアドレスを示す。加算器45の出力は下位ビットマス
ク回路46へ与えられる。下位ビットマスク回路46
は、この加算器45の出力のうち下位2ビットを切り捨
てることにより、ポインタbr blockを出力す
る。
【0084】各命令に対する発行の禁止を制御するため
に、ORゲートOR1〜OR5およびANDゲートAN
1〜AN3が設けられる。命令1が分岐命令の場合、A
NDゲートAN1〜AN3の一方入力が“H”となる。
このとき、信号NotTakenが“H”となると、命
令2〜命令4に対する発行が禁止されるため、信号is
sue inhibitがオン状態となる。信号Not
Takenがオフであれば、命令2〜命令4に対する発
行禁止信号issue inhibitはオフであり、
命令が発行される。命令2ないし命令4のいずれかが分
岐命令の場合においては、それぞれの出力部における発
行禁止信号issue inhibitの位置が1つず
つずれるだけである。
【0085】実施例2 上述の実施例1においては、命令が命令キュー9にプリ
フェッチされている。以下に、通常の命令レジスタを用
い、命令のプリフェッチを行なわない構成について説明
する。
【0086】図23に、この第2の実施例に用いられる
命令デコードステージの要部の構成を示す。図23にお
いて、命令・デコードステージは、与えられた命令(命
令1〜命令4)を格納する命令レジスタ54と、命令レ
ジスタ54からの命令を受けて分岐命令の検出と分岐発
生および非発生を決定する分岐処理部11と、分岐処理
部11からの信号NotTakenと命令レジスタ54
からの命令とを受け、与えられた命令を発行すべきか否
かを解析する命令発行解析部10を備える。この図23
に示す構成においては命令キューが設けられていないた
め、命令キューのポインタを制御するための構成は設け
られていない。この図23に示す構成において、分岐遅
延スロットの定義は先に述べた実施例1の場合と同じで
ある。
【0087】図24に分岐命令による分岐発生時の命令
レジスタの動きを示す。命令レジスタ54に取り込まれ
た命令のうち、2番目の命令が分岐命令であるとする
(図24(A))分岐処理部11においては、この分岐
命令を実行し、分岐を生じさせることを知り、信号Ta
kenをオンとするとともに、命令メモリに分岐先アド
レスを送出する。命令発行解析部10では、この命令レ
ジスタ54に格納された命令を機能ユニットに発行する
ことができるか否かを解析し、その解析結果に応じて信
号inst availをオンにする。4つの命令が発
行できたとする。
【0088】図24(B)に示す次のサイクルにおいて
は、分岐遅延スロットの命令が命令レジスタ54にフェ
ッチされる。これらは機能ユニットに投入される。
【0089】さらに次のサイクル(図24(C))にお
いては、命令メモリから分岐先命令が与えられるため、
この分岐先命令が命令レジスタ54に格納され、続いて
実行される。
【0090】図24に示す構成のように分岐遅延スロッ
トとして分岐する側の命令を用いることにより、分岐発
生時において信号Takenがオンの場合には、この分
岐による性能低下は生じない。
【0091】図25は、分岐が生じない場合、すなわち
信号NotTakenがオンのときの命令レジスタの動
きを示す図である。以下、図25を参照して、信号No
tTakenがオンのときの命令レジスタの動きを説明
する。
【0092】命令レジスタ54に取り込まれた命令のう
ち、2番目の命令が分岐命令であるとする(図25
(A))分岐処理部11は、この分岐命令を実行し、信
号NotTakenを発生すべき(オンとすべき)こと
を知り、信号NotTakenをオンにして命令発行解
析部10へ知らせる。命令発行解析部10は、分岐命令
以後の命令の発行を無条件に禁止する。
【0093】次のサイクル(図25(B))では、分岐
遅延スロットの命令が命令レジスタ54にフェッチされ
る。このサイクルでは、命令の発行が禁止される。
【0094】さらにその次のサイクル(図25(C))
においては、遅延スロットの次の命令が到達するため、
これらが命令レジスタ54に格納され、続いて実行され
る。
【0095】この図25に示すように、分岐が生じず、
信号NotTakenがオンのときには、1クロックサ
イクル、命令の発行が禁止されるため、性能低下が生じ
る。この分岐が生じないとき(信号NotTakenが
オンのとき)の性能低下を防止する方法として、分岐命
令を次の2種類準備する方法が用いられる。すなわち、 (a) 分岐遅延スロットを分岐する側(分岐先)の命
令で埋める。
【0096】(b) 分岐遅延スロットを分岐しない側
の命令で埋める。 前者の方法(a)は、実施例1および実施例2において
用いられる方法である。後者の方法(b)は、遅延分岐
方式を用いない場合と同様である。すなわち、遅延分岐
方式を利用しない方法である。前者の方法(a)は分岐
するときには性能低下が生じないため、分岐確率の高い
分岐命令に対して採用する。後者の方法(b)は分岐し
ないときに性能低下が生じないため、分岐確率の低い分
岐命令に対して採用する。このとき、IDステージに命
令キューの出力を受ける命令レジスタが設けられてもよ
く、命令キューのみが用いられてもよい。
【0097】図26に、この図23に示す命令発行解析
部10の構成の一例を示す。この図26に示す命令発行
解析部の構成は、図21に示すものと類似している。し
かしながら、発行禁止部31は、信号NotTaken
が与えられるとともに、レジスタ35を介して発行禁止
信号issue stopが与えられる。レジスタ35
は、信号NotTakenを1クロック遅延させる機能
を備える。他の構成は図21に示すものと同様である。
このとき、発行禁止部31へは、命令キューと命令レジ
スタが用いられるため、単に命令1〜命令4のうちの最
先の分岐命令を検出し、その位置を示すためのプライオ
リティエンコーダが用いられており、また下位ビットマ
スクおよび46および加算器45の構成も利用される。
【0098】ここで、発行数計算部32が設けられてお
り、発行命令数issue countが発生される。
命令キューを用いずに、命令メモリから、この発行命令
数に応じたアドレスの命令が取り出される構成が利用さ
れてもよい。またこの命令レジスタを用いる場合、レジ
スタに格納された命令がすべて発行されてから命令メモ
リから次の新たな命令ブロックが取り込まれる構成が用
いられてもよい。
【0099】実施例3 上述の実施例1および実施例2においては、遅延分岐方
式にしたがって分岐命令の処理を行ない、処理の高速化
を図っている。分岐命令の処理の方式として、分岐予測
方式と呼ばれるものがある。この分岐予測方式とは、分
岐命令が存在する場合、予めその分岐方向を予測してお
き、その予測に従って分岐先命令を実行する方式であ
る。この予測分岐方式では、予測が正確であった場合、
分岐先命令をフェッチする時間が節約されるため、性能
低下が軽減される。以下この予測分岐方式に従った構成
について説明する。
【0100】図27に、この第3の実施例に関係する命
令フェッチステージおよび命令デコードステージの構成
を概略的に示す。以下に説明する第3の実施例において
は、機能ユニットとして、4つの整数演算ユニットを考
える。
【0101】命令キュー9は、命令を命令メモリからプ
リフェッチし格納する。命令キュー9は、第1の実施例
の場合と同様、読出ポインタscopeを保持するレジ
スタ14と、書込ポインタqueue topを保持す
るレジスタ15と、命令を格納するキュー13とを備え
る。キュー13は、命令と、該命令のアドレス(命令メ
モリにおけるアドレス)と、予測が行なわれた分岐命令
であることを示すフラグbr inv(このフラグにつ
いては後に説明する)を1エントリとして格納する。
【0102】命令デコーダ66は、命令キュー9から読
出された命令をデコードするとともに、どの命令が発行
可能かを解析する。解析結果は、命令の有効性を示すフ
ラグとして、信号線91上に有効性フラグID ins
availとして出力される。この図27に示す構
成においては、4つの命令が命令キュー9から読出さ
れ、発行解析が命令デコーダ66において行なわれる。
したがって、有効フラグは4ビット設けられており、4
ビットのフラグID inst availに対して、
発行可能な場合、対応のフラグID inst ava
ilがオンにされる。
【0103】命令デコーダ66は、命令のデコードの結
果、すなわち、操作コードを信号線97上へコードID
codeとして出力する。操作コードID code
と命令の有効性フラグinst availは、機能ユ
ニットの中でつねにともに進んでいく。以下、EXC
codeを実行ステージEXCに存在する操作コードを
示し、EXC inst availを実行ステージE
XCの命令の有効性フラグを示すものとする。メモリア
クセスステージMEMについても同様の表わし方を採用
する。命令デコーダ66は、さらに、レジスタ14およ
び15のポインタscopeおよびqueue top
の値を制御する。この制御は、後に説明する。
【0104】図27に示す構成において、命令キュー9
から同時に読出された4命令は命令レジスタ60a〜6
5dそれぞれに格納され、命令デコーダ66へ与えられ
る。各命令レジスタ65a〜65dは、アドレス格納領
域、命令コード格納領域、およびフラグbr invを
格納する領域を備える。
【0105】命令デコーダ66はさらに、プログラムカ
ウンタ12の値を制御する。このプログラムカウンタ1
2から出力されるポインタPCに従って、命令キャッシ
ュ61へのアクセスが行なわれ、命令キャッシュ61か
ら4命令が同時にフェッチされる。
【0106】レジスタファイル69は、データを格納す
るために利用され、命令デコードステージおよび機能ユ
ニットからアクセス可能である。
【0107】このレジスタファイル69におけるレジス
タの状態を監視するためにスコアボード制御回路100
およびスコアボード回路101が設けられる。この制御
回路100およびスコアボード回路101の動作につい
ては後に詳細に説明する。
【0108】分岐命令の実行は次のように行なわれる:
今、一例として、「レジスタR1が0の場合、その分岐
命令のアドレスに5(この“5”のことを分岐オフセッ
トと呼ぶ)を加えたアドレスに分岐する」という分岐命
令を考える。
【0109】(1) 分岐条件のテスト;命令デコーダ
66においては,レジスタファイル69から読出された
レジスタR1の内容が“0”であるかどうかがテストさ
れる。
【0110】(2) 分岐:テストの結果が「偽」の場
合、何も行なわれない。すなわち、分岐は行なわれず、
分岐命令の次の命令が実行されていく。このテストの結
果が「真」の場合、分岐命令のアドレスに5が加えら
れ、この加算結果が次のサイクルに命令フェッチステー
ジ(IFステージ)のプログラムカウンタ12にセット
される。
【0111】以上が一般的な分岐命令の実行である。次
に、予測分岐による分岐命令の実行を説明する。予測分
岐による分岐命令の実行は以下のようにして行なわれ
る。
【0112】(1) 予測分岐を行なうかどうかの決
定。この場合次のような状況を考える: IR1:R1←R2+R3 IR2:IF R1==0 then PC←address+5 IR3:instruction IR4:instruction 上述の命令IR2は、上の例で示された分岐命令であ
る。この分岐命令に必要なレジスタR1は、命令IR1
に含まれる加算命令が完了しないとその値は確定しな
い。このような状態を、命令IR2にはハザードがある
と称す。したがって、従来の分岐命令の実行方式では、
命令IR1の加算が終了するまで命令IR2は待ち合わ
せ状態となる。予測分岐方式によれば、この時点におい
て、分岐命令IR2を予測して分岐をすることに決定す
る。次からのサイクルは、予測分岐に従ってフェッチさ
れた命令の実行が行なわれる。
【0113】この予測分岐による命令の実行を示すため
に、レジスタ63のフラグon predがオンに設定
される。分岐の予測の方法としては種々用いられている
が、たとえば分岐オフセットによる方法を一例として挙
げると、分岐オフセットが正の値の場合には、分岐しな
いと予測し、負のときには分岐すると予測する。
【0114】(2) 分岐:予測が「分岐しない」の場
合、なにも起こらず、分岐命令の次の命令から実行され
る。予測が「分岐する」を示す場合、分岐命令のアドレ
スに5を加えて、それを次のサイクルに命令フェッチス
テージIFのプログラムカウンタ12にセットする。
【0115】(3) フラグbr invのセット:分
岐命令IR2が格納されいてた命令キュー9のエントリ
のフラグbr invを、次のサイクルにオンに設定す
る。このために、分岐アドレスレジスタ85およびフラ
グ書込回路86が設けられる。分岐アドレスレジスタ8
5は、キュー13における分岐命令のアドレスbr
ddを格納する。書込回路86は、このキュー13にお
けるアドレスbr addが指定するアドレスのフラグ
br invをオンに設定する。キュー13は、4命令の
同時書込および読出が実行される。したがって、1ビッ
トのフラグbr invのみをオンまたはオフとするた
めに、別の書込系路が設けられてもよい。このとき、書
込回路86においてはアドレスbr addに従って、
対応のフラグのみを1とし、残りのフラグを0とし、4
ビットのフラグbr invを同時に書込む構成が用い
られてもよい。
【0116】上述のように、第3の実施例における予測
分岐方式によれば上述のステップ(1)ないし(3)が
実行される。次に、予測分岐実行後の命令の実行につい
て説明する。予測分岐実行後に実行される命令は、予測
に基づいているため、いくつかの機構が必要とされる。
【0117】(1) 予測フラグinst perdの
セット:予測分岐された分岐命令以後の命令であること
を示すために、機能ユニットに発行する命令に対して
は、予測分岐された命令であることを示すフラグins
predを設け、命令デコーダ66から信号線98
へ送出する。このフラグinst predは、機能ユニ
ットのパイプラインを操作コードとともに進行する。命
令デコーダ66は、フラグon predがオンのとき
には、フラグID inst predをオンに設定す
る。
【0118】(2) 予測分岐命令の不実行:予測分岐
をすでに行なった分岐命令は、再び命令キュー9から読
出されて命令レジスタ65へ格納されたとしても、すで
にその実行は終了しているため実行してはならない。こ
のため、命令デコーダ66においてはこの予測分岐が行
なわれた分岐命令は“NOP命令”として扱われる。す
なわち、読出された命令のフラグbr invがオンの
命令はNOP命令とみなされる。
【0119】(3) 予測分岐命令の成分:予測分岐を
すでに行なった分岐命令のハザードが解消しておらず、
さらに分岐命令の後方の(アドレスの大きい)命令を発
行する場合、後に、分岐命令のハザードが解消したとき
に分岐方向が決定可能なように、分岐命令をセーブす
る。このため、分岐命令は制御回路62に命令bl
aveとして格納される。この制御回路62は、予測分
岐が行なわれた分岐命令を格納するとともに、デコーダ
66と同様、分岐のテストおよび判定機能を備える。た
とえば分岐命令がレジスタファイル69におけるレジス
タR5の値が0のときに分岐すべきことを示している場
合、この制御回路62は、分岐命令を命令をbr se
aveとして格納するとともに、レジスタファイル69
におけるレジスタR5のデータを観察し、このレジスタ
R5の値が確定した場合に、レジスタR5の値を用いて
この分岐命令のテストを行なう。
【0120】(4) 予測決定された分岐方向の決定と
パイプラインのキャンセル:予測分岐を行なった分岐命
令のハザードが解消された場合、分岐方向を決定するこ
とができる。その分岐方向と予測で行なった分岐とが一
致するかしないかで行なわれる制御が異なる。
【0121】(a) 予測が当たった場合:この場合、
命令デコーダ66は、分岐予測が当たったことを示す信
号pred hitを機能ユニットへ出力する。機能ユニ
ットの各パイプラインステージでは、各ステージのフラ
グinst predをオフにする。
【0122】(b) 予測が外れた場合:この場合、命
令デコーダ66は、分岐予測が外れたことを示す信号p
red misを各機能ユニットに出力する。機能ユニッ
トの各パイプライン・ステージにおいては、フラグin
st predがオンである命令を無効にする。すなわ
ち、フラグinst availをオフにする。ここ
で、フラグinst availをオフにすることによ
り、ライトバックステージWBにおいて、命令のレジス
タファイルへの書込が禁止される。また、データメモリ
へデータをストアする命令においては、このメモリアク
セスステージにおけるデータメモリへのデータのストア
動作が禁止される。
【0123】以上を論理式で書くと、実行ステージEX
Cからの有効性フラグ出力EXC inst avain
out、実行ステージEXCからの予測分岐実行フラ
グ出力EXC pred inst outは、 EXC inst avain out=(/EXC inst pred+ EXC inst pred*(pred hit+/pred hit*/p red mis))*EXC inst avail EXC inst pred out=EXC inst pred*/pr ed*/pred hit となる。この上式を実現する回路構成の論理図を図28
に示す。ここに図28に示す構成においては、実行ステ
ージEXCからメモリアクセスステージMEMへ命令が
伝達されるときに各フラグの値を制御する構成が示され
る。この実行ステージEXCにおいて破線で示すブロッ
クはメモリアクセスステージMEMにおいても同様の構
成が利用される。各回路の構成においては、上述の論理
式において演算“+”がOR回路で実現され、演算
“*”がANDゲートで表現され、演算“/”がインバ
ータで表現されている。
【0124】この図28に示す構成に代えて、図29に
示すように、信号pred misおよびpred
itを各ステージに共通に走らせ、各ステージにおける
ラッチ回路のリセット(フラグの無効化)が実行される
ように構成されてもよい。
【0125】ここで図29において符号LAはクロック
信号に応答して与えられた信号をラッチするラッチ回路
を示す。
【0126】分岐方向が決定された場合、フラグon
predがオフとされ、分岐予測実行が終了したことを
示す。
【0127】上述の説明においては、通常の分岐命令に
対する予測分岐について考えてきた。分岐命令の中に
は、リンクという特殊な動作を合わせて機能として備え
る命令がある。ここではこの命令をjal命令と呼ぶ。
jal命令は、jal targetと記述される。
このjal命令は、無条件に分岐先アドレスtarge
tをプログラムカウンタ62にセットしてジャンプする
とともに、特定のレジスタに自身のアドレスを書込む。
【0128】jal命令は、これまで説明してきた分岐
を行なう機能の他に、レジスタの内容を書換えるという
機能をもつ。予測分岐では、ある命令自身より前方の命
令が発行できない場合でも、その命令自身は実行され
る。jal命令で同様なことを行なうとすれば、レジス
タ書換えが、前方の命令の実行が終了していないため
に、実行されることになる。このようなレジスタの書換
え順序が入れ換わることは、割り込み処理を極めて難し
くすることになり、好ましくない。そこで、jal命令
の場合、予測分岐実行において、プログラムカウンタ6
2のポインタPCの値の書換えのみを実行する。リンク
の操作は、命令jalの前方の命令がすべて発行された
時点で発行することとする。すなわち、jal命令は、
分岐予測で分岐を行なうことはできるが、その分岐実行
時にはリンクは行なわない。フラグbr invがオン
であるjal命令は、分岐を行なわないが、前方の命令
がすべて発行されてハザードがなくなった時点でリンク
の操作を発行する。
【0129】次に、この予測分岐方式を実施するための
スコアボーディングについて説明する。次のような命令
の順を考える: IR1:R1←M(R2) IR2:R3←R1+R4 命令IR1は、レジスタR2の内容をアドレスとしてデ
ータメモリをアクセスし、そのアクセスされたデータメ
モリのデータをレジスタR1に格納する命令である。命
令IR2は、レジスタR1とレジスタR4の内容を加算
し、該加算結果をレジスタR3に書込む命令である。2
番目の命令IR2は、1番目の命令IR1の結果R1を
利用する。したがって、1番目の命令IR1のデータメ
モリの読出動作が終了しないと2番目の命令IR2は発
行することができない。そこで、命令レジスタR1の内
容が確定していないことを示し、このレジスタR1を不
正に他の命令が使用しないように制御する機構が必要と
される。
【0130】レジスタファイル69は32ワード構成と
するとき、各ワードに対しフラグを設ける。このフラグ
がオンのときには対応のレジスタの内容が確定していな
いことを表わす。このフラグをスコアボードと呼ぶ。こ
のスコアボードをRF lkf<31:0>と表わす。
【0131】上述の命令IR1,IR2においては、1
番目の命令IR1は発行される際にレジスタR1を書換
える予定にしている。このとき、RF lkf<1>を
オンに設定する。データメモリからデータが読出されれ
ばフラグRF lkf<1>をオフにする。
【0132】さらに、この実施例においては、フラグR
lkfの加えて、スコアボードをオンした命令が分
岐予測中の命令であることを示すフラグRF lkf
pred<31:0>を設ける。
【0133】スコアボード(図27の参照番号101)
を用いてレジスタの内容の確定を待つ制御を行なう命令
を、ここでは、データメモリをアクセスするロードメモ
リだけであるとする。この場合、スコアボード回路10
1においては、ロード命令が発行されるときに、書込レ
ジスタに対応するフラグRF lkfのビットがオンに
される。もし、このロード命令の発行が予測分岐後の実
行であれば(フラグon predがオン)、書込レジ
スタに対応するフラグRF lkf predがオンに
される。
【0134】分岐予測が当たったことがわかった場合に
は、フラグRF lkf predをすべてオフにす
る。
【0135】分岐予測がはずれたことがわかった場合に
は、フラグRF lkf predがオンのビットに対
応するフラグRF lkfをオフにする。さらに、フラ
グRF lkf predをすべてオフにする。
【0136】このスコアボードを制御するためのスコア
ボード制御回路101の論理回路を次に説明する。命令
デコーダ66は、ロード命令を発行した場合、信号is
sue loadをオンとする。また、ロード/ストア
ユニットのメモリアクセスステージMEMは、データを
データキャッシュ(データメモリ)から読むことができ
た場合、信号MEM loadcompleteをオン
とする。また、スコアボードRF lkfの各ビットに
は、書込イネーブル信号RF lkf we<31:0
>が設けられる。この書込イネーブル信号がオンのとき
のみ対応のレジスタへの書込が生じるものとする。同様
に、フラグRF lkf predには、対しては、書
込イネーブル信号RF lkf pred we<3
1:0>を同様に設ける。さらに、信号RF lkf
pred resetがオンすれば、予測用スコアボー
ドRF lkf predのすべてのフラグがオフとさ
れる。
【0137】上述の論理の場合、スコアボードRF
kfおよびRF lkf predの制御は図30に示
す真理値表で表現することができる。この図30に示す
真理値表を論理回路で示すと図32に示す回路構成が得
られる。図31に示す構成においては、1つのレジスタ
ファイルに対応する制御部のみが代表的に示される。デ
コーダ140は、書込レジスタ番号(5ビット)をデコ
ードし、出力信号線(各書込レジスタ対応に設けられて
おり、32本の出力信号線)の1本を選択状態にする。
このデコード140の出力は信号issue loadと
論理積がとられる。レジスタ141および142は、そ
れぞれ書込イネーブル信号RF lkf we<i>お
よびRF lkf pred we<i>に応答してデ
ータの書込が行なわれる。このレジスタ141および1
42の出力は命令デコーダ166へ伝達される。
【0138】図32に、命令デコーダ66の機能的構成
を示す。図32においては、命令デコード回路160
は、4命令,命令#1〜命令#4をデコードし、操作コ
ードID codeを発行する。発行解析部161は、
命令#1〜命令#4を受けかつフラグbr invを受
け、発行可能か否かを解析するとともに発行可能フラグ
ID inst availを発行する。
【0139】分岐処理部164は、命令#1〜命令#4
を受け、分岐命令を検出し、分岐命令を実行するととも
にそのサイクルで実行不可能な場合には、予測分岐実行
中を示すフラグpr exを発生する。分岐処理部16
4はまた、分岐命令実行完了時に分岐の発生/非発生を
示す信号TakenおよびNotTakenを発生す
る。
【0140】レジスタ163は、分岐処理部164から
の信号pr exを受け、フラグon predとして
格納する。
【0141】予測フラグ生成回路162は、フラグbr
invと、分岐処理部164からの信号Taken、
NotTakenと、フラグon predを受け、予
測フラグID inst predを生成する。発行解
析部161へは、また分岐処理部164からの信号Ta
ken,NotTakenが与えられる。
【0142】なお上述の実施例において同時にフェッチ
される命令数が4であり、また同時に解析を受ける命令
数が4とされたがこの命令数は4に限定されず、他の命
令数であってもよい。
【0143】「まとめ」 第1の発明の特徴を別記すると以下のようになる。
【0144】(1) 分岐命令を含む複数の命令のう
ち、分岐命令より1つ後のアドレスの命令から、分岐命
令がフェッチされて実行されるまでに必要とされるサイ
クルの間にフェッチされた最後の命令までを分岐遅延ス
ロットとする。
【0145】(2) 分岐遅延スロットを、この分岐遅
延スロットに関する分岐命令が分岐したときに実行され
る分岐先アドレスの命令から、次に実行される分岐命令
より1つ前方のアドレスの命令の中の命令で埋める。
【0146】(3) 命令メモリから命令をプリフェッ
チしてキューメモリへ格納し、分岐命令が実行されたサ
イクルにおいて、この分岐命令の分岐遅延スロットがす
でにキューメモリに格納されているかどうかを判別し、
この判別結果と、キューメモリの書込アドレスおよび読
出アドレスと、分岐命令の実行結果得られる分岐するか
しないかに関する情報とに従って、このキューメモリの
書込アドレスおよび読出アドレスを制御する。
【0147】(4) 分岐命令が実行され、その結果分
岐することが決定した場合、分岐命令の分岐遅延スロッ
トの命令がすべてまだキューメモリに格納されていない
場合には、キューの書込アドレスを現在の値に、フェッ
チされた命令数を加えたアドレスに設定する。
【0148】(5) 分岐命令が実行され、その結果分
岐することが決定された場合、分岐命令の分岐遅延のス
ロットの命令のすべてがキューメモリに格納されていた
場合には、キューメモリの書込アドレスを、分岐遅延ス
ロットの最後のアドレスの命令が格納されているキュー
アドレスの次のアドレスに設定する。
【0149】(6) 分岐命令が実行され、その結果分
岐することが決定した場合、キューメモリの読出アドレ
スを、機能ユニットに発行された命令の数だけ増加させ
る。
【0150】(7) 分岐命令が実行され、その結果分
岐しないことが決定した場合、分岐命令より後方の命令
で、機能ユニットに発行されようとしていた命令の発行
を停止する。
【0151】(8) 分岐命令が実行され、その結果分
岐しないことが決定した場合、キューのメモリの読出ア
ドレスを、分岐遅延スロットの最後のアドレスの命令が
格納されたまたは格納される予定であるキューメモリの
アドレスの次のアドレスに設定する。
【0152】(9) 分岐命令が実行されて、その結果
分岐しないことが決定した場合、分岐命令の分岐遅延ス
ロット命令のすべてがまだキューメモリに格納されてい
ない場合、分岐遅延スロットの命令のすべてがキューに
格納されるまで命令の発行を停止する。
【0153】第2の発明の特徴を列挙すると以下のごと
くなる。命令メモリから複数の命令をプリフェッチし、
プリフェッチされた命令を格納するキューメモリを設け
る。このキューメモリは複数のエントリを備え、各エン
トリに1つの命令が格納される。このエントリには、格
納されている命令がすでに分岐予測に従って実行された
ことを示すフィールドを備える。
【0154】(2) この予測に従って実行されたこと
を表わすフィールドの値に従って、その対応のエントリ
に格納されている命令の実行を行なわないように制御す
る。
【0155】(3) 戻り先アドレスをレジスタファイ
ルのレジスタに格納することと分岐を行なうこととを同
時に行なう命令を予測分岐に従って実行する場合、分岐
のみを行ない、戻り先アドレスをレジスタに格納するこ
とはこの命令が実行可能となったときに実行する。
【0156】(4) 機能ユニット(パイプライン)内
の命令は、その命令が予測分岐を行なった後から、その
予測の正否が決定される前の期間に発行されている命令
であることを示す第1のフラグ(inst pred)
およびその命令が有効であることを示す第2のフラグ
(inst avail)を備える。分岐予測が正しい
と判明したときには第1のフラグ(inst pre
d)がオフとされ、予測が正しくないと判明したときに
第1のフラグがオンである命令の第2のフラグがオフと
されるとともにさらに第1のフラグがオフとされる。
【0157】(5) レジスタファイル(汎用レジス
タ)に対しては、レジスタに書込が生じることを示す第
3のフラグ(RF lkf)と、このフラグを制御した
命令が予測分岐を行なった後からその予測の正否が決定
される前の期間に発行された命令であることを示す第4
のフラグ(RF lkf pred)を設ける。予測が
正しいと判断したときにはすべての汎用レジスタの第4
のフラグがリセットされる。予測が正しくないと判明し
たときには第4のフラグがオンであるレジスタの第3の
フラグがオフとされる。
【0158】
【発明の効果】第1の発明によれば、分岐命令にかかる
遅延分岐スロットを分岐する側の命令で埋めるように構
成したために、分岐の発生の有無にかかわらず、分岐命
令実行による性能低下を防止することができる。
【0159】さらに、命令メモリから命令をプリフェッ
チしてキューメモリに格納し、分岐命令が実行された際
キューへの書込ポインタと読出ポインタとがつねにパイ
プラインに空きが生じないように制御されることによ
り、効率的にかつ確実に分岐命令実行に伴う性能低下を
防止することができる。
【0160】さらに、命令をプリフェッチしない構成の
場合においても、分岐命令による分岐が生じる場合にお
いて、分岐先の命令で分岐遅延スロットを埋めることに
より、分岐命令による性能低下を防止することができ
る。
【0161】第2の発明によれば、分岐命令はハザード
が解消する前に分岐予測に従って実行される。したがっ
て、分岐の場合には、従来必要とされた分岐先命令が命
令キャッシュから到達するのを待つサイクルが不必要と
され、予測に従って先に分岐先命令がフェッチされるた
め、分岐先命令が命令キャッシュから到達するのを待つ
サイクルが不必要となり、パイプラインに空きが生じる
ことがなくなる。これにより、分岐命令による並列演算
処理装置の性能低下を防止することができる。
【図面の簡単な説明】
【図1】第1の発明の一実施例である命令デコード・ス
テージの構成を示すブロック図である。
【図2】従来の分岐遅延の動作を説明するための図であ
る。
【図3】分岐遅延スロットを命令により埋める態様を説
明するための図である。
【図4】スーパースカラーの一般的な構成を示す図であ
る。
【図5】スーパースカラーにおける分岐遅延動作を説明
するための図である。
【図6】図1に示す命令キューの基本動作を示す図であ
る。
【図7】分岐遅延スロットの定義を説明するための図で
ある。
【図8】分岐命令による分岐発生が生じる場合、分岐遅
延スロットがまだフェッチされていない場合の命令キュ
ーの動きを示す図である。
【図9】図8に示す命令キューの次のサイクルの状態を
示す図である。
【図10】図9に示す命令キューの次のサイクルの状態
を示す図である。
【図11】分岐命令が分岐を生じる場合、分岐遅延スロ
ットがすでにフェッチされている場合の命令キューの動
きを示す図である。
【図12】分岐命令による分岐が生じるときに、分岐遅
延スロットがすでにフェッチされている場合の命令キュ
ーの動きを示す図である。
【図13】分岐命令による分岐が発生する場合、分岐遅
延スロットがすでにフェッチされている場合の命令キュ
ーの動きを示す図である。
【図14】分岐命令による分岐が生じない場合、分岐遅
延スロットはすでにフェッチされている場合の命令キュ
ーの動きを示す図である。
【図15】分岐命令による分岐が発生しない場合、分岐
遅延スロットかまだフェッチされていない場合の命令キ
ューの動きを示す図である。
【図16】分岐命令による分岐が発生しない場合に、分
岐遅延スロットがまだフェッチされていない場合の命令
キューの動きを示す図である。
【図17】分岐命令による分岐が発生しない場合、分岐
遅延スロットがすでにフェッチされている場合の命令キ
ューの動きを示す図である。
【図18】分岐命令による分岐が発生しない場合、分岐
遅延スロットがすでにフェッチされいる場合の命令キュ
ーの動きを示す図である。
【図19】図1に示すポインタ制御部の論理を一覧にし
て示す図である。
【図20】図1に示すポインタ制御部の構成を示す論理
図である。
【図21】第1の発明の第1の実施例における命令発行
解析部の構成を示すブロック図である。
【図22】図21に示す発行禁止部の構成を示す論理図
である。
【図23】第1の発明における第2の実施例において用
いられる命令デコード装置の構成を示すブロック図であ
る。
【図24】図23に示す命令デコードステージの構成に
おいて、分岐命令による分岐が発生する場合における命
令レジスタの動きを示す図である。
【図25】分岐命令による分岐が発生しない場合におけ
る図23に示す命令レジスタの動きを示す図である。
【図26】図23に示す命令発行解析部の構成を示すブ
ロック図である。
【図27】第2の発明において用いられる命令フェッチ
ステージおよび命令デコードステージの構成を示すブロ
ック図である。
【図28】実行ステージEXCにおける命令有効フラグ
および分岐予測フラグおよび分岐の正否に従って制御す
るための構成を示す図である。
【図29】図28に示す構成を一般的に概念的に示す図
である。
【図30】レジスタファイルの内容の確定を監視するた
めのスコアボードの制御信号の真理値を一覧にして示す
図である。
【図31】図30に示す真理値表を実現する論理回路の
構成を示す図である。
【図32】図27に示す命令デコーダの構成を示す図で
ある。
【符号の説明】
1 命令メモリ 2 命令フェッチステージ(IFステージ) 3 命令デコードステージ(IDステージ) 4 整数演算ユニット 6 ロード/ストアを実行するユニット 7 浮動少数点ユニット 8 データメモリ 9 命令キュー 10 命令発行解析部 11 分岐処理部 12 ポインタ制御部 13 キュー 14 キューの読出アドレスを保持するレジスタ 15 キューの書込アドレスを保持するレジスタ 16 加算器 17 セレクタ 18 比較器 30 ハザード解析部 31 発行禁止部 32 発行数計算部 43 分岐命令検出回路 45 加算器 46 下位ビットマスク回路 54 命令レジスタ 66 命令デコーダ 69 レジスタファイル 100 スコアボード制御回路 101 スコアボード回路 85 命令レジスタ 62 分岐命令格納回路 63 予測実行状態記憶用レジスタ 69 レジスタファイル 140 デコーダ 141 スコアボードのビット 142 スコアボードの予測分岐後の命令であることを
示すフラグを格納するレジスタ

Claims (2)

    【特許請求の範囲】
  1. 【請求項1】 複数の機能ユニットと命令メモリとを備
    え、前記命令メモリから複数の命令を同時にフェッチ
    し、該フェッチされた命令から同時に実行可能な命令を
    検出し、検出された同時実行可能な命令を関連の機能ユ
    ニットへ発行する並列演算処理装置において、 分岐命令を含む複数の命令のうち、前記分岐命令の次の
    位置の命令から、前記分岐命令のフェッチおよび実行ま
    でに必要とされるサイクルの間にフェッチされた命令を
    すべて分岐遅延スロットとして用いるようにしたことを
    特徴とする、並列演算処理装置における分岐命令処理方
    式。
  2. 【請求項2】 複数の機能ユニットと命令メモリとを備
    え、前記命令メモリから複数の命令を同時にフェッチ
    し、フェッチされた命令から同時に実行可能な命令を検
    出し、該検出された同時実行可能な命令を各関連の機能
    ユニットへ発行する並列演算処理装置における、分岐命
    令が含まれるとき、その分岐命令の分岐方向を予測して
    命令を実行する分岐命令処理方式において、 前記命令メモリからフェッチされた命令をプリフェッチ
    して格納するための命令プリフェッチ用キューメモリ手
    段を設け、かつ前記キューメモリ手段の各エントリに、
    そこに格納された命令が分岐予測に従って実行されたこ
    とを示すためのフィールドを設け、このフィールドの値
    に従って対応の命令の実行および実行禁止を制御するよ
    うにしたことを特徴とする、並列演算処理装置における
    分岐命令処理方式。
JP17220391A 1991-07-12 1991-07-12 並列演算処理装置 Expired - Fee Related JP2875909B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP17220391A JP2875909B2 (ja) 1991-07-12 1991-07-12 並列演算処理装置
DE4244924A DE4244924C2 (de) 1991-07-12 1992-07-10 Parallelverarbeitungseinheit und Verfahren dafür
DE19924222776 DE4222776C2 (de) 1991-07-12 1992-07-10 Parallelverarbeitungseinheit und Verfahren zum Ausführen von Befehlen
US08/594,358 US5809294A (en) 1991-07-12 1996-01-30 Parallel processing unit which processes branch instructions without decreased performance when a branch is taken

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP17220391A JP2875909B2 (ja) 1991-07-12 1991-07-12 並列演算処理装置

Publications (2)

Publication Number Publication Date
JPH0520067A true JPH0520067A (ja) 1993-01-29
JP2875909B2 JP2875909B2 (ja) 1999-03-31

Family

ID=15937500

Family Applications (1)

Application Number Title Priority Date Filing Date
JP17220391A Expired - Fee Related JP2875909B2 (ja) 1991-07-12 1991-07-12 並列演算処理装置

Country Status (3)

Country Link
US (1) US5809294A (ja)
JP (1) JP2875909B2 (ja)
DE (1) DE4222776C2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6182211B1 (en) 1997-07-02 2001-01-30 Matsushita Electric Industrial Co., Ltd. Conditional branch control method
JP2006525583A (ja) * 2003-04-29 2006-11-09 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 時間−静止型プロセッサにおけるゼロ−オーバヘッドのブランチング及びルーピング
JP2012059163A (ja) * 2010-09-13 2012-03-22 Sony Corp プロセッサ

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3494489B2 (ja) * 1994-11-30 2004-02-09 株式会社ルネサステクノロジ 命令処理装置
US5752259A (en) * 1996-03-26 1998-05-12 Advanced Micro Devices, Inc. Instruction cache configured to provide instructions to a microprocessor having a clock cycle time less than a cache access time of said instruction cache
US5864703A (en) * 1997-10-09 1999-01-26 Mips Technologies, Inc. Method for providing extended precision in SIMD vector arithmetic operations
US7197625B1 (en) * 1997-10-09 2007-03-27 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US6256728B1 (en) * 1997-11-17 2001-07-03 Advanced Micro Devices, Inc. Processor configured to selectively cancel instructions from its pipeline responsive to a predicted-taken short forward branch instruction
EP0936539B1 (de) 1998-02-12 2012-10-31 Infineon Technologies AG Vorrichtung und Verfahren zum Holen von Befehlen für eine programmgesteuerte Einheit
US6026488A (en) * 1998-02-20 2000-02-15 International Business Machines Corporation Method for conditional hedge fetching into cache storage
US6035392A (en) * 1998-02-20 2000-03-07 International Business Machines Corporation Computer with optimizing hardware for conditional hedge fetching into cache storage
US6115808A (en) * 1998-12-30 2000-09-05 Intel Corporation Method and apparatus for performing predicate hazard detection
US6732259B1 (en) 1999-07-30 2004-05-04 Mips Technologies, Inc. Processor having a conditional branch extension of an instruction set architecture
US7242414B1 (en) 1999-07-30 2007-07-10 Mips Technologies, Inc. Processor having a compare extension of an instruction set architecture
US6912559B1 (en) 1999-07-30 2005-06-28 Mips Technologies, Inc. System and method for improving the accuracy of reciprocal square root operations performed by a floating-point unit
US6697832B1 (en) 1999-07-30 2004-02-24 Mips Technologies, Inc. Floating-point processor with improved intermediate result handling
US7346643B1 (en) * 1999-07-30 2008-03-18 Mips Technologies, Inc. Processor with improved accuracy for multiply-add operations
US6714197B1 (en) 1999-07-30 2004-03-30 Mips Technologies, Inc. Processor having an arithmetic extension of an instruction set architecture
US6631392B1 (en) 1999-07-30 2003-10-07 Mips Technologies, Inc. Method and apparatus for predicting floating-point exceptions
KR100336773B1 (ko) * 1999-11-12 2002-05-16 박종섭 지연 분기 구조를 갖는 자바 프로세서
US6996596B1 (en) 2000-05-23 2006-02-07 Mips Technologies, Inc. Floating-point processor with operating mode having improved accuracy and high performance
US6859875B1 (en) * 2000-06-12 2005-02-22 Freescale Semiconductor, Inc. Processor having selective branch prediction
US7599981B2 (en) 2001-02-21 2009-10-06 Mips Technologies, Inc. Binary polynomial multiplier
US7162621B2 (en) 2001-02-21 2007-01-09 Mips Technologies, Inc. Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration
US7711763B2 (en) 2001-02-21 2010-05-04 Mips Technologies, Inc. Microprocessor instructions for performing polynomial arithmetic operations
US7181484B2 (en) * 2001-02-21 2007-02-20 Mips Technologies, Inc. Extended-precision accumulation of multiplier output
JP2003186938A (ja) * 2001-12-19 2003-07-04 Canon Inc スコアボードを用いた検証方法
US7000091B2 (en) * 2002-08-08 2006-02-14 Hewlett-Packard Development Company, L.P. System and method for independent branching in systems with plural processing elements
US7000095B2 (en) * 2002-09-06 2006-02-14 Mips Technologies, Inc. Method and apparatus for clearing hazards using jump instructions
US7861063B1 (en) * 2004-06-30 2010-12-28 Oracle America, Inc. Delay slot handling in a processor
US8959500B2 (en) * 2006-12-11 2015-02-17 Nytell Software LLC Pipelined processor and compiler/scheduler for variable number branch delay slots
US8275978B1 (en) * 2008-07-29 2012-09-25 Marvell International Ltd. Execution of conditional branch instruction specifying branch point operand to be stored in jump stack with branch destination for jumping to upon matching program counter value
US9229722B2 (en) 2012-01-31 2016-01-05 International Business Machines Corporation Major branch instructions with transactional memory
US9280398B2 (en) 2012-01-31 2016-03-08 International Business Machines Corporation Major branch instructions
US9817666B2 (en) * 2013-03-15 2017-11-14 Intel Corporation Method for a delayed branch implementation by using a front end track table

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS56129950A (en) * 1980-03-07 1981-10-12 Hitachi Ltd Information processor
JPS60107141A (ja) * 1983-11-16 1985-06-12 Fujitsu Ltd プランチ制御方式
JPS60168238A (ja) * 1984-02-10 1985-08-31 Hitachi Ltd パイプラインデータ処理装置
US4755966A (en) * 1985-06-28 1988-07-05 Hewlett-Packard Company Bidirectional branch prediction and optimization
EP0239081B1 (en) * 1986-03-26 1995-09-06 Hitachi, Ltd. Pipelined data processor capable of decoding and executing plural instructions in parallel
US5440704A (en) * 1986-08-26 1995-08-08 Mitsubishi Denki Kabushiki Kaisha Data processor having branch predicting function
US4833599A (en) * 1987-04-20 1989-05-23 Multiflow Computer, Inc. Hierarchical priority branch handling for parallel execution in a parallel processor
JPH01269131A (ja) * 1988-04-20 1989-10-26 Hitachi Ltd 命令先行制御方式
US5050068A (en) * 1988-10-03 1991-09-17 Duke University Method and apparatus for using extracted program flow information to prepare for execution multiple instruction streams
JP2810068B2 (ja) * 1988-11-11 1998-10-15 株式会社日立製作所 プロセッサシステム、コンピュータシステム及び命令処理方法
US5125083A (en) * 1989-02-03 1992-06-23 Digital Equipment Corporation Method and apparatus for resolving a variable number of potential memory access conflicts in a pipelined computer system
JPH02306341A (ja) * 1989-02-03 1990-12-19 Nec Corp マイクロプロセッサ
US5136697A (en) * 1989-06-06 1992-08-04 Advanced Micro Devices, Inc. System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache
EP0450658B1 (en) * 1990-04-06 2001-08-01 Nec Corporation Parallel pipelined instruction processing system for very long instruction word
DE69130138T2 (de) * 1990-06-29 1999-05-06 Digital Equipment Corp Sprungvorhersageeinheit für hochleistungsfähigen Prozessor
US5261063A (en) * 1990-12-07 1993-11-09 Ibm Corp. Pipeline apparatus having pipeline mode eecuting instructions from plural programs and parallel mode executing instructions from one of the plural programs
US5265213A (en) * 1990-12-10 1993-11-23 Intel Corporation Pipeline system for executing predicted branch target instruction in a cycle concurrently with the execution of branch instruction
US5287467A (en) * 1991-04-18 1994-02-15 International Business Machines Corporation Pipeline for removing and concurrently executing two or more branch instructions in synchronization with other instructions executing in the execution unit

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6182211B1 (en) 1997-07-02 2001-01-30 Matsushita Electric Industrial Co., Ltd. Conditional branch control method
JP2006525583A (ja) * 2003-04-29 2006-11-09 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 時間−静止型プロセッサにおけるゼロ−オーバヘッドのブランチング及びルーピング
JP2012059163A (ja) * 2010-09-13 2012-03-22 Sony Corp プロセッサ
US11200059B2 (en) 2010-09-13 2021-12-14 Sony Corporation Processor with a program counter increment based on decoding of predecode bits

Also Published As

Publication number Publication date
DE4222776C2 (de) 1998-12-03
DE4222776A1 (de) 1993-01-21
JP2875909B2 (ja) 1999-03-31
US5809294A (en) 1998-09-15

Similar Documents

Publication Publication Date Title
JP2875909B2 (ja) 並列演算処理装置
US6151672A (en) Methods and apparatus for reducing interference in a branch history table of a microprocessor
US5903750A (en) Dynamic branch prediction for branch instructions with multiple targets
US6170054B1 (en) Method and apparatus for predicting target addresses for return from subroutine instructions utilizing a return address cache
US8943300B2 (en) Method and apparatus for generating return address predictions for implicit and explicit subroutine calls using predecode information
US7444501B2 (en) Methods and apparatus for recognizing a subroutine call
JP2004533695A (ja) 分岐目標を予測する方法、プロセッサ、及びコンパイラ
EP2368180B1 (en) Method and apparatus for performing jump operations in a digital processor
US20040117606A1 (en) Method and apparatus for dynamically conditioning statically produced load speculation and prefetches using runtime information
JP4134179B2 (ja) ソフトウエアによる動的予測方法および装置
US7571305B2 (en) Reusing a buffer memory as a microcache for program instructions of a detected program loop
US6243805B1 (en) Programming paradigm and microprocessor architecture for exact branch targeting
US7603545B2 (en) Instruction control method and processor to process instructions by out-of-order processing using delay instructions for branching
US9542190B2 (en) Processor with fetch control for stoppage
CN113918225A (zh) 指令预测方法、指令数据处理装置、处理器以及存储介质
US20070043930A1 (en) Performance of a data processing apparatus
US6952763B1 (en) Write before read interlock for recovery unit operands
CN110515660B (zh) 一种加速原子指令执行的方法和装置
WO2023185993A1 (en) Systems and methods for load-dependent-branch pre-resolution
JPH06131180A (ja) 命令処理方式および命令処理装置
JPH0773034A (ja) 情報処理装置
JP2503223B2 (ja) 先行制御方式
JP3446658B2 (ja) プロセッサ及びその性能評価方法
JPH07122852B2 (ja) パイプライン情報処理装置
JPH03291724A (ja) マイクロプログラム制御方式

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 19990105

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees