以下、実施形態を図面を用いて説明する。
図1は、一実施形態におけるプロセッサの例を示している。例えば、プロセッサは、パイプライン処理を実施する。プロセッサは、例えば、分岐予測装置BPRE1(図の波線で囲んだ部分)、プログラムカウンタPC、命令メモリIMEM、デコーダDEC、レジスタリード部RPD、算術論理演算ユニットALUおよびパイプラインレジスタPRG1、PRG2、PRG3を有している。以下、算術論理演算ユニットALUをALUとも称する。
プログラムカウンタPCは、例えば、プロセッサが実行する命令のアドレスを示す値(以下、PC値とも称する)を、命令メモリIMEMおよび分岐予測装置BPRE1に出力する。例えば、プログラムカウンタPCの値(PC値)は、プロセッサが命令を実行する度に、増加する。あるいは、PC値は、分岐予測が実行されたとき、分岐予測装置BPRE1により予測された分岐先アドレスに設定される。なお、PC値は、パイプラインレジスタPRG1、PRG2、PRG3に順次転送される。
命令メモリIMEMは、PC値が示すアドレスの命令を、パイプラインレジスタPRG1に出力する。これにより、命令メモリIMEMから命令がフェッチ(取得)される。デコーダDECは、パイプラインレジスタPRG1に保持されている命令(命令メモリIMEMからフェッチした命令)を取得し、命令メモリIMEMからフェッチした命令を解読する。そして、デコーダDECは、解読結果を、パイプラインレジスタPRG2および分岐予測装置BPRE1に出力する。これにより、例えば、分岐予測装置BPRE1は、命令メモリIMEMからフェッチされた命令が分岐命令か否か判断できる。
レジスタリード部RDPは、例えば、デコーダDECの解読結果をパイプラインレジスタPRG2から取得し、デコーダDECの解読結果に基づいて、命令のオペランド等をレジスタから読み出す。そして、レジスタリード部RDPは、レジスタから読み出したオペランド等をパイプラインレジスタPRG3に出力する。ALUは、例えば、パイプラインレジスタPRG3から命令のオペランド等を取得し、四則演算や論理演算等を実行する。このように、プロセッサは、パイプライン処理を実施する。
分岐予測装置BPRE1は、間隔記憶部DMEM1、予測部PRED、予測制御部PCNT1、カウンタCOTおよび更新部UPP1を有し、分岐命令の結果を予測する。例えば、間隔記憶部DMEM1、予測部PREDおよび予測制御部PCNT1は、パイプライン処理の命令フェッチ処理(命令メモリIMEMから命令を取得する処理)が実施されるステージと同じステージで動作する。また、例えば、カウンタCOTおよび更新部UPP1は、パイプライン処理のデコード処理(命令を解読する処理)が実施されるステージと同じステージで動作する。
間隔記憶部DMEM1は、分岐命令に対応して分岐命令の間隔(以下、分岐命令間隔とも称する)を記憶する。例えば、間隔記憶部DMEM1は、分岐命令のPC値の一部(例えば、PC値の下位ビット)をアドレスとして、分岐命令間隔を記憶する。あるいは、間隔記憶部DMEM1は、分岐命令のPC値から生成されるハッシュ値をアドレスとして、分岐命令間隔を記憶する。
予測制御部PCNT1は、予測部PREDの履歴記憶部HMEMを参照するタイミングを、間隔記憶部DMEM1に記憶された分岐命令間隔に基づいて決定する。例えば、予測制御部PCNT1は、命令フェッチ処理(命令メモリIMEMから命令を取得する処理)が実施される度にカウントアップするカウンタ(図1のカウンタCOTとは別のカウンタ)を有している。すなわち、予測制御部PCNT1内のカウンタは、PC値が変化する度にカウントアップする。そして、予測制御部PCNT1は、間隔記憶部DMEM1から読み出した分岐命令間隔と予測制御部PCNT1内のカウンタの値とが一致したとき、制御部PCNT1内のカウンタをリセットする。
また、予測制御部PCNT1は、間隔記憶部DMEM1から読み出した分岐命令間隔と予測制御部PCNT1内のカウンタの値とが一致したとき、例えば、履歴記憶部HMEMへの参照タイミングであることを示す情報を予測部PREDに通知する。さらに、予測制御部PCNT1は、間隔記憶部DMEM1から読み出した分岐命令間隔と予測制御部PCNT1内のカウンタの値とが一致したとき、例えば、次の分岐命令までの間隔を示す分岐命令間隔を間隔記憶部DMEM1から読み出す。
すなわち、間隔記憶部DMEM1は、例えば、履歴記憶部HMEMが予測部PREDにより参照されるとき、予測制御部PCNT1により参照される。このように、予測制御部PCNT1は、間隔記憶部DMEM1から読み出した分岐命令間隔に基づいて、間隔記憶部DMEM1および履歴記憶部HMEMを参照するタイミングを決定する。すなわち、予測制御部PCNT1は、間隔記憶部DMEM1から読み出した分岐命令間隔に基づいて、命令が分岐命令か否かを予測する。
予測部PREDは、分岐命令の結果を記憶する履歴記憶部HMEMを有している。履歴記憶部HMEMは、例えば、分岐命令による分岐が成立したか否かを示す分岐方向を記憶する方向履歴メモリと、分岐命令による分岐が成立したときの分岐先アドレスを記憶する分岐先履歴メモリとを有している。なお、履歴記憶部HMEMは、分岐先履歴メモリを含まずに構成されてもよい。
例えば、予測部PREDは、履歴記憶部HMEMに記憶されている分岐方向の情報に基づいて、分岐命令による分岐が成立するか否かを予測する。そして、予測部PREDは、分岐命令による分岐が成立すると予測したとき、履歴記憶部HMEMに記憶されている分岐先アドレスを、プログラムカウンタPCに通知する。これにより、分岐先アドレスがプログラムカウンタPCに設定される。このように、予測部PREDは、履歴記憶部HMEMに記憶されている情報を参照して、分岐予測を実施する。
なお、上述したように、履歴記憶部HMEMが参照されるタイミングは、予測制御部PCNT1により制御される。例えば、予測部PREDは、履歴記憶部HMEMへの参照タイミングであることを示す情報を予測制御部PCNT1から受けたとき、履歴記憶部HMEMを参照する。すなわち、予測部PREDは、間隔記憶部DMEM1に記憶された分岐命令間隔で、履歴記憶部HMEMを参照する。これにより、予測部PREDは、命令が解読される前に分岐予測を実施するときにも、履歴記憶部HMEM等への不要なアクセスを低減できる。したがって、この実施形態では、履歴記憶部HMEMや間隔記憶部DMEM1への不要なアクセスを低減でき、消費電力を低減できる。
カウンタCOTは、プログラムが実行されたときの分岐命令の間隔を計測する。例えば、カウンタCOTは、デコーダDECにより解読された命令が分岐命令のときに、更新部UPP1によりリセットされる。すなわち、カウンタCOTは、分岐命令が実行される度にリセットされる。そして、カウンタCOTは、例えば、パイプラインレジスタPRG1に保持されているPC値が変化する度に、カウントアップする。すなわち、カウンタCOTは、命令が命令メモリIMEMからフェッチされる度に、カウントアップする。更新部UPP1は、間隔記憶部DMEM1の内容を、カウンタCOTにより計測された分岐命令間隔に基づいて更新する。
なお、分岐予測装置BPRE1の構成は、この例に限定されない。例えば、予測制御部PCNT1は、間隔記憶部DMEM1へのアクセスを停止可能に構成され、間隔記憶部DMEM1へのアクセスを分岐命令の連続する期間に停止してもよい。間隔記憶部DMEM1へのアクセスが停止されている期間では、例えば、分岐予測は命令毎に実施される。あるいは、予測制御部PCNT1は、例えば、予測部PRED内に設けられてもよい。
また、間隔記憶部DMEM1は、予測部PRED内に設けられてもよい。例えば、間隔記憶部DMEM1は、履歴記憶部HMEMの方向履歴メモリや分岐先履歴メモリのビット幅に分岐命令間隔を記憶するためのビットを追加して構成されてもよい。あるいは、間隔記憶部DMEM1は、予測部PREDにより参照されてもよい。例えば、予測部PREDが間隔記憶部DMEM1から分岐命令間隔を読み出す構成では、予測部PREDは、間隔記憶部DMEM1から読み出した分岐命令間隔を、予測制御部PCNT1に通知する。
また、カウンタCOTは、更新部UPP1内に設けられてもよい。さらに、例えば、パイプライン処理の演算処理(ALUの処理)のステージで分岐命令の判定を実施するプロセッサに搭載される分岐予測装置BPRE1では、カウンタCOTおよび更新部UPP1は、演算処理のステージと同じステージで動作するように構成されてもよい。
図2は、図1に示した分岐予測装置BPRE1の一例を示している。なお、図2では、更新部UPP1について説明する。図2の符号PC1、BRPCは、パイプラインレジスタPRG1およびレジスタREG1にそれぞれ保持されているPC値を示している。また、命令INSTは、例えば、命令メモリIMEMからフェッチされた命令を示すコードである。
更新部UPP1は、レジスタREG1および更新制御部UCNT1を有している。レジスタREG1は、例えば、分岐命令のPC値を保持する。例えば、レジスタREG1のレジスタ値BRPC(PC値)は、分岐命令が実行される度に更新される。更新制御部UCNT1は、命令INSTが分岐命令か否かを示す情報をデコーダDECから受けるとともに、カウンタCOTのカウンタ値WCTをカウンタCOTから受ける。そして、更新制御部UCNT1は、命令が分岐命令のとき、カウンタCOTをリセットするとともに、間隔記憶部DMEM1の内容を更新する。
例えば、更新制御部UCNT1は、レジスタ値BRPCに基づいて、間隔記憶部DMEM1の更新対象のアドレス(PC値の下位ビットやハッシュ値等)を算出する。そして、更新制御部UCNT1は、更新対象のアドレスのデータを、カウンタ値WCT(分岐命令間隔)に更新する。また、更新部UPP1は、例えば、間隔記憶部DMEM1の内容を更新する際に、レジスタ値BRPCを、パイプラインレジスタPRG1に保持されているPC値(PC1)に更新する。これにより、レジスタ値BRPCは、分岐命令が実行される度に更新される。
図3は、図1に示した間隔記憶部DMEM1の最初の更新動作の一例を示している。図3では、プログラムカウンタPCの値(0x0024等)を16進で示している。また、図3の太い線で囲んだ命令brは、分岐命令を示している。そして、命令otherは、分岐命令以外の命令を示している。図3の○印は、分岐命令による分岐の成立(taken)を示し、×印は、分岐命令による分岐の不成立(not taken)を示している。図3の“−”は、レジスタREG1に意味のない値(初期値)が書き込まれていることを示している。また、間隔記憶部DMEM1の初期値は、例えば、“0”に設定されている。なお、この初期値は、特に意味はない。
PC値が“0x0028”のとき、分岐命令brが実行される。このとき、カウンタ値WCTは、“0”にリセットされる。また、レジスタ値BRPCは、“0x0028”に更新される。PC値“0x0028”の分岐命令brによる分岐が成立したため、“0x0100”のPC値の命令が分岐命令brの次に実行される。このとき、カウンタ値WCTは、“0”から“1”にカウントアップする。
PC値が“0x0104”のとき、PC値“0x0028”の分岐命令brの次の分岐命令brが実行される。このとき、レジスタ値BRPC(“0x0028”)に基づくアドレスの間隔記憶部DMEM1のデータは、カウンタ値WCTの“1”に更新される(図3の(a))。そして、カウンタ値WCTが“0”にリセットされ、レジスタ値BRPCが“0x0028”から“0x0104”に更新される。
PC値“0x0104”の分岐命令brによる分岐が不成立のため、PC値“0x0108”の命令が分岐命令brの次に実行される。このとき、カウンタ値WCTは、“0”から“1”にカウントアップする。プログラムは、次の分岐命令brが実行されるまで、連続したアドレスの順番で実行される。この間、カウンタ値WCTは、命令が実行される度にカウントアップする。なお、レジスタ値BRPCは、“0x0104”に保持されている。
PC値が“0x0114”のとき、PC値“0x0104”の分岐命令brの次の分岐命令brが実行される。このとき、レジスタ値BRPC(“0x0104”)に基づくアドレスの間隔記憶部DMEM1のデータは、カウンタ値WCTの“3”に更新される(図3の(b))。そして、カウンタ値WCTが“0”にリセットされ、レジスタ値BRPCが“0x0104”から“0x0114”に更新される。この動作により、間隔記憶部DMEM1は、分岐命令に対応して分岐命令間隔を記憶する。
図4は、図1に示した分岐予測装置BPRE1の動作の一例を示している。なお、図4は、例えば、図3に示した更新動作が実施された後の分岐予測装置BPRE1の動作の一例を示している。図4の○印および×印の意味は、図3と同じである。なお、図4の例では、履歴記憶部HMEMは、分岐命令による分岐が成立したか否かを示す分岐方向を記憶する方向履歴メモリDIRMと、分岐命令による分岐が成立したときの分岐先アドレスを記憶する分岐先履歴メモリDESMとを有している。図4の“−”は、分岐先履歴メモリDESMに分岐先アドレスが記憶されていないことを示している。また、図4の網掛けは、履歴記憶部HMEMおよび間隔記憶部DMEM1が参照されない期間(命令サイクル)を示している。
PC値が“0x0028”のとき、分岐予測装置BPRE1は、方向履歴メモリDIRMおよび分岐先履歴メモリDESMを参照して、分岐予測を実施する。例えば、分岐予測装置BPRE1は、PC値“0x0028”に基づくアドレスの方向履歴メモリDIRMの情報が分岐成立(taken)を示しているため、PC値“0x0028”の分岐命令brによる分岐が成立すると予測する。そして、分岐予測装置BPRE1は、分岐先履歴メモリDESMに記憶されている分岐先アドレス“0x0100”をプログラムカウンタPCに設定する。また、分岐予測装置BPRE1は、PC値“0x0028”の分岐命令brの次の分岐命令brまでの間隔を示す分岐命令間隔“1”を、PC値“0x0028”に基づくアドレスの間隔記憶部DMEM1から読み出す。
分岐予測装置BPRE1は、間隔記憶部DMEM1から読み出した分岐命令間隔が“1”であるため、PC値“0x0028”の次の命令では、分岐予測を実施しない。すなわち、PC値が“0x0100”の期間T10では、分岐予測装置BPRE1は、分岐予測を実施しない。したがって、PC値が“0x0100”の期間T10では、間隔記憶部DMEM1、方向履歴メモリDIRMおよび分岐先履歴メモリDESMは、参照されない。
PC値が“0x0104”のとき、分岐予測装置BPRE1は、方向履歴メモリDIRMおよび分岐先履歴メモリDESMを参照して、分岐予測を実施する。この際、分岐予測装置BPRE1は、PC値“0x0104”に基づくアドレスの間隔記憶部DMEM1から分岐命令間隔“3”を読み出す。分岐予測装置BPRE1は、間隔記憶部DMEM1から読み出した分岐命令間隔が“3”であるため、PC値“0x0104”の後続3命令は分岐命令でないと予測する。したがって、PC値が“0x0108”から“0x0110”の期間T20では、分岐予測装置BPRE1は、分岐予測を実施しない。すなわち、PC値が“0x0108”から“0x0110”の期間T20では、間隔記憶部DMEM1、方向履歴メモリDIRMおよび分岐先履歴メモリDESMは、参照されない。
PC値が“0x0114”のとき(“0x0108”から3命令後)、分岐予測装置BPRE1は、方向履歴メモリDIRMおよび分岐先履歴メモリDESMを参照して分岐予測を実施するとともに、間隔記憶部DMEM1から分岐命令間隔を読み出す。間隔記憶部DMEM1から読み出された分岐命令間隔が“7”であるため、PC値“0x0114”の後続7命令の期間T30では、間隔記憶部DMEM1、方向履歴メモリDIRMおよび分岐先履歴メモリDESMは、参照されない。
このように、分岐予測装置BPRE1は、命令が分岐命令でないと予測される期間T10、T20、T30では、分岐予測を実施しない。したがって、この実施形態では、不要な分岐予測の回数を低減でき、消費電力を低減できる。例えば、命令が分岐命令でないと予測される期間T10、T20、T30では、間隔記憶部DMEM1、方向履歴メモリDIRMおよび分岐先履歴メモリDESMは参照されない。このため、この実施形態では、間隔記憶部DMEM1、方向履歴メモリDIRMおよび分岐先履歴メモリDESMへの不要なアクセスを低減でき、消費電力を低減できる。
ここで、分岐命令でない命令が分岐命令と予測されたとき(例えば、PC値“0x0104”の命令が分岐命令でないとき)には、履歴記憶部HMEM等が参照されるため、電力は消費されるが、誤動作にはならない。なお、この場合でも、命令毎に分岐予測が実施される構成に比べて、消費電力を低減できる。また、分岐命令でないと予測した期間に分岐命令brが実行されたとき(例えば、PC値“0x0110”の命令が分岐命令のとき)には、分岐予測が実施されず、分岐が不成立とみなされる。このとき、プロセッサのサイクル性能は劣化するが、誤動作にはならない。したがって、間隔記憶部DMEM1に記憶されている分岐命令間隔が実際の分岐命令間隔と異なるときにも、誤動作にはならない。
図5は、3ビットのデータ幅を有する間隔記憶部DMEM1の状態の一例を示している。なお、図5は、分岐命令間隔が“10”のときの間隔記憶部DMEM1の状態の一例を示している。
間隔記憶部DMEM1のデータ幅で記憶できる最大値(図5の例では、“7”)以上の分岐命令間隔(図5の例では、“10”)は、複数回(複数個所)に分けて記憶される。例えば、PC値“0x0028”の分岐命令brの次の分岐命令br(PC値“0x0128”)までの間隔が“10”のとき、PC値“0x0028”に基づくアドレスの間隔記憶部DMEM1には、“7”が記憶される。そして、PC値“0x0028”の次のPC値“0x0100”から7命令後のPC値“0x011C”に基づくアドレスの間隔記憶部DMEM1には、“2”が記憶される。これにより、分岐予測装置BPRE1は、PC値“0x0128”の分岐命令に対して、分岐予測を実施することができる。
例えば、PC値が“0x0028”のとき、分岐予測装置BPRE1は、PC値“0x0028”に基づくアドレスの間隔記憶部DMEM1に記憶されている分岐命令間隔“7”を読み出す。分岐予測装置BPRE1は、間隔記憶部DMEM1から読み出した分岐命令間隔が“7”であるため、“0x0028”の後続7命令は分岐命令でないと予測する。したがって、PC値が“0x0100”から“0x0118”の7命令の間では、分岐予測装置BPRE1は、分岐予測を実施しない。
そして、PC値が“0x011C”のとき(“0x0100”から7命令後)、PC値“0x011C”に基づくアドレスの間隔記憶部DMEM1に記憶されている分岐命令間隔“2”を読み出す。また、分岐予測装置BPRE1は、PC値“0x011C”の命令を分岐命令と予測しているため、分岐予測を実施する。なお、上述したように、分岐命令でない命令が分岐命令と予測されたときにも誤動作にはならない。分岐予測装置BPRE1は、間隔記憶部DMEM1から読み出した分岐命令間隔が“2”であるため、“0x011C”の後続2命令は分岐命令でないと予測する。
PC値が“0x0128”のとき(“0x0120”から2命令後)、PC値“0x0128”に基づくアドレスの間隔記憶部DMEM1に記憶されている分岐命令間隔“3”を読み出す。また、分岐予測装置BPRE1は、PC値“0x0128”の命令を分岐命令と予測しているため、分岐予測を実施する。このように、この実施形態では、2つの分岐命令の間隔が間隔記憶部DMEM1に記憶できる最大値以上のときにも、2つの分岐命令のそれぞれに対して、分岐予測を実施できる。
なお、間隔記憶部DMEM1のデータ幅は、3ビットに限定されない。また、例えば、3ビットのカウンタCOTを用いた構成においても、図5と同様の動作により、カウンタCOTの最大値以上の分岐命令間隔に対応できる。このように、この実施形態では、間隔記憶部DMEM1のデータ幅やカウンタCOTのビット幅を分岐命令間隔の最大値以下にできるため、分岐予測装置BPRE1の回路規模を小さくできる。
図6は、図2に示した更新部UPP1およびカウンタCOTの動作の一例を示している。処理S100−S140は、例えば、デコード処理が実施される度に実施される。なお、図6の符号DMAXは、間隔記憶部DMEM1のデータ幅で記憶できる最大値を示している。また、図6の符号BRPC’は、レジスタ値BRPCから算出されるアドレス(レジスタ値BRPCの下位ビットやハッシュ値等)を示している。
処理S100では、例えば、更新部UPP1の更新制御部UCNT1は、デコーダDECから受けた情報に基づいて、デコード処理された命令が分岐命令か否かを判定する。命令が分岐命令でないとき(処理S100のNo)、更新部UPP1の動作は、処理S110に移る。処理S110では、更新制御部UCNT1は、カウンタ値WCTが最大値DMAXと一致するか否かを判定する。
カウンタ値WCTが最大値DMAXでないとき(処理S110のNo)、処理S120において、カウンタCOTのカウンタ値WCTがカウントアップする。これにより、カウンタCOTは、命令が命令メモリIMEMからフェッチされる度に、カウントアップする。一方、カウンタ値WCTが最大値DMAXのとき(処理S110のYes)、更新部UPP1の動作は、処理S130に移る。また、処理S100において、命令が分岐命令であると判定されたとき(処理S100のYes)、更新部UPP1の動作は、処理S130に移る。
処理S130では、更新制御部UCNT1は、間隔記憶部DMEM1を更新する。例えば、更新制御部UCNT1は、更新する間隔記憶部DMEM1のアドレスADRをレジスタ値BRPCから算出する。そして、更新制御部UCNT1は、カウンタ値WCTをデータDATとして、間隔記憶部DMEM1のアドレスADR(BRPC’)の内容を更新する。これにより、間隔記憶部DMEM1は、分岐命令が実行される度に更新される。このため、実行される命令が分岐命令か否かの予測精度を向上できる。
なお、この実施形態では、分岐命令間隔が最大値DMAX以上のとき、処理S110および処理S130により、分岐命令(例えば、図5のPC値“0x0028”の分岐命令)に対応するアドレスに最大値DMAXを記憶できる。そして、間隔記憶部DMEM1に最大値DMAXを更新したときのPC値(例えば、図5のPC値“0x011C”)を起点にして、次に実施される分岐命令までの間隔が算出される。
処理S140では、更新制御部UCNT1は、レジスタREG1およびカウンタCOTを初期化する。例えば、更新制御部UCNT1は、パイプラインレジスタPRG1に保持されているPC値(PC1)を、レジスタREG1のレジスタ値BRPCに設定する。また、更新制御部UCNT1は、カウンタCOTのカウンタ値WCTを“0”にリセットする。このように、カウンタCOTは、間隔記憶部DMEM1の内容が更新される度に、リセットされる。
なお、処理S140では、例えば、処理S110の判定結果(Yes)により処理S130が実施されたときには、レジスタ値BRPCは、間隔記憶部DMEM1を最大値DMAXに更新したときのPC値(例えば、図5のPC値“0x011C”)に設定される。これにより、この実施形態では、間隔記憶部DMEM1の最大値DMAX以上の分岐命令間隔を、複数回(複数個所)に分けて記憶できる。
このように、分岐命令が実行される度に間隔記憶部DMEM1の内容を更新する構成は、更新動作が単純である。このため、分岐予測装置BPRE1の構成を簡易にできる。なお、更新部UPP1の動作は、この例に限定されない。例えば、更新部UPP1の動作は、カウンタ値WCTが最大値DMAXになったとき(処理S110のYes)、処理S130、S140を実施せずに、終了してもよい。これにより、カウンタ値WCTは、間隔記憶部DMEM1が更新されるまで、最大値DMAXに維持される。この場合、更新部UPP1は、分岐命令間隔が最大値DMAX以上のとき、分岐命令間隔を複数回(複数個所)に分けずに、最大値DMAXを分岐命令間隔として間隔記憶部DMEM1に記憶する。この結果、分岐命令でない命令に対応するアドレス(例えば、図5のPC値“0x011C”に対応するアドレス)には、分岐命令間隔は記憶されない。
ここで、例えば、リセット後の先頭の分岐命令に対するデコード処理が実施された時点では、レジスタ値BRPCやカウンタ値WCTは、意味のない値である。このため、リセット後の先頭の分岐命令では、意味のない値が間隔記憶部DMEM1に書き込まれる。この意味のない値の書き込みは、リセット後の先頭の分岐命令のみで発生するため、特に問題ない。なお、更新部UPP1は、書き込み不可を示すフラグ等を有し、意味のない値の書き込みを防止してもよい。例えば、フラグは、リセット後の先頭の分岐命令の次の分岐命令に対するデコード処理が実施されるまで、間隔記憶部DMEM1への書き込み不可を示している。
以上、この実施形態では、分岐予測装置BPRE1は、分岐命令間隔が記憶される間隔記憶部DMEM1を有している。間隔記憶部DMEM1に記憶された分岐命令間隔は、履歴記憶部HMEMおよび間隔記憶部DMEM1を参照するタイミングを決定するために使用される。例えば、予測制御部PCNT1は、履歴記憶部HMEMおよび間隔記憶部DMEM1を参照するタイミングを、間隔記憶部DMEM1から読み出した分岐命令間隔に基づいて決定する。これにより、この実施形態では、命令が解読される前に分岐予測を実施するときにも、履歴記憶部HMEMおよび間隔記憶部DMEM1への不要なアクセスを低減でき、消費電力を低減できる。したがって、この実施形態の分岐予測装置BPRE1は、高速処理の必要なプロセッサに搭載されたときにも、消費電力を低減できる。
図7は、別の実施形態における間隔記憶部DMEM2の一例を示している。上述した実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。なお、図7では、PC値“0x0028”の分岐命令brにより実行されなかったPC値および命令を破線で囲んだ枠内に示している。
この実施形態の間隔記憶部DMEM2は、分岐命令による分岐が成立したときの分岐命令間隔と分岐命令による分岐が不成立のときの分岐命令間隔との両方を記憶する。分岐予測装置BPRE1のその他の構成は、上述した実施形態と同じである。また、この実施形態の分岐予測装置BPRE1が搭載されるプロセッサは、上述した実施形態と同じである。なお、例えば、間隔記憶部DMEM2は、履歴記憶部HMEMの方向履歴メモリや分岐先履歴メモリのビット幅に分岐命令間隔を記憶するためのビットを追加して構成されてもよい。
PC値“0x0028”に基づくアドレスの間隔記憶部DMEM2には、例えば、分岐命令brによる分岐が成立したときの分岐命令間隔“1”と分岐命令brによる分岐が不成立のときの分岐命令間隔“2”とがそれぞれ記憶される。例えば、予測制御部PCNT1は、PC値“0x0028”に基づくアドレスの方向履歴メモリDIRMの情報が分岐成立(taken)を示しているため、分岐命令による分岐が成立したときの分岐命令間隔“1”を間隔記憶部DMEM2から読み出す。したがって、分岐予測装置BPRE1は、“0x0028”の次の命令は分岐命令でないと予測する。図7の例では、方向履歴メモリDIRMの情報に基づいて参照される間隔記憶部DMEM2の分岐命令間隔を太い線で囲んで示している。
なお、間隔記憶部DMEM2には、PC値“0x0028”の分岐命令brによる分岐が不成立のときの分岐命令間隔として“2”が記憶されている。このため、PC値“0x0028”の分岐命令brによる分岐が不成立のときには、分岐予測装置BPRE1は、“0x0028”の後続2命令は分岐命令でないと予測する。例えば、予測制御部PCNT1は、PC値“0x0028”に基づくアドレスの方向履歴メモリDIRMの情報が分岐の不成立(not taken)を示しているときには、“0x0028”の後続2命令は分岐命令でないと予測する。したがって、分岐予測装置BPRE1は、PC値が“0x0034”のとき(“0x002C”から2命令後)、分岐予測を実施する。
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。さらに、この実施形態では、間隔記憶部DMEM2は、分岐命令による分岐が成立したときの分岐命令間隔と分岐命令による分岐が不成立のときの分岐命令間隔との両方を記憶する。このため、実行される命令が分岐命令か否かの予測精度を、分岐が成立するか否かにかかわらず、向上できる。
これにより、この実施形態では、例えば、分岐命令を分岐命令でないと予測する頻度を低減できるため、プロセッサのサイクル性能を向上できる。あるいは、この実施形態では、分岐命令以外の命令を分岐命令であると予測する頻度を低減できるため、履歴記憶部HMEMおよび間隔記憶部DMEM1への不要なアクセスをさらに低減できる。すなわち、この実施形態では、プロセッサのサイクル性能が低下することを防止しつつ、消費電力を低減できる。
図8は、別の実施形態における分岐予測装置BPRE2の一例を示している。上述した実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。図8の符号DISTは、パイプラインレジスタPRG1に保持されている分岐命令間隔を示している。また、符号BRDISTは、レジスタREG2に保持されている分岐命令間隔を示している。
この実施形態の分岐予測装置BPRE2の構成は、図1に示した予測制御部PCNT1および更新部UPP1の代わりに予測制御部PCNT2および更新部UPP2がそれぞれ設けられている。分岐予測装置BPRE2のその他の構成は、図1−図6で説明した実施形態と同じである。また、分岐予測装置BPRE2が搭載されるプロセッサは、図1−図6で説明した実施形態と同じである。
予測制御部PCNT2は、例えば、間隔記憶部DMEM1から読み出した分岐命令間隔DISTを、パイプラインレジスタPRG1に出力する。予測制御部PCNT2のその他の構成および動作は、予測制御部PCNT1と同じである。なお、予測制御部PCNT2は、例えば、間隔記憶部DMEM1から分岐命令間隔DISTを読み出さない命令では、パイプラインレジスタPRG1に保持される分岐命令間隔DISTを“0”に設定する。
更新部UPP2は、更新部UPP1にレジスタREG2および比較部COMが追加され、図2に示した更新制御部UCNT1の代わりに更新制御部UCNT2が設けられている。レジスタREG2は、例えば、分岐命令間隔DISTを保持する。例えば、レジスタREG2のレジスタ値BRDIST(DIST)は、分岐命令が実行される度に更新される。
比較部COMは、カウンタCOTにより計測された分岐命令間隔とレジスタREG2のレジスタ値BRDISTとを比較する。なお、比較部COMは、更新制御部UCNT2内に設けられてもよい。更新部UPP2は、例えば、カウンタCOTにより計測された分岐命令間隔と間隔記憶部DMEM1に記憶されている分岐命令間隔BRDISTとが同じときには、間隔記憶部DMEM1を更新しない。更新部UPP2のその他の構成および動作は、図1−図6で説明した実施形態と同じである。
図9は、図8に示した更新部UPP2およびカウンタCOTの動作の一例を示している。処理S100−S142は、例えば、デコード処理が実施される度に実施される。図9に示した動作は、図6に示した動作に処理S124が追加され、処理S140の代わりに処理S142を実施する。更新部UPP2およびカウンタCOTのその他の動作は、図6に示した動作と同じである。
処理S124は、命令が分岐命令のとき(処理S100のYes)に実施される。あるいは、処理S124は、命令が分岐命令以外のときでカウンタ値WCTが最大値DMAXのとき(処理S110のYes)、実施される。処理S124では、例えば、比較部COMは、カウンタ値WCTとレジスタ値BRDISTとを比較する。カウンタ値WCTとレジスタ値BRDISTとが一致しないとき(処理S124のNo)、更新制御部UCNT2は、処理S130において、間隔記憶部DMEM1を更新する。
一方、カウンタ値WCTとレジスタ値BRDISTとが一致したとき(処理S124のYes)、更新制御部UCNT2は、処理S142において、レジスタREG1、REG2およびカウンタCOTを初期化する。例えば、更新制御部UCNT2は、パイプラインレジスタPRG1に保持されているPC値(PC1)を、レジスタREG1のレジスタ値BRPCに設定する。また、更新制御部UCNT2は、パイプラインレジスタPRG1に保持されている分岐命令間隔DISTを、レジスタREG2のレジスタ値BRDISTに設定する。さらに、更新制御部UCNT2は、カウンタCOTのカウンタ値WCTを“0”にリセットする。
このように、更新制御部UCNT2は、カウンタ値WCTとレジスタ値BRDISTとが一致したときには、間隔記憶部DMEM1を更新せずに、レジスタREG1、REG2およびカウンタCOTを初期化する。これにより、この実施形態では、間隔記憶部DMEM1の更新回数を低減できる。この結果、消費電力を低減できる。
なお、更新部UPP2の動作は、この例に限定されない。例えば、更新部UPP2の動作は、カウンタ値WCTが最大値DMAXになったとき(処理S110のYes)、処理S124、S130、S142を実施せずに、終了してもよい。この場合、更新部UPP2は、分岐命令間隔が最大値DMAX以上のとき、分岐命令間隔を複数回(複数個所)に分けずに、最大値DMAXを分岐命令間隔として間隔記憶部DMEM1に記憶する。
また、例えば、更新部UPP2は、処理S124において、カウンタ値WCTがレジスタ値BRDIST以上か否かを判定してもよい。例えば、更新制御部UCNT2は、カウンタ値WCTがレジスタ値BRDISTより小さいとき、処理S130において、間隔記憶部DMEM1を更新する。これにより、カウンタ値WCTがレジスタ値BRDIST以上のときには、間隔記憶部DMEM2は、更新されない。
あるいは、更新部UPP2は、図10に示すように、間隔記憶部DMEM1を更新する際に、既に記憶されている分岐命令間隔を上限にして、分岐命令間隔を複数回(複数個所)に分けて更新してもよい。
図10は、図8に示した更新部UPP2およびカウンタCOTの動作の別の例を示している。例えば、図10の動作は、カウンタCOTの計測に基づく分岐命令間隔(以下、実測の分岐命令間隔とも称する)が間隔記憶部DMEM1に記憶されている分岐命令間隔(以下、更新前の分岐命令間隔とも称する)より大きいとき、分岐命令間隔を複数回(複数個所)に分けて記憶する。例えば、更新前の分岐命令間隔に基づいて参照される間隔記憶部DMEM1のアドレス(以下、中継アドレスとも称する)に、実測の分岐命令間隔と更新前の分岐命令間隔との差分に基づいて算出される間隔が書き込まれる。
処理S100−S142は、例えば、デコード処理が実施される度に実施される。図10に示した動作は、図9に示した動作に処理S112、S114が追加されている。更新部UPP2およびカウンタCOTのその他の動作は、図9に示した動作と同じである。
処理S112は、命令が分岐命令以外のときでカウンタ値WCTが最大値DMAXでないとき(処理S110のNo)、実施される。処理S112では、更新制御部UCNT2は、カウンタ値WCTが“0”か否かを判定する。これにより、意味の無い値がレジスタ値BRDISTに保持されているときに、処理S114が実施されることを防止できる。
カウンタ値WCTが“0”のとき(処理S112のYes)、カウンタ値WCTは、処理S120において、カウントアップする。一方、カウンタ値WCTが“0”でないとき(処理S112のNo)、更新部UPP2の動作は、処理S114に移る。処理S114では、更新制御部UCNT2は、カウンタ値WCTとレジスタ値BRDISTとが一致するか否かを判定する。カウンタ値WCTとレジスタ値BRDISTとが一致しないとき(処理S114のNo)、カウンタ値WCTは、処理S120において、カウントアップする。
一方、カウンタ値WCTとレジスタ値BRDISTとが一致したとき(処理S114のYes)、更新制御部UCNT2は、処理S142において、レジスタREG1、REG2およびカウンタCOTを初期化する。これにより、カウンタCOTの計測に基づく分岐命令間隔が更新前の分岐命令間隔より大きいとき、カウンタ値WCTとレジスタ値BRDISTとが一致したときのPC値(以下、中継PC値とも称する)を起点にして、次に実施される分岐命令までの間隔(差分)が計測される。この計測により得られる間隔は、実測の分岐命令間隔と更新前の分岐命令間隔との差分に基づいて算出される間隔に対応する。
そして、中継PC値の後の分岐命令が実施されるとき(処理S100のYes)、例えば、処理S130において、更新前の分岐命令間隔に基づいて参照される間隔記憶部DMEM1の中継アドレス(BRPC’)に、中継PC値を起点にして計測されたカウンタ値WCTが書き込まれる。このように、更新部UPP2は、間隔記憶部DMEM1の内容を既に記憶されている分岐命令間隔より大きくなる値に更新せずに、中継PC値を用いて更新する。
すなわち、更新部UPP2は、例えば、分岐命令の分岐方向が今回と前回で異なるときにも、前回の分岐命令間隔の情報を残しつつ、中継PC値を用いて今回の分岐命令間隔の情報を間隔記憶部DMEM1に記憶する。これにより、例えば、この実施形態では、分岐の成立と不成立とで分岐命令間隔が異なるときにも、中継PC値を用いることにより、分岐の成立と不成立との両方に対応できる。
なお、分岐の成立と不成立との両方に対応させる更新動作は、この例に限定されない。例えば、更新部UPP2は、意味の無い値がレジスタ値BRDISTに保持されていることを示すフラグを用いてもよい。例えば、分岐予測装置BPRE2は、レジスタ値BRDISTのデータ幅を分岐命令間隔DISTより1ビット増やし、最上位ビットをフラグに割り当ててもよい。フラグは、例えば、間隔記憶部DMEM1から分岐命令間隔DISTを読み出さない命令のときに、予測制御部PCNT2により“1”に設定される。このときのレジスタ値BRDISTは、最大値DMAXより大きくなるため、処理S102は、省かれてもよい。
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。さらに、この実施形態では、間隔記憶部DMEM1の内容が変化しないときには、間隔記憶部DMEM1を更新しない。これにより、この実施形態では、間隔記憶部DMEM1の更新回数を低減でき、消費電力を低減できる。また、中継PC値を用いて更新する場合、分岐の成立と不成立との両方に対応できるため、分岐命令を分岐命令でないと予測する頻度を低減できる。この結果、プロセッサのサイクル性能を向上できる。すなわち、この実施形態では、プロセッサのサイクル性能が低下することを防止しつつ、消費電力を低減できる。
図11は、演算処理のステージで更新動作を実施する分岐予測装置BPRE2の一例を示している。上述した実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。図11の符号PC3は、パイプラインレジスタPRG3に保持されているPC値を示している。この実施形態の分岐予測装置BPRE2の構成は、カウンタCOTおよび更新部UPP2が演算処理(ALUの処理)のステージと同じステージで動作するようにプロセッサと接続される。この実施形態の分岐予測装置BPRE2のその他の構成は、図8−図10で説明した実施形態の分岐予測装置BPRE2と同じである。また、この実施形態の分岐予測装置BPRE2の動作は、カウンタCOTおよび更新部UPP2が演算処理のステージと同じステージで動作することを除いて、図8に示した分岐予測装置BPRE2と同じである。
以上、この実施形態においても、図8−図10で説明した実施形態と同様の効果を得ることができる。なお、図1−図7で説明した実施形態の分岐予測装置BPRE1も、カウンタCOTおよび更新部UPP1が演算処理のステージと同じステージで動作するようにプロセッサと接続されてもよい。この場合にも、図1−図7で説明した実施形態と同様の効果を得ることができる。
図12は、別の実施形態における分岐予測装置BPRE3の一例を示している。上述した実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。図12の符号TAGHは、例えば、パイプラインレジスタPRG1に保持されているタグ比較結果を示している。タグ比較結果TAGHは、予測制御部PCNT3から出力される。また、符号BRTAGHは、レジスタREG3に保持されているタグ比較結果を示している。
この実施形態の分岐予測装置BPRE3の構成は、図8に示した間隔記憶部DMEM1、予測制御部PCNT2および更新部UPP2の代わりに間隔記憶部DMEM3、予測制御部PCNT3および更新部UPP3がそれぞれ設けられている。分岐予測装置BPRE3のその他の構成は、図8−図10で説明した実施形態と同じである。また、分岐予測装置BPRE3が搭載されるプロセッサの構成は、図1−図6で説明した実施形態と同じである。
間隔記憶部DMEM3は、図13に示すように、タグTAGと分岐命令間隔DISTとを含むデータDATを記憶する。間隔記憶部DMEM3のその他の構成は、間隔記憶部DMEM1と同じである。なお、例えば、間隔記憶部DMEM3は、履歴記憶部HMEMの方向履歴メモリや分岐先履歴メモリのビット幅に分岐命令間隔を記憶するためのビットを追加して構成されてもよい。
予測制御部PCNT3は、例えば、タグTAGとPC値の一部とを比較し、タグ比較結果TAGHをパイプラインレジスタPRG1に出力する。予測制御部PCNT3のその他の構成は、図8に示した予測制御部PCNT2と同じである。
更新部UPP3は、図8に示した更新部UPP2にレジスタREG3が追加され、更新制御部UCNT2の代わりに更新制御部UCNT3が設けられている。レジスタREG3は、例えば、タグ比較結果TAGHを保持する。例えば、レジスタREG3のレジスタ値BRTAGH(TAGH)は、分岐命令が実行される度に更新される。更新部UPP3のその他の構成は、図8に示した更新部UPP2と同じである。
なお、分岐予測装置BPRE3の構成は、この例に限定されない。例えば、分岐予測装置BPRE3は、図11に示したように、カウンタCOTおよび更新部UPP3が演算処理のステージと同じステージで動作するようにプロセッサと接続されてもよい。
図13は、図12に示した間隔記憶部DMEM3および予測制御部PCNT3の一例を示している。なお、図13は、32ビット命令のときのプログラムカウンタPC、間隔記憶部DMEM3および予測制御部PCNT3の一例を示している。
間隔記憶部DMEM3は、例えば、PC値の下位8ビットのうちの上位6ビット(PCb)をアドレスADRに使用する。ここで、32ビット命令のプロセッサでは、PC値の最下位2ビット(PCa)は、固定値であるため、間隔記憶部DMEM3のアドレスADRに使用されなくてもよい。なお、アドレスADRのビット幅は、6ビットに限定されない。
間隔記憶部DMEM3のデータDATは、PC値の上位24ビット(PCc)を示すタグTAGと分岐命令間隔DISTとを有している。例えば、分岐命令間隔DISTには、4ビットが割り当てられている。なお、分岐命令間隔DISTのデータ幅は、4ビットに限定されない。また、タグTAGのデータ幅は、24ビットに限定されない。
予測制御部PCNT3は、例えば、カウンタPCOT、タグ判定部DETおよび選択部SELを有している。例えば、予測制御部PCNT3は、PC値(PC0)を受け、カウンタPCOTを用いて命令数を計測する。また、予測制御部PCNT3は、タグTAGおよび分岐命令間隔DIST(DISTi)を間隔記憶部DMEM3から読み出し、タグ比較結果TAGHおよび分岐命令間隔DIST(DISTo)を出力する。例えば、予測制御部PCNT3は、先に読み出した分岐命令間隔DISTとカウンタPCOTにより計測された命令数とが一致したとき、PC値の下位8ビットのうちの上位6ビット部分PCbが示すアドレスADRのデータDAT(タグTAG、分岐命令間隔DIST)を読み出す。
カウンタPCOTは、例えば、PC値が更新される度に、カウントダウンするダウンカウンタである。なお、カウンタPCOTは、PC値が更新される度に、カウントアップするアップカウンタでもよい。すなわち、カウンタPCOTは、命令数を計測するカウンタである。
タグ判定部DETは、間隔記憶部DMEM3から読み出したタグTAGとPC値の上位24ビット部分PCcとを比較し、比較結果であるタグ比較結果TAGHを出力する。例えば、タグ判定部DETは、タグTAGとPC値の上位24ビット部分PCcとが一致したとき、タグ比較結果TAGHを、“1”に設定する。また、例えば、タグ判定部DETは、タグTAGとPC値の上位24ビット部分PCcとが一致しないとき、タグ比較結果TAGHを、“0”に設定する。
選択部SELは、例えば、タグ判定部DETから受けるタグ比較結果TAGHに応じて、間隔記憶部DMEM3から読み出した分岐命令間隔DISTiと“0”とのいずれかを、分岐命令間隔DISToとして出力する。例えば、選択部SELは、タグTAGとPC値の上位24ビット部分PCcとが一致したとき(例えば、TAGHが“1”のとき)、間隔記憶部DMEM3から読み出した分岐命令間隔DISTiを、分岐命令間隔DISToとして出力する。また、選択部SELは、タグTAGとPC値の上位24ビット部分PCcとが一致しないとき(例えば、TAGHが“0”のとき)、分岐命令間隔DISToを、例えば、“0”に設定する。
図14は、図13に示した予測制御部PCNT3の動作の一例を示している。処理S200−S270は、例えば、命令フェッチ処理が実施される度に実施される。
処理S200では、カウンタPCOTのカウンタ値が“0”か否かを判定する。例えば、最初の分岐命令のPC値が出力されるまで、カウンタPCOTのカウンタ値は、“0”である。カウンタPCOTのカウンタ値が“0”でないとき(処理S200のNo)、カウンタPCOTのカウンタ値は、処理S210において、カウントダウンする。そして、予測制御部PCNT3は、処理S220において、分岐命令間隔DISToおよびタグ比較結果TAGHを、“0”に設定する。
一方、カウンタPCOTのカウンタ値が“0”のとき(処理S200のYes)、予測制御部PCNT3の動作は、処理S230に移る。処理S230では、予測制御部PCNT3は、例えば、履歴記憶部HMEMへの参照タイミングであることを予測部PREDに通知する。これにより、予測部PREDは、履歴記憶部HMEMを参照して分岐予測を実施する。また、処理S230では、予測制御部PCNT3は、タグTAGおよび分岐命令間隔DIST(DISTi)を含むデータDATを、間隔記憶部DMEM3のアドレスADR(PCb)から読み出す。アドレスADR(PCb)は、例えば、PC値の下位8ビットのうちの上位6ビット部分PCbが示すアドレスである。
そして、処理S240では、タグ判定部DETは、PC値の上位24ビット部分PCcと処理S230で読み出したタグTAGとを比較する。タグTAGと値PCcとが一致しないとき(処理S240のNo)、予測制御部PCNT3の動作は、処理S250に移る。処理S250では、例えば、タグ判定部DETはタグ比較結果TAGHを“0”に設定し、選択部SELは分岐命令間隔DISToを“0”に設定する。そして、予測制御部PCNT3は、処理S270において、カウンタPCOTのカウンタ値を分岐命令間隔DISTo(“0”)に設定する。
一方、タグTAGと値PCcとが一致したとき(処理S240のYes)、予測制御部PCNT3の動作は、処理S260に移る。処理S260では、例えば、タグ判定部DETはタグ比較結果TAGHを“1”に設定する。また、選択部SELは、処理S230で読み出した分岐命令間隔DISTiを、分岐命令間隔DISToとして出力する。そして、予測制御部PCNT3は、処理S270において、カウンタPCOTのカウンタ値を分岐命令間隔DISTo(処理S230で読み出した分岐命令間隔DISTi)に設定する。
このように、予測制御部PCNT3は、PC値の上位24ビット部分PCcと処理S230で読み出したタグTAGとが一致したときに、間隔記憶部DMEM3から読み出した分岐命令間隔DISTを有効にする。ここで、プログラムカウンタPCは、例えば、カウンタPCOTのカウンタ値が“0”でないとき(処理S200のNo)には、連続する次の命令を示す値(例えば、4増加した値)にPC値を更新する。なお、PC値は、例えば、カウンタPCOTのカウンタ値が“0”のとき(処理S200のYes)には、分岐予測の結果に応じた値に設定される。
予測制御部PCNT3の動作は、この例に限定されない。例えば、カウンタPCOTがアップカウンタのとき、処理S200では、分岐命令間隔DISTとカウンタPCOTのカウンタ値とが一致するか否かが判定される。この場合、カウンタPCOTのカウンタ値と比較される分岐命令間隔DISTとして、例えば、処理S270において、分岐命令間隔DISToがレジスタ等に保持される。さらに、処理S270において、カウンタPCOTは、例えば、“0”にリセットされる。
図15は、図12に示した更新部UPP3およびカウンタCOTの動作の一例を示している。なお、図15に示した動作では、更新部UPP3は、分岐命令以外の命令に対応するアドレスに分岐命令間隔を書き込まないように、間隔記憶部DMEM3を更新する。すなわち、図15に示した動作では、更新部UPP3は、分岐命令間隔が最大値DMAX以上のとき、分岐命令間隔を複数回(複数個所)に分けずに、間隔記憶部DMEM1を更新する。
図15の符号BRPCb、BRPCcは、PC値の一部分PCb、PCcにそれぞれ対応している。すなわち、レジスタ値BRPCbは、例えば、レジスタ値BRPCの下位8ビットのうちの上位6ビットである。また、レジスタ値BRPCcは、例えば、レジスタ値BRPCの上位24ビットである。
処理S100−S144は、例えば、デコード処理が実施される度に実施される。図15に示した動作は、図9に示した動作に処理S122が追加され、処理S124、S130、S142の代わりに処理S126、S132、S144がそれぞれ実施される。また、処理S110の判定結果(Yes)後に実施される処理は、図9に示した動作と異なる。更新部UPP3およびカウンタCOTのその他の動作は、図9に示した動作と同じである。
命令が分岐命令以外のときでカウンタ値WCTが最大値DMAXのとき(処理S110のYes)、カウンタ値WCTは、カウントアップされない。すなわち、カウンタ値WCTが最大値DMAXのとき、カウンタ値WCTは、間隔記憶部DMEM3が更新されるまで、間隔記憶部DMEM3のデータ幅で記憶できる最大値DMAXに維持される。
処理S122は、命令が分岐命令のとき(処理S100のYes)、実施される。処理S122では、更新制御部UCNT3は、レジスタ値BRTAGHが“1”か否かを判定する。すなわち、更新制御部UCNT3は、更新対象のPC値の上位24ビット部分PCcとタグTAGとが一致するか否かを判定する。
レジスタ値BRTAGHが“1”のとき(処理S122のYes)、更新部UPP3の動作は、処理S126に移る。処理S126では、例えば、比較部COMは、カウンタ値WCTとレジスタ値BRDISTとを比較する。そして、例えば、更新制御部UCNT3は、比較部COMの比較結果に基づいて、カウンタ値WCTがレジスタ値BRDIST以上か否かを判定する。すなわち、更新制御部UCNT3は、タグTAGと値PCcとが一致したとき、カウンタ値WCTがレジスタ値BRDIST以上か否かを判定する。
カウンタ値WCTがレジスタ値BRDISTより小さいとき(処理S126のNo)、更新制御部UCNT3は、処理S132において、間隔記憶部DMEM3を更新する。これにより、例えば、この実施形態では、分岐命令のときに分岐予測が実施されないことを防止できる。したがって、この実施形態では、プロセッサのサイクル性能が低下することを防止しつつ、消費電力を低減できる。
また、カウンタ値WCTがレジスタ値BRDIST以上のとき(処理S126のYes)、更新制御部UCNT3は、処理S144において、レジスタREG1、REG2、REG3およびカウンタCOTを初期化する。このように、カウンタ値WCTがレジスタ値BRDIST以上のときには、間隔記憶部DMEM3は、更新されない。
なお、レジスタ値BRTAGHが“1”でないとき(処理S122のNo)、更新制御部UCNT3は、処理S132において、間隔記憶部DMEM3を更新する。すなわち、更新制御部UCNT3は、タグTAGと値PCcとが一致しないとき、間隔記憶部DMEM3を更新する。
処理S132では、更新制御部UCNT3は、レジスタ値BRPCcおよびカウンタ値WCTに基づいて、間隔記憶部DMEM3のアドレスADR(レジスタ値BRPCb)のデータDATを更新する。これにより、間隔記憶部DMEM3のアドレスADR(レジスタ値BRPCb)のデータDATのタグTAGおよび分岐命令間隔DISTは、レジスタ値BRPCcおよびカウンタ値WCTにそれぞれ更新される。
このように、タグTAGと値PCcとが一致し、かつ、カウンタ値WCTがレジスタ値BRDISTより小さいとき、間隔記憶部DMEM3が更新される。あるいは、間隔記憶部DMEM3は、タグTAGと値PCcとが一致しないときに更新される。なお、例えば、処理S110の判定結果(Yes)後に処理S132が実施されたときには、間隔記憶部DMEM3に記憶される分岐命令間隔DISTは、最大値DMAXである。
処理S144では、更新制御部UCNT3は、レジスタREG1、REG2、REG3およびカウンタCOTを初期化する。例えば、更新制御部UCNT3は、パイプラインレジスタPRG1に保持されているPC値(PC1)、分岐命令間隔DISTおよびタグ比較結果TAGHを、レジスタ値BRPC、レジスタ値BRDISTおよびレジスタ値BRTAGHにそれぞれ設定する。また、更新制御部UCNT3は、カウンタCOTのカウンタ値WCTを“0”にリセットする。このように、更新部UPP3は、例えば、分岐命令以外の命令に対応するアドレスに分岐命令間隔を書き込まないように、間隔記憶部DMEM3を更新する。
なお、更新部UPP3の動作は、この例に限定されない。例えば、更新部UPP3の動作は、カウンタ値WCTが最大値DMAXになったとき(処理S110のYes)、処理S122に移ってもよい。すなわち、更新部UPP3は、カウンタ値WCTが最大値DMAXになったときに、間隔記憶部DMEM3を更新してもよい。このとき、更新部UPP3は、間隔記憶部DMEM3を更新したことを示すフラグを設定する。
例えば、更新部UPP3は、間隔記憶部DMEM3を更新したことを示すフラグが設定されている間は、間隔記憶部DMEM3を更新しない。そして、フラグを設定した後に分岐命令が実行されたとき、間隔記憶部DMEM3を更新せずに、フラグをクリアする。この際、更新制御部UCNT3は、レジスタREG1、REG2、REG3およびカウンタCOTを初期化する。
また、更新部UPP3は、処理S126において、カウンタ値WCTとレジスタ値BRDISTとが一致するか否かを判定してもよい。この場合、間隔記憶部DMEM3は、図9に示した動作と同様に、カウンタ値WCTとレジスタ値BRDISTとが一致しないときに更新される。例えば、更新制御部UCNT3は、カウンタ値WCTとレジスタ値BRDISTとが一致しないとき、処理S132において、間隔記憶部DMEM3を更新する。また、例えば、更新制御部UCNT3は、カウンタ値WCTとレジスタ値BRDISTとが一致したとき、間隔記憶部DMEM3を更新しない。すなわち、更新部UPP3は、カウンタ値WCTがレジスタ値BRDISTより小さいか否かにかかわらず、カウンタ値WCTとレジスタ値BRDISTとが一致しないときに、間隔記憶部DMEM3を更新してもよい。
あるいは、更新部UPP3は、処理S110の判定結果(Yes)後に処理S122を実施し、かつ、処理S126において、カウンタ値WCTとレジスタ値BRDISTとが一致するか否かを判定してもよい。これにより、間隔記憶部DMEM3の最大値DMAX以上の分岐命令間隔は、図9に示した動作と同様に、複数回(複数個所)に分けて記憶される。
また、更新部UPP3は、図10に示したように、処理S110の判定結果(No)後に、処理S112、S114を実施してもよい。すなわち、更新部UPP3は、間隔記憶部DMEM3の内容を既に記憶されている分岐命令間隔より大きくなる値に更新せずに、中継PC値を用いて更新してもよい。
また、分岐先履歴メモリのビット幅に分岐命令間隔を記憶するためのビットを追加した構成の間隔記憶部DMEM3に対する更新動作では、更新部UPP3は、分岐命令による分岐が成立したときのみ、間隔記憶部DMEM3を更新してもよい。
以上、この実施形態においても、図8−図10で説明した実施形態と同様の効果を得ることができる。
以上の実施形態において説明した発明を整理して、付記として開示する。
(付記1)
分岐命令の結果を記憶する履歴記憶部を有し、前記履歴記憶部を参照して分岐予測を実施する予測部と、
前記分岐命令に対応して前記分岐命令の間隔を記憶する間隔記憶部と、
前記履歴記憶部を参照するタイミングを、前記間隔記憶部に記憶された前記分岐命令の間隔に基づいて決定する制御部と、
前記分岐命令の間隔を計測するカウンタと、
前記間隔記憶部の内容を、前記カウンタにより計測された前記分岐命令の間隔に基づいて更新する更新部と
を備えていることを特徴とする分岐予測装置。
(付記2)
前記更新部は、前記分岐命令が実行される度に、前記間隔記憶部の内容を更新すること
を特徴とする付記1記載の分岐予測装置。
(付記3)
前記更新部は、前記カウンタの計測に基づく前記分岐命令の間隔が、前記間隔記憶部に記憶されている前記分岐命令の間隔と異なるとき、前記間隔記憶部の内容を更新すること
を特徴とする付記1記載の分岐予測装置。
(付記4)
前記更新部は、前記カウンタの計測に基づく前記分岐命令の間隔が、前記間隔記憶部に記憶されている前記分岐命令の間隔より大きいとき、前記記憶されている前記分岐命令の間隔に基づいて参照されるアドレスに、前記計測に基づく前記分岐命令の間隔と前記記憶されている前記分岐命令の間隔との差分に基づいて算出される間隔を書き込むこと
を特徴とする付記1記載の分岐予測装置。
(付記5)
前記間隔記憶部は、前記分岐命令による分岐が成立したときの前記分岐命令の間隔と前記分岐命令による分岐が不成立のときの前記分岐命令の間隔との両方を記憶すること
を特徴とする付記1記載の分岐予測装置。
(付記6)
前記更新部は、前記カウンタの計測に基づく前記分岐命令の間隔が、前記間隔記憶部に記憶されている前記分岐命令の間隔より小さいとき、前記間隔記憶部の内容を更新すること
を特徴とする付記1記載の分岐予測装置。
(付記7)
命令を解読する解読部と、分岐命令の分岐予測を実施する分岐予測装置とを備え、
前記分岐予測装置は、
分岐命令の結果を記憶する履歴記憶部を有し、前記履歴記憶部を参照して分岐予測を実施する予測部と、
前記分岐命令に対応して前記分岐命令の間隔を記憶する間隔記憶部と、
前記履歴記憶部を参照するタイミングを、前記間隔記憶部に記憶された前記分岐命令の間隔に基づいて決定する制御部と、
前記分岐命令の間隔を計測するカウンタと、
前記間隔記憶部の内容を、前記カウンタにより計測された前記分岐命令の間隔に基づいて更新する更新部と
を備えていることを特徴とするプロセッサ。
(付記8)
前記更新部は、前記分岐命令が実行される度に、前記間隔記憶部の内容を更新すること
を特徴とする付記7記載のプロセッサ。
(付記9)
前記更新部は、前記カウンタの計測に基づく前記分岐命令の間隔が、前記間隔記憶部に記憶されている前記分岐命令の間隔と異なるとき、前記間隔記憶部の内容を更新すること
を特徴とする付記7記載のプロセッサ。
(付記10)
前記更新部は、前記カウンタの計測に基づく前記分岐命令の間隔が、前記間隔記憶部に記憶されている前記分岐命令の間隔より大きいとき、前記記憶されている前記分岐命令の間隔に基づいて参照されるアドレスに、前記計測に基づく前記分岐命令の間隔と前記記憶されている前記分岐命令の間隔との差分に基づいて算出される間隔を書き込むこと
を特徴とする付記7記載のプロセッサ。
(付記11)
前記間隔記憶部は、前記分岐命令による分岐が成立したときの前記分岐命令の間隔と前記分岐命令による分岐が不成立のときの前記分岐命令の間隔との両方を記憶すること
を特徴とする付記7記載のプロセッサ。
(付記12)
前記更新部は、前記カウンタの計測に基づく前記分岐命令の間隔が、前記間隔記憶部に記憶されている前記分岐命令の間隔より小さいとき、前記間隔記憶部の内容を更新すること
を特徴とする付記7記載のプロセッサ。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずであり、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。