JP2005107666A - データ処理装置 - Google Patents

データ処理装置 Download PDF

Info

Publication number
JP2005107666A
JP2005107666A JP2003337685A JP2003337685A JP2005107666A JP 2005107666 A JP2005107666 A JP 2005107666A JP 2003337685 A JP2003337685 A JP 2003337685A JP 2003337685 A JP2003337685 A JP 2003337685A JP 2005107666 A JP2005107666 A JP 2005107666A
Authority
JP
Japan
Prior art keywords
instruction
branch
unit
buffer
data processing
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
JP2003337685A
Other languages
English (en)
Inventor
Masahide Kaketa
雅英 掛田
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.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co 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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP2003337685A priority Critical patent/JP2005107666A/ja
Publication of JP2005107666A publication Critical patent/JP2005107666A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Advance Control (AREA)

Abstract

【課題】与えられた命令をパイプライン処理するデータ処理装置について、分岐命令流の命令列退避用の専用バッファなどを設けることなく、分岐ペナルティを軽減する。
【解決手段】命令バッファ部(11)は、分岐命令検出部(12)によって分岐命令が検出され、かつ、分岐予測部(16)によって当該分岐命令によって分岐が生じることが予測されているとき、先読みして格納している命令列を所定領域に退避させ、当該命令列を格納していた領域に当該分岐命令の分岐先の命令を先読みして格納する。一方、当該分岐命令について分岐予測部(16)による分岐予測と分岐判定部(17)による分岐判定結果とが異なるとき、命令バッファ部(11)は、退避させた命令列の中から命令を出力し、残りの命令を元の領域に戻す。
【選択図】図1

Description

本発明は、与えられた命令をパイプライン処理するデータ処理装置に関し、特に、可変語長命令を処理可能なパイプラインプロセッサや、高速化を目的としたスーパーパイプラインプロセッサなどに好適な、分岐ペナルティ軽減の技術に関する。
プロセッサの性能を決定する重要な要素として、CPI(Clock Per Instruction)値および動作周波数がある。このうちCPI値は、プロセッサが1命令の実行に必要となる平均マシンサイクル数を表したものである。
CPI値は、パイプライン方式の採用により、理想的には1マシンサイクルごとに1命令の実行、すなわち、“1”にすることができる。しかし、実際には、データ依存、制御依存、資源競合などのパイプラインハザード要因により、CPI値を低減することは容易ではない。さらに、CPI値を低減するとパイプライン制御が複雑化して1サイクル当たりの論理段数が増加し、プロセッサ性能を決定付けるもう一つの重要な要素である動作周波数を向上しにくくなるという問題が生じる。すなわち、CPI値の低減と動作周波数の向上とのトレードオフが生じる。
従来、分岐命令の内容をできるだけ早く判定したり(たとえば、特許文献1参照)、分岐命令の実行結果が分岐/非分岐のいずれであってもよいように両方を実行し、条件分岐命令の条件が確定する実行ステージでそのうちのいずれか一方を選択したり(たとえば、特許文献2および3参照)することによって、パイプラインハザードの影響、すなわち、CPI値に影響を与える分岐ペナルティの軽減を図っている。
特開平10―214187号公報(第4―7頁、第1―4図) 特開平5―165633号公報(第3―4頁、第1,2および7図) 特開平6―301537号公報(第3―4頁、第1―3図)
上記第1の技術の場合、分岐命令流の命令列を退避させるための専用バッファが必要となる。また、上記第2の技術の場合、分岐先命令流および非分岐命令流を並列実行するための演算器やデータ記憶装置が必要となる。このため、今後、パイプライン構成が深くなるに連れて、分岐ペナルティ軽減のために必要なハードウェア資源がますます増大するおそれがある。
上記問題に鑑み、本発明は、与えられた命令をパイプライン処理するデータ処理装置について、ハードウェア資源、特に分岐命令流の命令列退避用の専用バッファなどを別途設けることなく、分岐ペナルティを軽減することを課題とする。
上記課題を解決するために本発明が講じた手段は、与えられた命令をパイプライン処理するデータ処理装置として、命令を先読みして一時的に格納する命令バッファ部と、前記命令バッファ部から出力される命令が分岐命令であるか否かを検出する分岐命令検出部と、前記分岐命令検出部によって検出された分岐命令によって分岐が生じるか否かを予測する分岐予測部と、前記分岐命令の分岐条件の実行結果から、前記分岐命令によって分岐が生じるか否かを判定する分岐判定部とを備え、前記命令バッファ部は、前記分岐命令検出部によって分岐命令が検出され、かつ、前記分岐予測部によって当該分岐命令によって分岐が生じることが予測されているとき、先読みして格納している命令列を所定領域に退避させ、当該命令列を格納していた領域に当該分岐命令の分岐先の命令を先読みして格納する一方、当該分岐命令について前記分岐予測部による分岐予測と前記分岐判定部による分岐判定結果とが異なるとき、前記退避させた命令列の中から命令を出力し、残りの命令を元の領域に戻すものとする。
これによると、分岐命令が検出され、分岐が予測されている場合、それまで先読みして格納済みの命令列が命令バッファ部の所定領域に退避させられる。そして、分岐予測がヒットしなかった場合、その退避させた命令列から次に実行すべき命令が発行されるとともに、残りの命令が元の領域に戻される。このように、先読み命令を格納する命令バッファ部の一部を分岐命令流の命令列の格納のために使用することで、別途バッファを設けることなく、分岐ペナルティの軽減を図ることができる。
好ましくは、前記命令バッファ部は、前記所定領域において、先読みした命令を順次格納していく方向とは逆方向に命令を順次格納して、前記先読みして格納している命令列を退避させるものとする。
このように、命令バッファ部において両方向から分岐先の命令および退避させる非分岐命令流の命令を格納することによって、退避させた命令列の一部に先読みした命令が上書きされる場合、特別な制御回路を設けることなく、退避させた命令列の初めの部分についてできるだけ上書きされなくすることができる。
より好ましくは、前記命令バッファ部は、前記退避させた命令列のうち少なくとも最初に実行すべき命令を残して、先読みした命令の上書きを行うものとする。
このように、退避させた命令列のうち少なくとも最初に実行すべき命令を残しつつ、分岐先の命令を先読みして格納することによって、分岐ペナルティの軽減を図りつつ、命令の先読み動作を行わせることができる。
そして、具体的には、上記データ処理装置は、前記命令バッファ部に格納されている命令のうち前記退避させたものを除く残りについて総命令語長を算出する有効命令語長算出部と、前記退避させた命令列のうち最初に実行すべき命令の命令語長を算出する命令語長算出部とを備え、前記命令バッファ部は、前記有効命令長算出部によって算出された総命令語長および前記命令長算出部によって算出された命令語長から、前記退避させた命令列に先読みした命令を上書きするか否かを判断するものとする。
また、上述した、退避させる命令を、先読みした命令を順次格納していく方向とは逆方向に順次格納する命令バッファ部は、先読みした命令を格納するための領域と退避させる命令を格納するための領域との境界を変更可能であることが好ましい。
これにより、たとえば、データ処理装置が実行すべきプログラムのコーディング方法に応じて、命令バッファ部における当該境界を変更することができ、有限である命令バッファ部の命令格納領域を最適に使用することができる。
より好ましくは、上記のデータ処理装置における命令予測部は、前記分岐命令検出部によって検出された分岐命令について、動的分岐予測を行うものであり、前記命令バッファ部は、前記分岐予測部による分岐予測に応じて、先読みした命令を格納するための領域と退避させる命令を格納するための領域との境界を変更するものとする。
また、上記データ処理装置において、前記命令バッファ部は、格納している命令の中に前記分岐命令検出部によって検出された分岐命令の分岐先の命令列が含まれているとき、当該命令列以外の命令を前記所定領域に退避させるとともに、当該命令列を、当該命令列以外の命令を格納していた領域に移動させるものであることが好ましい。
このように、分岐先の命令列が先読みされ既に命令バッファ部に格納されている場合、当該命令列を命令バッファ部においてシフトすることによって、当該命令列を再読み出しする必要がなくなる。これにより、分岐ペナルティを軽減することができる。
具体的には、上記データ処理装置は、前記命令バッファ部に格納されている命令のうち前記退避させたものを除く残りについて総命令語長を算出する有効命令語長算出部と、前記分岐命令検出部によって検出された分岐命令から分岐先の命令までの距離を算出する分岐距離算出部とを備え、前記命令バッファ部は、前記有効命令長算出部によって算出された総命令語長および前記分岐距離算出部によって算出された距離から、格納している命令の中に前記命令列が含まれているか否かを判断するものとする。
以上、本発明によると、与えられた命令をパイプライン処理するデータ処理装置について、新たなハードウェア資源を追加することなく、命令の先読みによる命令供給不足の問題解消を図りつつ、分岐ペナルティの軽減をも図ることができる。
以下、本発明を実施するための最良の形態について、図面を参照しながら説明する。なお、以下では、図13に示したプログラム例を用いて動作説明を行う。
ここで、図13のプログラム例について簡単に説明する。
命令(1)は、クリア演算(clr)である。本例では、レジスタ(D0)に“0”をセットする命令であり、命令コードは“90”、命令アドレスは“00000”である。
命令(2)は、ムーブ演算(mov)である。本例では、レジスタ(D1)に“0x03”をセットする命令であり、命令コードは“F031”、命令アドレスは“00001”である。
命令(3)は、クリア演算(clr)である。本例では、レジスタ(D2)に“0”をセットする命令であり、命令コードは“92”、命令アドレスは“00011”である。
命令(4)は、インクリメント演算(inc)である。本例では、レジスタ(D0)に“1”を足す命令であり、命令コードは“A0”、命令アドレスは“00100”である。
命令(5)は、加算演算(add)である。本例では、レジスタ(D2)にレジスタ(D0)を足して結果をレジスタ(D2)に格納する命令であり、命令コードは“E102”、命令アドレスは“00101”である。
命令(6)は、比較命令(cmp)である。本例では、レジスタ(D0)とレジスタ(D1)とを比較してフラグビットを更新する命令であり、命令コードは“C001”、命令アドレスは“00111”である。
命令(7)は、条件分岐命令(bne)である。本例では、演算結果が“0”でない場合に分岐先の命令(4)に分岐する命令であり、命令コードは“B5”、命令アドレスは“01001”である。
命令(8)は、インクリメント演算(inc)である。本例では、レジスタ(D2)に“1”を足す命令であり、命令コードは“A2”、命令アドレスは“01010”である。
命令(9)は、無条件分岐命令(bra)である。本例では、無条件に分岐先の命令(11)に分岐する命令であり、命令コードは“54”、命令アドレスは“01011”である。
命令(10)は、ノンオペレーション命令(nop)である。何もしない命令であり、命令コードは“00”、命令アドレスは“01100”である。
命令(11)は、デクリメント演算(dec)である。本例では、レジスタ(D0)から“1”を減じる命令であり、命令コードは“D0”、命令アドレスは“01101”である。
命令(12)は、減算演算(sub)である。本例では、レジスタ(D2)からレジスタ(D0)を減じて結果をレジスタ(D2)に格納する命令であり、命令コードは“E212”、命令アドレスは“01110”である。
命令(13)は、比較命令(cmp)である。本例では、レジスタ(D0)とレジスタ(D0)とを比較してフラグビットを更新する命令であり、命令コードは“C002”、命令アドレスは“10000”である。
命令(14)は、条件分岐命令(bne)である。本例では、演算結果が“0”でない場合に分岐先の命令(11)に分岐する命令であり、命令コードは“B5”、命令アドレスは“10010”である。
命令(15)は、ムーブ演算(mov)である。本例では、レジスタ(D0)に“0xee”をセットする命令であり、命令コードは“FEE0”、命令アドレスは“10011”である。
(第1の実施形態)
図1は、本発明の第1の実施形態に係るデータ処理装置の構成を示す。本実施形態に係るデータ処理装置は、外部メモリから読み込んだ命令をキャッシュする命令キャッシュ部10と、命令キャッシュ部10から命令を読み出して一時的に格納する命令バッファ部11と、命令バッファ部11から出力される命令が分岐命令であるか否かを検出する分岐命令検出部12と、命令バッファ部11から出力された命令を解読する命令解読部13と、命令解読部13によって解読された命令を実行する演算部14と、演算部13の演算結果および外部メモリから読み込んだデータを一時的に格納するデータキャッシュ部15と、分岐命令検出部12によって検出された分岐命令によって分岐が生じるか否かを予測する分岐予測部16と、分岐命令検出部12によって検出された分岐命令の分岐条件の実行結果を受けて実際に分岐が生じるか否かを判定する分岐判定部17と、分岐予測部16による分岐予測および分岐判定部17による分岐判定結果から、外部メモリからの命令読み出しに係るアドレスを生成する命令アドレス生成部18とを備えている。
命令キャッシュ部10は、命令アドレス生成部18によって生成された32ビットアドレスFAを受け、アドレスFAに対応する命令をレジスタC0およびC1から出力する。命令キャッシュ部10は、16ビット境界を越えない単位で命令を出力する。すなわち、命令キャッシュ部10は、アドレスFAの下位1ビットに関わらず、16ビット境界にアラインされた命令を出力する。したがって、命令キャッシュ部10は、アドレスFAの下位1ビットが“0”のときはレジスタC0およびC1から2バイト分の命令を出力し、“1”のときはレジスタC1から1バイト分の命令を出力する。
命令バッファ部11は、命令キャッシュ部10におけるレジスタC0およびC1から命令を読み出して、命令流に従って順に格納していく。アドレスFAで指定された命令が命令キャッシュ部10に存在しない、もしくは、命令キャッシュ部10が動作不可能な場合は、命令バッファ部11は、直接的に外部メモリから命令を読み出す。また、命令バッファ部11は、格納している命令を命令解読部13に出力した後、その出力した命令の分だけ後続の命令をシフトして、次に出力すべき命令を最前段へと移動させる。なお、命令バッファ部11は、命令キャッシュ部10から供給される命令を格納できない場合、命令キャッシュ部10および命令アドレス生成部18に通知をし、命令供給を停止させる。そして、新たな命令を格納できるようになったとき、命令キャッシュ部10および命令アドレス生成部18に通知をして新たな命令の格納を再開する。
データ処理装置に命令バッファ部11を設ける本来の目的は、命令キャッシュ部10のキャッシュミスによる命令供給不足の問題をできるだけ生じさせないようにすることにある。命令バッファ部11は、命令を格納することができる間は次々と命令を読み込む。すなわち、命令バッファ部11を設けることによって、命令の先読みが可能になる。特に、可変語長命令を実行可能なデータ処理装置にとっては、命令バッファ部11はより重要な意味を持つ。
また、データ処理装置によっては、命令キャッシュ部10から供給される命令よりも長い命令語長の命令を解読可能なものがある。このようなデータ処理装置においては、平均命令語長が命令キャッシュ部10から供給される命令よりも短い場合であっても、局所的に比較的長い命令語長の命令流が継続したときには、命令供給不足の問題が発生するおそれがある。この問題をできるだけ生じさせないようにするためには、命令バッファ部11の容量を平均命令語長よりも十分に大きくしておく必要がある。命令バッファ部11の容量の増大はCPI値の変化として現れるが、命令バッファ部11の容量をどの程度にするかはチップコストとのトレードオフを考慮して決定する必要がある。
ところで、本発明に係る命令バッファ部11は、先読みした命令を格納するだけではなく、分岐命令が検出された場合に、先読みして既に格納している命令列を一時的に別の領域に退避させておき、その検出された分岐命令によって分岐が生じないことが判明した場合には、退避させた命令を元に戻すということを行う。以下、命令バッファ部11について詳細に説明する。
図2は、命令バッファ部11の内部構成を示す。命令バッファ部11は、入力セレクタ回路111と、命令バッファ112と、出力セレクタ回路113と、制御回路114とを備えている。
命令バッファ112は、8個のレジスタA0、A1、A2、A3、B3、B2、B1およびB0から構成されている。レジスタA0〜B0は、それぞれセレクタ回路1111〜1118によって選択された1バイト分の命令を格納する。
制御回路114は、分岐命令検出部12からの信号BIS、分岐予測部16からの信号BPS、および分岐判定部17からの信号BESを入力する。そして、これら信号BIS、BPSおよびBES、命令バッファ112に格納されている今現在の命令のバイト数、命令解読部13に出力すべき命令のバイト数、ならびに命令キャッシュ部10から供給される命令のバイト数から、入力セレクタ回路111を制御するためのセレクト信号SA0、SA1、A2、SA3、SB0、SB1、SB2およびSB3、出力セレクタ回路113を制御するためのセレクト信号IBS、ならびに命令バッファ112に格納されている命令をフラッシュするための信号Flushを生成する。
入力セレクタ回路111は、8個のセレクタ1111、1112、1113、1114、1115、1116、1117および1118を備えている。
セレクタ1111は、命令キャッシュ部10のレジスタC0およびC1の出力、ならびに命令バッファ112のレジスタA0、A1、A2、B2およびB1の出力を入力とし、制御回路114からのセレクト信号SA0に応じてこれらのいずれか一つを選択してレジスタA0に出力する。具体的には、セレクタ1111は、先読みした命令を格納する場合にはレジスタC0またはC1の出力を選択する。命令バッファ112の状態をホールドさせる場合にはレジスタA0の出力を選択する。命令バッファ112に格納されている命令を1バイトまたは2バイト分シフトさせる場合には、レジスタA1またはA2の出力を選択する。そして、レジスタB2またはB1に退避させていた命令を元に戻す場合には、レジスタB2またはB1の出力を選択する。
セレクタ1112は、命令キャッシュ部10のレジスタC0およびC1の出力、ならびに命令バッファ112のレジスタA1、A2、A3、B1およびB0の出力を入力とし、制御回路114からのセレクト信号SA1に応じてこれらのいずれか一つを選択してレジスタA1に出力する。具体的には、セレクタ1112は、先読みした命令を格納する場合にはレジスタC0またはC1の出力を選択する。命令バッファ112の状態をホールドさせる場合にはレジスタA1の出力を選択する。命令バッファ112に格納されている命令を1バイトまたは2バイト分シフトさせる場合には、レジスタA2またはA3の出力を選択する。そして、レジスタB1またはB0に退避させていた命令を元に戻す場合には、レジスタB1またはB0の出力を選択する。
セレクタ1113は、命令キャッシュ部10のレジスタC0およびC1の出力、ならびに命令バッファ112のレジスタA2、A3、B3およびB0の出力を入力とし、制御回路114からのセレクト信号SA2に応じてこれらのいずれか一つを選択してレジスタA2に出力する。具体的には、セレクタ1113は、先読みした命令を格納する場合にはレジスタC0またはC1の出力を選択する。命令バッファ112の状態をホールドさせる場合にはレジスタA2の出力を選択する。命令バッファ112に格納されている命令を1バイトまたは2バイト分シフトさせる場合には、レジスタA3またはB3の出力を選択する。そして、レジスタB0に退避させていた命令を元に戻す場合には、レジスタB0の出力を選択する。
セレクタ1114は、命令キャッシュ部10のレジスタ命令C0およびC1の出力、ならびに命令バッファ112のレジスタA3、B3およびB2の出力を入力とし、制御回路114からのセレクト信号SA3に応じてこれらのいずれか一つを選択してレジスタA3に出力する。具体的には、セレクタ1114は、先読みした命令を格納する場合にはレジスタC0またはC1の出力を選択する。命令バッファ112の状態をホールドさせる場合にはレジスタA3の出力を選択する。そして、命令バッファ112に格納されている命令を1バイトまたは2バイト分シフトさせる場合には、レジスタB3またはB2の出力を選択する。
セレクタ1115は、命令キャッシュ部10のレジスタC0およびC1の出力、ならびに命令バッファ112のレジスタB3、B2、B1、A2、A1およびA0の出力を入力とし、制御回路114からのセレクト信号SB3に応じてこれらのいずれか一つを選択してレジスタB3に出力する。具体的には、セレクタ1115は、先読みした命令を格納する場合にはレジスタC0またはC1の出力を選択する。命令バッファ112の状態をホールドさせる場合にはレジスタB3の出力を選択する。命令バッファ112に格納されている命令を1バイトまたは2バイト分シフトさせる場合には、レジスタB2またはB1の出力を選択する。そして、レジスタA0、A1またはA2に格納されている命令を退避させる場合には、レジスタA0、A1またはA2の出力を選択する。
セレクタ1116は、命令キャッシュ部10のレジスタC0およびC1の出力、ならびに命令バッファ112のレジスタB2、B1、B0、A3、A2およびA1の出力を入力とし、制御回路114からのセレクト信号SB2に応じてこれらのいずれか一つを選択してレジスタB2に出力する。具体的には、セレクタ1116は、先読みした命令を格納する場合にはレジスタC0またはC1の出力を選択する。命令バッファ112の状態をホールドさせる場合にはレジスタB2の出力を選択する。命令バッファ112に格納されている命令を1バイトまたは2バイト分シフトさせる場合には、レジスタB1またはB0の出力を選択する。そして、レジスタA1、A2またはA3に格納されている命令を退避させる場合には、レジスタA1、A2またはA3の出力を選択する。
セレクタ1117は、命令キャッシュ部10のレジスタC0およびC1の出力、ならびに命令バッファ112のレジスタB1、B0、A3およびA2の出力を入力とし、制御回路114からのセレクト信号SB1に応じてこれらのいずれか一つを選択してレジスタB1に出力する。具体的には、セレクタ1117は、先読みした命令を格納する場合にはレジスタC0またはC1の出力を選択する。命令バッファ112の状態をホールドさせる場合にはレジスタB1の出力を選択する。命令バッファ112に格納されている命令を1バイト分シフトさせる場合には、レジスタB0の出力を選択する。そして、レジスタA2またはA3に格納されている命令を退避させる場合には、レジスタA2またはA3の出力を選択する。
セレクタ1118は、命令キャッシュ部10のレジスタC0の出力、ならびに命令バッファ112のレジスタB0、B3およびA3の出力を入力とし、制御回路114からのセレクト信号SB0に応じてこれらのいずれか一つを選択してレジスタB0に出力する。具体的には、セレクタ1118は、先読みした命令を格納する場合にはレジスタC0の出力を選択する。命令バッファ112の状態をホールドさせる場合にはレジスタB0の出力を選択する。そして、レジスタA3またはB3に格納されている命令を退避させる場合には、レジスタA3またはB3の出力を選択する。
一方、出力セレクタ回路113は、2個のセレクタ1131および1232を備えている。セレクタ1131は、命令バッファ112のレジスタA0およびB3の出力を入力とし、制御回路114からのセレクト信号IBSに応じてこれらのいずれか一方を選択して出力する。セレクタ1132は、命令バッファ112のレジスタA1およびB2の出力を入力とし、制御回路114からのセレクト信号IBSに応じてこれらのいずれか一方を選択して出力する。具体的には、出力セレクタ回路113は、先読みされ格納されている命令を出力する場合にはレジスタA0およびA1の出力を選択し、退避させている命令を出力する場合にはレジスタB3およびB2の出力を選択する。
分岐命令検出部12によって命令バッファ112の最前段、すなわちレジスタA0(2バイト命令の場合にはレジスタA0およびA1)に位置する命令が分岐命令であることが検出されたとき、制御回路114は、分岐命令検出部12からその旨を伝達する信号BISを受ける。また、制御回路114は、分岐予測部16から、分岐予測を伝達する信号BPSを受ける。そして、分岐が予測されている場合、制御回路114は、次のマシンサイクルで信号Flushを出力して命令バッファ112の内部をフラッシュし、分岐先の命令を命令バッファ112の先頭に格納できるようにする。一方、命令アドレス生成部18は、分岐先の命令のアドレスを算出して命令キャッシュ部10に出力する。
次に、本実施形態に係るデータ処理装置が図13のプログラムを実行するときの動作について図3を参照しながら説明する。なお、前提条件として、当該データ処理装置で実行可能な命令の命令語長は1または2バイトであり、命令キャッシュ部10は2バイト単位で命令を供給し、当該データ処理装置は、F、D、E、MおよびWの5段のステージに分割されるパイプライン処理を行うものとする。そして、分岐予測部16は、静的分岐予測装置であり、後方分岐の場合は分岐予測(Taken予測)を行う一方、前方分岐の場合は非分岐予測(Not−Taken予測)を行うものとする。また、図3は、図13のプログラムを何サイクルか実行している途中の状態を示しており、命令バッファ部11は空の状態であり、レジスタD0の値は“2”、レジスタD1の値は“1”、そしてレジスタD2の値は“2”とする。ただし、この前提条件は説明を簡略化するためのものであって、本発明を限定するものではない。
サイクルタイムT1では、命令(1)がFステージで実行され、命令アドレス“00000”から命令が読み読み込まれる。この結果、命令バッファ状態は“90F0”となる。
サイクルタイムT2では、命令(1)はDステージで実行され、命令コード“90”が命令バッファ部11から発行され、後続の命令が1バイトだけシフトされる。そして、命令(2)がFステージで実行され、命令アドレス“00010”から命令が読み込まれる。この結果、命令バッファ状態は“F03192”となる。
サイクルタイムT3では、命令(1)はEステージで実行される。命令(2)はDステージで実行され、命令コード“F031”が命令バッファ部11から発行され、後続の命令が2バイトだけシフトされる。そして、命令(3)がFステージで実行され、命令アドレス“00100”から命令が読み込まれる。この結果、命令バッファ状態は“92A0E1”となる。
サイクルタイムT4では、命令(1)はMステージで実行される。命令(2)はEステージで実行される。命令(3)はDステージで実行され、命令コード“92”が命令バッファ部11から発行され、後続の命令が1バイトだけシフトされる。そして、命令(4)がFステージで実行され、命令アドレス“00110”から命令が読み込まれる。この結果、命令バッファ状態は“A0E102C0”となる。
サイクルタイムT5では、命令(1)はWステージで実行される。命令(2)はMステージで実行される。命令(3)はEステージで実行される。命令(4)はDステージで実行され、命令コード“A0”が命令バッファ部11から発行され、後続の命令が1バイトだけシフトされる。そして、命令(5)がFステージで実行され、命令アドレス“01000”から命令が読み込まれる。この結果、命令バッファ状態は“E102C001B5”となる。
サイクルタイムT6では、命令(2)はWステージで実行される。命令(3)はMステージで実行される。命令(4)はEステージで実行される。命令(5)はDステージで実行され、命令コード“E102”が命令バッファ部11から発行され、後続の命令が2バイトだけシフトされる。そして、命令(6)がFステージで実行され、命令アドレス“01010”から命令が読み込まれる。この結果、命令バッファ状態は“C001B5A254”となる。
サイクルタイムT7では、命令(3)はWステージで実行される。命令(4)はMステージで実行される。命令(5)はEステージで実行される。命令(6)はDステージで実行され、命令コード“C001”が命令バッファ部11から発行され、後続の命令が2バイトだけシフトされる。そして、命令(7)がFステージで実行され、命令アドレス“01100”から命令が読み込まれる。この結果、命令バッファ状態は“B5A25400D0”となる。また、命令バッファの先頭に位置する命令コード“B5”が分岐命令であることが分岐命令検出部12によって検出される。
サイクルタイムT8では、命令(4)はWステージで実行される。命令(5)はMステージで実行される。命令(6)はEステージで実行される。命令(7)はDステージで実行され、命令コード“B5”が命令バッファ部11から発行される。そして、前サイクルタイムT7において分岐命令が検出されているため、分岐先の命令アドレス“00100”から命令が読み込まれるとともに、非分岐命令流の命令列“A25400D0”が退避される。すなわち、分岐先の命令(4)´がFステージで実行される。この結果、命令バッファ状態は“A0E1”となる。
サイクルタイムT9では、命令(5)はWステージで実行される。命令(6)はMステージで実行される。命令(7)はEステージで実行され、分岐判定部17によって分岐予測ミスであったことが検出される。この結果、命令(8)がDステージで実行され、退避させていた命令列から命令コード“A2”が発行され、残りの命令が命令バッファの先頭部分に移動する。そして、命令(9)がFステージで実行され、命令アドレス“01110”から命令が読み込まれる。この結果、命令バッファ状態は“5400D0E212”となる。
すなわち、分岐命令が検出され、分岐先命令の格納の必要性が生じた場合に、命令バッファ112に既に格納されている非分岐命令流の命令列を逆方向にシフトして退避させる。そして、分岐予測ミスが発生した場合、退避させた命令列から非分岐命令流の先頭の命令を発行する。
以上、本実施形態によると、先読みした命令の格納用の命令バッファ112の空き領域に命令を退避させることができるため、命令退避用の専用バッファを設けることなく、分岐ペナルティの軽減を図ることができる。本実施形態では、分岐命令によって命令流が変わったときにそれまで格納していた命令が無効化されて命令バッファ112の一部が局所時間的に使用されなくなる点に着目して、その使用されなくなる空き領域に命令を退避させるため、命令バッファ部11の本来の目的である先読みした命令の格納については、何ら機能を損なうものではない。
さらに、命令バッファ112の一部を命令退避に用いることについては、退避させる命令の命令語長が命令バッファ112のサイズ以下なら理論的に可能であるため、退避専用のバッファを設ける場合と比較して、命令退避可能なサイズを設定することが容易である。
なお、上記説明では、命令バッファ112の後段4バイトを動的に一時的に退避用バッファとして用いたが、命令バッファ112の容量、退避用バッファとして使用可能なバッファサイズはこの限りではない。
また、本実施形態では、分岐予測部16は静的分岐予測を行うものとして説明したが、本発明はこれに限定されるものではない。分岐予測部16は、動的分岐予測を行うものであってもよく、また、静的および動的分岐を混合したものであってもよい。
(第2の実施形態)
第1の実施形態に係る命令バッファ部11の構成では、分岐命令検出後にパイプラインがストールした場合、命令バッファ112に分岐命令流の命令が次々と格納されていく。一方、命令フェッチが複数ステージに跨る場合、分岐命令が検出された次のサイクルにおいても命令キャッシュ部10から非分岐命令流の命令が供給される。このような場合には、命令バッファ112の後段に退避させた非分岐命令列と命令バッファの前段から格納されていく分岐先命令列とが混在し、退避していたデータが上書きされてしまう。
たとえば、第1の実施形態に係る命令バッファ部11において、非分岐命令流の命令列を退避させている状態で分岐先の命令を格納していき、分岐先の命令が5バイト以上読み込まれた時点で、退避させていた非分岐命令流の命令が上書きされてしまう。このような上書きが発生しないように制限することは可能であるが、上書きを制限すると、分岐予測部16によって分岐予測がされているにも関わらず、分岐先の命令が最大4バイトまでしか格納できなくなる。その結果、分岐判定部17によって分岐することが判定された時点で、次に解読すべき命令が命令バッファ部11に格納されていないことが生じるおそれがあり、この場合には、パイプラインストールが発生してしまう。また、4バイト以上の命令語長の命令を実行可能なデータ処理装置の場合、上書きを制限することによって、命令バッファ部11に格納した命令が不完全なものとなり、命令を発行できなくなるおそれがある。そこで、退避させる命令の格納方法を工夫することによって、新たに特別な構成要素を追加することなく上記の問題の解決を図ることを考える。
図4は、本発明の第2の実施形態に係るデータ処理装置における命令バッファ部11の内部構成図を示す。本実施形態に係るデータ処理装置の構成は、図1に示した第1の実施形態に係るデータ処理装置と同様であるため説明を省略する。以下、本実施形態に係る命令バッファ部11について、第1の実施形態と異なる点についてのみ説明する。
セレクタ1112´は、命令キャッシュ部10のレジスタC0およびC1の出力、ならびに命令バッファ112のレジスタA1、A2、A3、B2およびB3の出力を入力とし、制御回路114からのセレクト信号SA1に応じてこれらのいずれか一つを選択してレジスタA1に出力する。具体的には、セレクタ1112´は、先読みした命令を格納する場合にはレジスタC0またはC1の出力を選択する。命令バッファ112の状態をホールドさせる場合にはレジスタA1の出力を選択する。命令バッファ112に格納されている命令を1バイトまたは2バイト分シフトさせる場合には、レジスタA2またはA3の出力を選択する。そして、レジスタB2またはB3に退避させていた命令を元に戻す場合には、レジスタB2またはB3の出力を選択する。
セレクタ1113´は、命令キャッシュ部10のレジスタC0およびC1の出力、ならびに命令バッファ112のレジスタA2、A3およびB3の出力を入力とし、制御回路114からのセレクト信号SA2に応じてこれらのいずれか一つを選択してレジスタA2に出力する。具体的には、セレクタ1113´は、先読みした命令を格納する場合にはレジスタC0またはC1の出力を選択する。命令バッファ112の状態をホールドさせる場合にはレジスタA2の出力を選択する。命令バッファ112に格納されている命令を1バイト分シフトさせる場合には、レジスタA3の出力を選択する。そして、命令バッファ112に格納されている命令を2バイト分シフトさせる、または、レジスタB3に退避させていた命令を元に戻す場合には、レジスタB3の出力を選択する。
セレクタ1115´は、命令キャッシュ部10のレジスタC0およびC1の出力、ならびに命令バッファ112のレジスタB3、B2、B1およびA3の出力を入力とし、制御回路114からのセレクト信号SB3に応じてこれらのいずれか一つを選択してレジスタB3に出力する。具体的には、セレクタ1115´は、先読みした命令を格納する場合にはレジスタC0またはC1の出力を選択する。命令バッファ112の状態をホールドさせる場合にはレジスタB3の出力を選択する。命令バッファ112に格納されている命令を1バイトまたは2バイト分シフトさせる場合には、レジスタB2またはB1の出力を選択する。そして、レジスタA3に格納されている命令を退避させる場合には、レジスタA3の出力を選択する。
セレクタ1116´は、命令キャッシュ部10のレジスタC0およびC1の出力、ならびに命令バッファ112のレジスタB2、B1、B0、A2およびA3の出力を入力とし、制御回路114からのセレクト信号SB2に応じてこれらのいずれか一つを選択してレジスタB2に出力する。具体的には、セレクタ1116´は、先読みした命令を格納する場合にはレジスタC0またはC1の出力を選択する。命令バッファ112の状態をホールドさせる場合にはレジスタB2の出力を選択する。命令バッファ112に格納されている命令を1バイトまたは2バイト分シフトさせる場合には、レジスタB1またはB0の出力を選択する。そして、レジスタA2またはA3に格納されている命令を退避させる場合には、レジスタA2またはA3の出力を選択する。
セレクタ1117´は、命令キャッシュ部10のレジスタC0およびC1の出力、ならびに命令バッファ112のレジスタB1、B0、A3、A2およびA1の出力を入力とし、制御回路114からのセレクト信号SB1に応じてこれらのいずれか一つを選択してレジスタB1に出力する。具体的には、セレクタ1117´は、先読みした命令を格納する場合にはレジスタC0またはC1の出力を選択する。命令バッファ112の状態をホールドさせる場合にはレジスタB1の出力を選択する。命令バッファ112に格納されている命令を1バイト分シフトさせる場合には、レジスタB0の出力を選択する。そして、レジスタA3、A2またはA3に格納されている命令を退避させる場合には、レジスタA3、A2またはA1の出力を選択する。
セレクタ1118´は、命令キャッシュ部10のレジスタC0の出力、ならびに命令バッファ112のレジスタB0、A0、A1およびA2の出力を入力とし、制御回路114からのセレクト信号SB0に応じてこれらのいずれか一つを選択してレジスタB0に出力する。具体的には、セレクタ1118´は、先読みした命令を格納する場合にはレジスタC0の出力を選択する。命令バッファ112の状態をホールドさせる場合にはレジスタB0の出力を選択する。そして、レジスタA0、A1またはA2に格納されている命令を退避させる場合には、レジスタA0、A1またはA2の出力を選択する。
一方、セレクタ1131´は、命令バッファ112のレジスタA0およびB0の出力を入力とし、制御回路114からのセレクト信号IBSに応じていずれか一方を選択して出力する。また、セレクタ1132´は、命令バッファ112のレジスタA1およびB1の出力を入力とし、制御回路114からのセレクト信号IBSに応じていずれか一方を選択して出力する。具体的には、出力セレクタ回路113は、先読みして格納している命令を出力する場合にはレジスタA0およびA1の出力を選択し、退避させている命令を出力する場合にはレジスタB0およびB1の出力を選択する。
次に、本実施形態に係るデータ処理装置が図13のプログラムを実行するときの動作について図5を参照しながら説明する。なお、前提条件として、本実施形態に係るデータ処理装置は、F1、F2、D1、D2、E、M1およびM2の7段のステージに分割されるパイプライン処理を行うものとする。これ以外の前提条件については、第1の実施形態で説明したものと同じとする。
サイクルタイムT1では、命令(4)がF1ステージで実行され、命令アドレス“00100”からの命令読み込み要求が発行される。
サイクルタイムT2では、命令(4)はF2ステージで実行され、前サイクルタイムT1で要求された命令アドレス“00100”から命令が読み込まれ、命令バッファ状態は“A0E1”となる。そして、命令(5)がF1ステージで実行され、命令アドレス“00110”からの命令読み込み要求が発行される。
サイクルタイムT3では、命令(4)はD1ステージで実行され、命令コード“A0”が命令バッファ部11から発行され、後続の命令が1バイトだけシフトされるとともに、命令(4)の解読が行われる。命令(5)はF2ステージで実行され、前サイクルタイムT2で要求された命令アドレス“00110”から命令が読み込まれ、命令バッファ状態は“E102C0”となる。そして、命令(6)がF1ステージで実行され、命令アドレス“01000”からの命令読み込み要求が発行される。
サイクルタイムT4では、命令(4)はD2ステージで実行され、解読された命令(4)が演算部14へ送られる。命令(5)はD1ステージで実行され、命令コード“E102”が命令バッファ部11から発行され、後続の命令が2バイトだけシフトされるとともに、命令(5)の解読が行われる。命令(6)はF2ステージで実行され、前サイクルタイムT3で要求された命令アドレス“01000”から命令が読み込まれ、命令バッファ状態は“C001B5”となる。そして、命令(7)がF1ステージで実行され、命令アドレス“01010”からの命令読み込み要求が発行される。
サイクルタイムT5では、命令(4)はEステージで実行され、レジスタD0に“1”が加算される。命令(5)はD2ステージで実行され、解読された命令(5)が演算部14へ送られる。命令(6)はD1ステージで実行され、命令コード“C001”が命令バッファ部11から発行され、後続の命令が2バイトだけシフトされるとともに、命令(6)の解読が行われる。命令(7)はF2ステージで実行され、前サイクルタイムT4で要求された命令アドレス“01010”から命令が読み込まれ、命令バッファ状態は“B5A254”となる。そして、命令(8)がF1ステージで実行され、命令アドレス“01100”からの命令読み込み要求が発行される。また、命令バッファの先頭に位置する命令コード“B5”が分岐命令であることが分岐命令検出部12によって検出される。
サイクルタイムT6では、命令(4)はM1ステージで実行され、レジスタD0に演算結果を書き込む準備が行われる。命令(5)はEステージで実行され、レジスタD0とレジスタD2との加算が行われる。命令(6)はD2ステージで実行され、解読された命令(5)が演算部14へ送られる。命令(7)はD1ステージで実行され、命令コード“B5”が命令バッファ部11から発行され、後続の命令が1バイトだけシフトされるとともに、命令(7)の解読が行われる。命令(8)はF2ステージで実行され、前サイクルタイムT5で要求された命令アドレス“01100”から命令が読み込まれ、命令バッファ状態は“A25400D0”となる。そして、前サイクルタイムT5において分岐命令が検出されているため、分岐先の命令アドレス“00100”からの命令読み込み要求が発行される。すなわち、分岐先の命令(4)´がF1ステージで実行される。
サイクルタイムT7では、命令(4)はM2ステージで実行され、レジスタD0に演算結果が書き込まれる。命令(5)はM1ステージで実行され、レジスタD2に演算結果を書き込む準備が行われる。命令(6)はEステージで実行され、レジスタD0とレジスタD1との比較(減算)が行われるが、M2ステージにおいてレジスタD0への書き込みが完了していないためEステージはストールする。命令(7)はD2ステージで実行され、解読された命令(6)が演算部14へ送られようとするが、EステージがストールしているためD2ステージもまたストールする。命令(8)は非分岐命令であるためキャンセルされ、D1ステージはフラッシュされる。命令(4)´はF2ステージで実行され、前サイクルタイムT6で要求された命令アドレス“00100”から命令が読み込まれるとともに、非分岐命令流の命令列“A25400D0”が退避される。この結果、命令バッファ状態は“A0E1”となる。そして、命令(5)´がF1ステージで実行され、命令アドレス“00110”からの命令読み込み要求が発行される。
サイクルタイムT8では、命令(5)はM2ステージで実行され、レジスタD2に演算結果が書き込まれる。M1ステージでは、前サイクルタイムT7においてEステージがストールしていたためバブルが発生する。命令(6)はEステージで実行され、レジスタD0とレジスタD1との比較(減算)が行われる。命令(7)は再びD2ステージで実行され、解読された命令(7)が演算部14へ送られる。D1ステージはフラッシュされたままである。命令(4)´は引き続きF2ステージで実行され、前サイクルタイムT7で要求された命令アドレス“00110”から命令が読み込まれ、命令バッファ状態は“A0E102C0”となる。そして、命令(5)´は引き続きF1ステージで実行され、命令アドレス“01000”からの命令読み込み要求が発行される。
サイクルタイムT9では、M2ステージについては、前々サイクルタイムT7でEステージがストールしていたためバブルが発生する。命令(6)はM1ステージで実行される。命令(7)はEステージで実行され、分岐判定部17によって分岐予測ミスであったことが検出される。D2ステージについては、前サイクルタイムT8でD1ステージがフラッシュされたためバブルが発生する。命令(4)´はD1ステージで実行され、命令コード“A0”が命令バッファ部11から発行され、後続の命令が1バイトだけシフトされるとともに、命令(4)´の解読が行われる。命令(5)´はF2ステージで実行され、前サイクルタイムT8で要求された命令アドレス“01000”から命令が読み込まれ、命令バッファ状態は“E102C001B5”となる。そして、命令(9)がF1ステージで実行され、非分岐命令流の命令アドレス“01101”からの命令読み込み要求が発行される。
サイクルタイムTAでは、命令(6)はM2ステージで実行される。命令(7)はM1ステージで実行される。Eステージについては、前サイクルタイムT9でD2ステージがフラッシュされたためバブルが発生する。命令(4)´および(5)´は分岐命令流であるためキャンセルされ、D2ステージはフラッシュされる。命令(8)´はD1ステージで実行され、退避させていた命令列から命令コード“A2”が発行され、残りの命令が命令バッファの先頭部分に移動する。命令(9)はF2ステージで実行され、前サイクルタイムT9で要求された命令アドレス“01101”から命令が読み込まれ、命令バッファ状態は“5400D0”となる。そして、命令(10)がF1ステージで実行され、命令アドレス“01110”からの命令読み込み要求が発行される。
以上のように、命令バッファ112において、退避させる命令を、先読み命令を格納していく方向とは逆方向に、末尾部分から順に格納していくことにより、退避させた命令列の先頭の命令が上書きされないようにすることができる。図5中のサイクルタイムT9における命令バッファ状態を見てわかるように、退避させた非分岐命令流の命令列の一部が分岐命令流の命令によって上書きされているが、非分岐命令流の先頭の命令コード“A2”は上書きされずに残っている。このため、次のサイクルタイムTAにおいて、命令コード“A2”を出力することができ、パイプラインハザードを生じさせることがない。上記例では、さらに1サイクルタイム分の分岐命令流の命令が格納されても、命令コード“A2”が上書きされることはない。
第1の実施形態では、命令バッファ112において、あらかじめ想定していた非分岐命令流の命令列を退避させる領域を除いた残りの領域が、分岐先の命令列を格納するために用いられる。しかし、分岐することが予測されている場合には必ずしも分岐先の命令の格納を制限する必要はなく、分岐予測のヒット率を考慮するに、分岐先の命令の格納を優先する方が好ましい結果をもたらす場合が多い。
本実施形態では、分岐すると予測されている命令、すなわち、分岐命令流の命令の格納範囲があらかじめ想定されていた非分岐命令流の退避バッファ領域に達した場合でも、その分岐命令流の命令を格納すること許可する。ただし、命令バッファ112の末尾から先頭方向に非分岐命令流の命令列を格納しておき、非分岐命令流の初めの部分の命令についてはなるべく上書きされないようにしている。これにより、退避された非分岐命令流の命令をできるだけ有効な状態で格納しつつ、できるだけ分岐命令流の命令を格納し、分岐することが判定された時点で命令供給不足が発生しないようにすることができる。
また、本実施形態に係る命令バッファ部11の構成は、第1の実施形態と比較しても、特に入力端子や構成要素が増えるわけではなく、回路規模が増大することはない。
なお、上記説明では、命令語長が1バイト単位であることに着目し、非分岐命令流の命令の退避単位を1バイトとして、命令バッファ112の末尾から先頭方向にこの単位で命令の格納を行っている。しかし、本発明はこれに限定されるものではなく、データ処理装置において実行可能な命令語長、たとえば、2バイトを単位として、退避させる命令を格納してもよい。
また、上記説明では、Fステージは2段であるとしたが、これが3段以上続く場合には、分岐命令が検出されてから分岐命令流が命令バッファに格納されるまでのサイクル数が増加する。これにより、非分岐命令流の命令キャッシュからの命令の格納が数サイクル継続されるため、非分岐命令流の命令によって命令バッファが飽和してしまうことがある。この場合、これら命令を退避させると、命令バッファ112の先頭部分まで非分岐命令流の命令が占めてしまうことになるが、特に問題はない。相異なる命令流の命令の格納方向を互いに逆にすることにより、上述した効果を得ることができる。
(第3の実施形態)
分岐予測が適切な場合、分岐処理が確定する確率が高くなり、その後の分岐先命令の供給問題が発生する確率が低くなることは明らかである。しかし、分岐予測ミスが発生する回数や、分岐予測ミスが発生した後の処理の内容によっては、データ処理装置の性能が低下する可能性も否定できない。たとえば、分岐が成立した直後には命令語長が比較的短い命令が、そして、分岐が非成立の場合には命令語長が比較的長い命令が使用されているプログラムの場合、命令バッファにおいて非分岐命令流と分岐先命令流との格納境界の決め方によってはデータ処理装置の性能に差が生じる。
一方、組み込み用のデータ処理装置などでは、実行すべきプログラムをあらかじめ評価することができる。すなわち、事前にプログラムを評価することによって、非分岐命令流と分岐先命令流との格納境界を最適に決定することができる。そこで、非分岐命令流と分岐先命令流との格納境界を変更可能な命令バッファの構成を考える。
図6は、本発明の第3の実施形態に係るデータ処理装置における命令バッファ部の内部構成図を示す。本実施形態に係るデータ処理装置の構成は、図1に示した第1の実施形態に係るデータ処理装置と同様であるため説明を省略する。以下、本実施形態に係る命令バッファ部11について、図4に示した第2の実施形態に係る命令バッファ部11と異なる点についてのみ説明する。
制御回路114´は、命令バッファ112において非分岐命令流と分岐命令流とが互いの格納境界を越えるような命令供給があった場合に、その重複する領域に上書きを許可するか否かを設定するためのレジスタ1141を備えている。レジスタ1141は、上書きを許可するか否かを示す信号BBSを出力し、上書きを許可する場合には信号BBSを“1”に設定する一方、許可しない場合には“0”に設定する。
また、制御回路114´は、分岐予測状態にあるか否かを示す信号BPSを出力する。信号BPSは、分岐命令検出部12によって分岐命令が検出され、その分岐命令について分岐予測部16によって分岐予測がされた場合、分岐予測状態を示す所定値“1”となる。
信号BBSと信号BPSを論理反転したものとが、OR回路125に入力される。そして、AND回路126に、OR回路125の出力とクロック信号CLKとが入力される。命令バッファ112において、レジスタA0〜A3にはクロック信号CLKが与えられる一方、レジスタB0〜B3には、AND回路126の出力であるゲーテッドクロック信号GCLKが与えられる。すなわち、信号BBSが“1”のとき、AND回路126はマスクされ、ゲーテッドクロック信号GCLKは、実質的にクロック信号CLKと同一となる。一方、信号BBSが“0”のとき、信号BPSの値に応じて、ゲーテッドクロック信号GCLKが決定される。具体的には、信号BPSが“1”、すなわち、分岐予測状態にあるとき、ゲーテッドクロック信号GCLKは、実質的にクロック信号CLKと同一となる一方、信号BPSが“0”、すなわち、分岐予測状態にないとき、ゲーテッドクロック信号GCLKとして“0”が出力される。これにより、レジスタB0〜B3に新たな命令の上書きをするか否かを制御する。
次に、本実施形態に係る命令バッファ部11を備えたデータ処理装置が図13のプログラムを実行するときの動作について図7を参照しながら説明する。なお、図6に示した信号BBSによって上書きが許可されている場合、図5と同様の動作となるため、ここでは信号BBSによって上書きが禁止されている場合について説明する。
サイクルタイムT1〜T8までの動作は、第2の実施形態で説明したとおりである。サイクルタイムT9では、前サイクルタイムT8で要求された命令アドレス“01000”から2バイト分の命令コード“01B5”が読み込まれるが、非分岐命令流の命令列を格納する領域への上書きが禁止されているため、このうち前半の命令コード“01”のみ格納され、命令バッファ状態は“E102C001”となる。命令(7)はEステージで実行されることにより、分岐判定部17によって分岐予測ミスであったことが検出される。このため、F1ステージにおいて命令アドレス“01110”からの命令読み込み要求が発行される。
このように、サイクルタイムT9において、第2の実施形態とは異なり、退避させた命令列は上書きされることがない。このため、次のサイクルタイムTAにおいて、たとえば、4バイト命令を出力しようとする場合、命令の供給不足問題が生じることがない。
以上、本実施形態によると非分岐命令流と分岐命令流との格納境界を変更することができるため、たとえば、実行すべきプログラムに応じてその格納境界を最適化することができる。これにより、プログラムのコーディング方法に関わらず、データ処理装置を一定の性能に保つことができる。
なお、上記説明では、ゲーテッドクロック信号GCLKを生成し、これを用いてレジスタB0〜B3への上書きを禁止するか否かを制御しているが、本発明はこれに限定されるものではない。ゲーテッドクロック信号GCLKを用いなくとも、たとえば、セレクト信号SB0〜SB3によって、レジスタB0〜B3にそれぞれ自己の出力を入力するようにしてもよい。
(第4の実施形態)
動的分岐予測を行うデータ処理装置の場合、第3の実施形態で説明した、非分岐命令流と分岐先命令流との格納境界の変更を動的に行うことができる。静的分岐予測のヒット率が60%から80%程度であるのに対し、動的分岐予測のヒット率は80〜90%程度である。すなわち、動的分岐予測は、静的分岐予測よりも予測ヒット率の面で優れており、分岐予測ヒット後の命令供給問題の発生確率(分岐先命令が多く格納されている程問題が発生しない)が比較的低い。したがって、動的分岐予測を行うデータ処理装置では、命令バッファにおける非分岐命令流と分岐先命令流との格納境界の変更を動的に行うことにより、分岐ペナルティ軽減の点でより一層の効果が期待できる。
図8は、本発明の第4の実施形態に係るデータ処理装置の構成を示す。本実施形態に係るデータ処理装置は、分岐予測部16として動的分岐予測装置を備えている。以下、図1に示した第1の実施形態に係るデータ処理装置と異なる点についてのみ説明する。
命令アドレス生成部18は、命令キャッシュ部10に要求する命令アドレスを保持するアドレスレジスタ181と、前サイクルにおいて命令キャッシュ部10に要求した命令アドレスを保持するアドレスレジスタ182と、命令解読部13によって解読されている命令の命令アドレスを保持するアドレスレジスタ183と、命令語長算出部19によって算出された命令バッファの先頭に位置する命令の命令語長をアドレスレジスタ183に保持された命令アドレスに加算する加算器184と、アドレスレジスタ182に保持された命令アドレスおよび加算器184の演算結果のいずれか一方を選択してアドレスレジスタ183に出力するセレクタ185とを備えている。
分岐予測部16は、分岐命令検出部12によって分岐命令が検出された場合に、その分岐命令についてのこれまでの分岐予測およびその分岐予測がヒットしたか否かという履歴に基づいて、動的に分岐予測を行う。具体的には、分岐予測部16は、アドレスレジスタ183から命令解読器13によって解読されている命令の命令アドレスを受け、この命令アドレスが分岐予測テーブル161においてタグ162として記憶されているか否かを検索し、検索結果に基づいてセレクタ163から2ビットの信号BPSを命令バッファ部11に出力する。なお、分岐予測テーブル161は分岐命令が処理されるたびに更新される。
信号BPSに含まれる分岐予測ビットはステートマシンであり、その分岐予測方法は一般的な手法である(Jonny K.F.LeeおよびAlan Jay Smith著、「Branch Prediction Strategies and Branch Target Buffer Design」、IEEE COMPUTER January 1984を参照)。ステートマシンについて簡単に説明すると、分岐予測を2ビットで管理するというものである。具体的には、分岐予測部16は、分岐予測ビットが“11”および“10”の場合、その分岐命令についてTaken予測を行う一方、分岐予測ビットが“01”および“00”の場合、その分岐命令についてNot−taken予測を行う。
状態遷移方法についてはいくつかの事例が紹介されている。そのうちの一例を挙げると、分岐予測部16によってTaken予測がされ、当該予測がヒットした場合は、分岐予測ビット=“11”(StrongTaken)として予測管理を継続する。また、分岐予測がミスした場合、現状の分岐予測ビットが“11”のときは、分岐予測ビット=“10”(WeaklyTaken)とし、現状の分岐予測ビットが“10”のときは、分岐予測ビット=“00”(StrongNot−taken)として予測管理を継続する。同様に、分岐予測部16によってNot−taken予測がされ、当該予測がヒットした場合は、分岐予測ビット=“00”(StrongNot−taken)として予測管理を継続する。また、分岐予測がミスした場合、現状の分岐予測ビットが“01”のときは、分岐予測ビット=“11”(StrongTaken)とし、現状の分岐予測ビットが“00”のときは、分岐予測ビット=“01”(WeaklyNot−taken)として予測管理を継続する。なお、ここで説明した2ビットデータを用いた分岐予測管理方法はほんの一例であり、本発明はこれに限定されるものではない。
一方、図9は、本実施形態に係るデータ処理装置における命令バッファ部11の内部構成を示す。図6に示した第3の実施形態に係る命令バッファ部11と比較してわかるように、本実施形態に係る命令バッファ部11における制御回路114は、信号BPSに代えて信号BPBの上位1ビットを入力し、そして、OR回路115は、信号BBSに代えて信号BPBの下位1ビットを入力する。これにより、レジスタB0〜B3に上書きを許可するか否かを、分岐予測部16の分岐予測に応じて動的に制御することができる。具体的には、分岐予測がStrongTaken(信号BBS=“11”)の場合、レジスタB0〜B3にゲーテッドクロック信号GCLKが供給され、命令の上書きが可能となる。一方、分岐予測がWeaklyTaken(信号BBS=“10”)の場合、ゲーテッドクロック信号GCLKは“0”に固定され、命令の上書きが不可能となる。
以上、本実施形態によると、動的分岐予測を行うデータ処理装置において、命令バッファにおける非分岐命令流と分岐先命令流との格納境界を動的分岐予測に応じて変更することができる。これにより、より一層の分岐ペナルティ軽減を図ることができる。
(第5の実施形態)
命令バッファにおける非分岐命令流および分岐先命令流の格納領域の設定について、第3の実施形態では静的に行う方法、第4の実施形態では動的に行う方法を示した。一方で、分岐命令によって分岐が生じるか否かの判定がなされてから、退避させていた非分岐命令流の命令の最読み込み完了までに要するパイプライのステージ数応じて、非分岐命令流の命令列の格納サイズを決定することも可能である。たとえば、データ処理装置が解読可能な最大命令語長が2バイト、かつ、命令の再読み出しに必要なサイクル数が“1”(すなわち、Fステージが1段のみ)の場合、1サイクル分の非分岐命令流の命令が退避されていれば、命令の再読み出しに係る分岐ミスペナルティは発生しない。すなわち、非分岐命令流の格納領域として2バイト確保されていれば、命令供給不足による分岐ミスペナルティは発生しない。同様に、命令の再読み出しに必要なサイクル数が“2”(すなわち、Fステージが2段)の場合、2サイクル分の非分岐命令流の命令が退避されていれば、命令の再読み出しに係る分岐ミスペナルティは発生しない。すなわち、非分岐命令流の格納領域として4バイト確保されていれば、命令供給不足による分岐ミスペナルティは発生しない。
これを一般的に考えると、データ処理装置が解読可能な最大命令語長をmバイト、命令の再読み出しに必要なサイクル数がkサイクル(すなわち、Fステージがk段)である場合、非分岐命令流の格納領域としてk×mバイト確保されていれば、分岐予測ミスの場合でも分岐ミスペナルティは発生しない。さらに、非分岐命令流の最初の命令の命令語長がnバイト(m>n)の場合、k×m−(m−n)バイト分の命令が非分岐命令流の格納領域に退避されていれば、分岐ペナルティは発生しない。そこで、上記のとおりの非分岐命令流の格納領域を確保することが可能なデータ処理装置について考える。
図10は、本発明の第5の実施形態に係るデータ処理装置の構成を示す。本実施形態に係るデータ処理装置は、図8に示した第4の実施形態に係るデータ処理装置に、有効命令語長算出部20を設けた構成となっている。以下、第4の実施形態に係るデータ処理装置と異なる点についてのみ説明する。
有効命令語長算出部20は、命令バッファ部11に格納されている命令のうち退避させた非分岐命令流の命令を除く残りのものについての総命令語長を有効命令語長として算出する。たとえば、図8に示したタイムサイクルT7において、アクティブな命令バッファ領域は命令コード“A0E1”が格納されている部分である。したがって、この場合の有効命令語長は2バイトとなる。
命令バッファ部11は、有効命令語長算出部20によって算出された有効命令語長lおよび命令語長算出部19によって算出された命令語長nを受けて次の処理を行う。なお、命令バッファ部11のバッファサイズをmバイトとする。また、命令語長算出部19によって算出される命令語長nは、ここでは、命令バッファ部11において退避されている命令列のうち最初に実行すべき命令、すなわち、命令バッファの末尾に位置する命令の命令語長とする。
命令バッファ部11は、命令バッファ部11のバッファサイズmから有効命令語長算出部20によって算出された有効命令語長lを減じた残りのバイト数(m−l)と、命令語長算出部19によって算出された命令語長nとの比較を行う。そして、(m−l)≧nの場合には、命令バッファ部11は、非分岐命令流の命令の格納を優先すべく、非分岐命令流の格納領域への上書きを禁止する。具体的には、たとえば図6に示した命令バッファ部11の場合、レジスタ1141に“0”を設定する。一方、(m−l)<nの場合には、分岐命令流の命令を続けて格納してもよいため、命令バッファ部11は、非分岐命令流の格納領域への上書きを禁止する。具体的には、たとえば図6に示した命令バッファ部11の場合、レジスタ1141に“1”を設定する。
以上、本実施形態によると、退避された非分岐命令流の格納領域として必要最小限のものを確保することができる。これにより、分岐命令流および非分岐命令流の命令を格納するに当たり、有限の命令バッファ領域を最適に割り当てることが可能となる。
なお、上記説明は、Fステージが1段であるという前提で、非分岐命令流において最初に実行される命令の確保を目的としたものであるが、本発明はこれに限定されるものではない。Fステージが複数ステージからなる場合は、命令バッファにおいて退避されている命令を、そのステージ数に応じた数だけ確保する必要がある。この場合、命令バッファ部11は、そのステージ数に応じた関係式に基づいて、非分岐命令流の格納領域に上書きを許可するか否かを制御すればよい。
(第6の実施形態)
第1から第5の実施形態では、分岐命令が検出された場合に、命令バッファおよびパイプラインがフラッシュされて資源の一部が未使用状態になることに着目し、命令バッファにおいて未使用状態となる領域に非分岐命令流の命令列を退避させている。しかし、フラッシュされる命令バッファに分岐先の命令列が既に先読みによって格納されている場合もある。たとえば、図5に示した例では、サイクルタイムTBにおいて、分岐命令(9)(命令コード“54”)の分岐先の命令列である命令(11)(命令コード“D0”)および命令(12)(命令コード“E121”)が既に命令バッファに格納されている。そこで、既に命令バッファに格納されている分岐先の命令列を再読み出ししなくてもよいように、当該命令列を退避させることが可能なデータ処理装置について考える。
図11は、本発明の第6の実施形態に係るデータ処理装置の構成を示す。本実施形態に係るデータ処理装置は、図1に示した第1の実施形態に係るデータ処理装置に、命令語長算出部19、有効命令語長算出部20および分岐距離算出部21を設けた構成となっている。以下、第1の実施形態に係るデータ処理装置と異なる点についてのみ説明する。
分岐距離算出部21は、分岐命令検出部12によって検出された分岐命令から分岐先の命令までの距離を算出する。有効命令語長算出部20は、第5の実施形態において説明したように、命令バッファ部11に格納されている命令のうち退避させた非分岐命令流の命令を除く残りのものについての総命令語長を有効命令語長として算出する。また、命令語長算出部19は、第4の実施形態において説明したように、命令バッファの先頭に位置する命令の命令語長を算出する。
命令バッファ部11は、有効命令語長算出部20によって算出された有効命令語長mバイトと、分岐距離算出部21によって算出された分岐距離nバイトとを比較する。そして、m>nのとき、命令バッファに分岐先の命令が既に格納されているため、命令バッファの先頭からnバイトを非分岐命令流の命令列として退避させるとともに、残りの(m−n)バイトを分岐命令流の命令列として命令バッファの先頭部分にシフトする。
次に、本実施形態に係るデータ処理装置が図13のプログラムを実行するときの動作について図12を参照しながら説明する。なお、前提条件として、本実施形態に係るデータ処理装置は、F1、F2、D1、D2、E、M1およびM2の7段のステージに分割されるパイプライン処理を行うものとする。これ以外の前提条件については、第1の実施形態で説明したものと同じとする。
サイクルタイムT1〜T9までの動作は、第2の実施形態で説明したとおりである。サイクルタイムTAでは、退避させていた命令列が命令バッファの先頭部分にシフトされ、また、前サイクルタイムT9で要求された命令アドレス“01101”から1バイト分の命令コード“D0”が読み込まれ、命令バッファ状態は“5400D0”となる。そして、命令(11)がF1ステージで実行され、命令アドレス“01110”からの命令読み込み要求が発行される。また、命令バッファの先頭に位置する命令コード“54”が分岐命令であることが分岐命令検出部12によって検出される。
サイクルタイムTBでは、有効命令語長算出部20によって有効命令語長が4バイトであることが算出され、また、分岐距離算出部21によって分岐距離が2バイトであることが算出される。そして、命令語長算出部19によって分岐命令(9)の命令語長が1バイトであることが算出されているため、分岐先の命令が命令バッファの先頭から2バイト目以降に格納されていることが検出される。
そして、サイクルタイムTCにおいて、非分岐命令流の命令列(この場合、“00D0”)を退避させるとともに、命令バッファの先頭部分に、既に格納している分岐命令流の命令列を移動する(この場合、“E212”)。そして、前サイクルタイムTBで要求された命令アドレス“10000”から命令が読み込まれ、命令バッファ状態は“E212C002”となる。
以上、本実施形態のように、命令バッファに先読みして既に格納している分岐先の命令を命令バッファの先頭にシフトすることによって、分岐先の命令を再読み込みしなくてよくなる。これにより、データ処理装置における分岐ペナルティを軽減することができ、処理性能を向上させることができる。
本発明に係るデータ処理装置は、ハードウェア資源を増大させることなく、命令の先読みによる命令供給不足の問題解消および分岐ペナルティの軽減を実現することができるため、パイプラインプロセッサ、分岐予測装置を有するプロセッサ、スーパスカラープロセッサ、VLIWプロセッサ、およびマルチスレッド方式のプロセッサなどに有用である。
本発明の第1の実施形態に係るデータ処理装置の構成図である。 本発明の第1の実施形態に係る命令バッファ部の内部構成図である。 本発明の第1の実施形態に係るデータ処理装置の動作を説明するための図である。 本発明の第2の実施形態に係るデータ処理装置における命令バッファ部の内部構成図である。 本発明の第2の実施形態に係るデータ処理装置の動作を説明するための図である。 本発明の第3の実施形態に係るデータ処理装置における命令バッファ部の内部構成図である。 本発明の第3の実施形態に係るデータ処理装置の動作を説明するための図である。 本発明の第4の実施形態に係るデータ処理装置の構成図である。 本発明の第4の実施形態に係るデータ処理装置における命令バッファ部の内部構成図である。 本発明の第5の実施形態に係るデータ処理装置の構成図である。 本発明の第6の実施形態に係るデータ処理装置の構成図である。 本発明の第6の実施形態に係るデータ処理装置の動作を説明するための図である。 本発明のデータ処理装置によって実行されるプログラム例を示す図である。
符号の説明
11 命令バッファ部
12 分岐命令検出部
16 分岐予測部
17 分岐判定部
19 命令語長算出部
20 有効命令語長算出部
21 分岐距離算出部

Claims (8)

  1. 与えられた命令をパイプライン処理するデータ処理装置であって、
    命令を先読みして一時的に格納する命令バッファ部と、
    前記命令バッファ部から出力される命令が分岐命令であるか否かを検出する分岐命令検出部と、
    前記分岐命令検出部によって検出された分岐命令によって分岐が生じるか否かを予測する分岐予測部と、
    前記分岐命令の分岐条件の実行結果から、前記分岐命令によって分岐が生じるか否かを判定する分岐判定部とを備え、
    前記命令バッファ部は、
    前記分岐命令検出部によって分岐命令が検出され、かつ、前記分岐予測部によって当該分岐命令によって分岐が生じることが予測されているとき、先読みして格納している命令列を所定領域に退避させ、当該命令列を格納していた領域に当該分岐命令の分岐先の命令を先読みして格納する一方、当該分岐命令について前記分岐予測部による分岐予測と前記分岐判定部による分岐判定結果とが異なるとき、前記退避させた命令列の中から命令を出力し、残りの命令を元の領域に戻す
    ことを特徴とするデータ処理装置。
  2. 請求項1に記載のデータ処理装置において、
    前記命令バッファ部は、前記所定領域において、先読みした命令を順次格納していく方向とは逆方向に命令を順次格納して、前記先読みして格納している命令列を退避させる
    ことを特徴とするデータ処理装置。
  3. 請求項2に記載のデータ処理装置において、
    前記命令バッファ部は、前記退避させた命令列のうち少なくとも最初に実行すべき命令を残して、先読みした命令の上書きを行う
    ことを特徴とするデータ処理装置。
  4. 請求項3に記載のデータ処理装置において、
    前記命令バッファ部に格納されている命令のうち前記退避させたものを除く残りについて、総命令語長を算出する有効命令語長算出部と、
    前記退避させた命令列のうち最初に実行すべき命令の命令語長を算出する命令語長算出部とを備え、
    前記命令バッファ部は、前記有効命令長算出部によって算出された総命令語長および前記命令長算出部によって算出された命令語長から、前記退避させた命令列に先読みした命令を上書きするか否かを判断する
    ことを特徴とするデータ処理装置。
  5. 請求項2に記載のデータ処理装置において、
    前記命令バッファ部は、先読みした命令を格納するための領域と退避させる命令を格納するための領域との境界を変更可能である
    ことを特徴とするデータ処理装置。
  6. 請求項5に記載のデータ処理装置において、
    前記命令予測部は、前記分岐命令検出部によって検出された分岐命令について、動的分岐予測を行うものであり、
    前記命令バッファ部は、前記分岐予測部による分岐予測に応じて、先読みした命令を格納するための領域と退避させる命令を格納するための領域との境界を変更する
    ことを特徴とするデータ処理装置。
  7. 請求項1に記載のデータ処理装置において、
    前記命令バッファ部は、格納している命令の中に前記分岐命令検出部によって検出された分岐命令の分岐先の命令列が含まれているとき、当該命令列以外の命令を前記所定領域に退避させるとともに、当該命令列を、当該命令列以外の命令を格納していた領域に移動させる
    ことを特徴とするデータ処理装置。
  8. 請求項7に記載のデータ処理装置において、
    前記命令バッファ部に格納されている命令のうち前記退避させたものを除く残りについて、総命令語長を算出する有効命令語長算出部と、
    前記分岐命令検出部によって検出された分岐命令から分岐先の命令までの距離を算出する分岐距離算出部とを備え、
    前記命令バッファ部は、前記有効命令長算出部によって算出された総命令語長および前記分岐距離算出部によって算出された距離から、格納している命令の中に前記命令列が含まれているか否かを判断する
    ことを特徴とするデータ処理装置。
JP2003337685A 2003-09-29 2003-09-29 データ処理装置 Pending JP2005107666A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2003337685A JP2005107666A (ja) 2003-09-29 2003-09-29 データ処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003337685A JP2005107666A (ja) 2003-09-29 2003-09-29 データ処理装置

Publications (1)

Publication Number Publication Date
JP2005107666A true JP2005107666A (ja) 2005-04-21

Family

ID=34533443

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003337685A Pending JP2005107666A (ja) 2003-09-29 2003-09-29 データ処理装置

Country Status (1)

Country Link
JP (1) JP2005107666A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009054150A (ja) * 2007-08-28 2009-03-12 Internatl Business Mach Corp <Ibm> 予測されなかったブランチに対する命令バッファの深さを動的に管理するための方法および装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009054150A (ja) * 2007-08-28 2009-03-12 Internatl Business Mach Corp <Ibm> 予測されなかったブランチに対する命令バッファの深さを動的に管理するための方法および装置

Similar Documents

Publication Publication Date Title
JP2875909B2 (ja) 並列演算処理装置
JP5512803B2 (ja) ベクトル命令を取り扱うためのデータ処理装置および方法
JP3919802B2 (ja) プロセッサ、およびプロセッサにおいて命令演算をスケジューリングするための方法
US5511172A (en) Speculative execution processor
KR101459536B1 (ko) 사전 통지 기법들을 사용하여 프로그램의 순차적 흐름을 변경하기 위한 방법들 및 장치
JP5335946B2 (ja) 電力的に効率的な命令プリフェッチ機構
KR100900364B1 (ko) 인스트럭션 실행 디바이스, 인스트럭션 실행 방법 및 컴퓨터 판독가능 메모리 매체
US8943300B2 (en) Method and apparatus for generating return address predictions for implicit and explicit subroutine calls using predecode information
JP4585005B2 (ja) 分岐訂正によるプリデコードのエラー処理
JP3760041B2 (ja) 分岐予測する情報処理装置
JP2004533695A (ja) 分岐目標を予測する方法、プロセッサ、及びコンパイラ
JP3977931B2 (ja) データプロセッサにおける条件分岐実行を制御するための方法および装置
EP1974254B1 (en) Early conditional selection of an operand
US6851033B2 (en) Memory access prediction in a data processing apparatus
US6735687B1 (en) Multithreaded microprocessor with asymmetrical central processing units
US20040172518A1 (en) Information processing unit and information processing method
US20030204705A1 (en) Prediction of branch instructions in a data processing apparatus
US6243805B1 (en) Programming paradigm and microprocessor architecture for exact branch targeting
US7519799B2 (en) Apparatus having a micro-instruction queue, a micro-instruction pointer programmable logic array and a micro-operation read only memory and method for use thereof
JP3835764B2 (ja) プロセッサおよび記録媒体
JP2005107666A (ja) データ処理装置
JP5104862B2 (ja) 命令実行制御装置及び命令実行制御方法
JP3915019B2 (ja) Vliwプロセッサ、プログラム生成装置、および記録媒体
JPH09190348A (ja) 命令プリフェッチバッファ制御方法、命令プリフェッチバッファ制御装置、及び命令プリフェッチバッファフラッシュ方法
KR100635111B1 (ko) 지정 가능한 지연 슬롯과 스쿼싱 조건을 가지는 분기 처리프로세서