命令制御装置、命令制御方法および演算回路
【課題】不要な命令プリフェッチ要求などの発生を抑止し、プロセッサの性能低下を防止することを課題とする。
【解決手段】開示する命令制御装置は、メインメモリに記憶されるデータのうち利用頻度の高いデータを記憶するL1キャッシュメモリから受信した命令フェッチデータを保存する命令バッファに空きがあるか否かを判定する。続いて、命令制御装置は、命令バッファに空きがあると判定された場合に、L1キャッシュメモリ内のMIBに少なくとも2エントリ以上の空きがあるか否かを判定する。そして、命令制御装置は、L1キャッシュメモリ内に少なくとも2エントリ以上の空きがあると判定された場合に、L1キャッシュラインのラインサイズに従ったアドレス境界で命令プリフェッチ要求をL1キャッシュメモリに出力する。
【解決手段】開示する命令制御装置は、メインメモリに記憶されるデータのうち利用頻度の高いデータを記憶するL1キャッシュメモリから受信した命令フェッチデータを保存する命令バッファに空きがあるか否かを判定する。続いて、命令制御装置は、命令バッファに空きがあると判定された場合に、L1キャッシュメモリ内のMIBに少なくとも2エントリ以上の空きがあるか否かを判定する。そして、命令制御装置は、L1キャッシュメモリ内に少なくとも2エントリ以上の空きがあると判定された場合に、L1キャッシュラインのラインサイズに従ったアドレス境界で命令プリフェッチ要求をL1キャッシュメモリに出力する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、命令制御装置、命令制御方法および演算回路に関する。
【背景技術】
【0002】
従来より、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などのプロセッサでは、将来に実行が予測される命令をメインメモリからキャッシュメモリ等のより高速なメモリに予め読み込んでおき、プロセッサの性能の向上を図る命令プリフェッチ制御が利用されている。
【0003】
プロセッサは、メインメモリ、1次キャッシュ(L1キャッシュ)、2次キャッシュ(L2キャッシュ)、命令制御部、デコーダ部などの機能部を有している。メインメモリは、データやプログラムなどを記憶する主記憶装置であり、CPUなどの情報処理装置が直接読み書きできるRAM(Random Access Memory)やROM(Read Only Memory)などの半導体記憶装置である。
【0004】
2次キャッシュは、メインメモリに記憶される比較的利用頻度の高いデータや命令を記憶するキャッシュメモリであって、メインメモリより高速なアクセスを可能とするキャッシュメモリである。1次キャッシュは、2次キャッシュに記憶される情報よりも利用頻度の高いデータ(命令やデータ)を記憶する2次キャッシュより高速なキャッシュメモリである。
【0005】
命令制御部は、命令のフェッチやプリフェッチ制御を行う制御部であり、デコーダ部は、命令制御部により読み出された命令をデコードして実行する制御部である。もっとも、プロセッサは、上述した機能部以外にも、例えば、次に実行する命令アドレスを示すプログラムカウンタや命令の実行完了判定であるコミット判定など他の一般的な機能部を有していてもよい。
【0006】
ところで、上述した命令プリフェッチ制御は、上記命令制御部とL1キャッシュの両方で独立して実行される。命令制御部では、L1キャッシュから送られる命令フェッチデータを一時的に保持する命令バッファに空きがない場合にのみ、命令フェッチリクエストをプリフェッチリクエストに差し替えていた。この場合、L1キャッシュは、プリフェッチリクエストに対してキャッシュヒットしたか否かに関わらず、必ずしも命令制御部に命令を応答する必要はない。また、命令フェッチのアドレスは、命令バッファ1エントリ分のデータ容量に依存する。命令バッファ1エントリ分の容量は、例えば32バイトなので命令フェッチアドレスは32バイトアドレス境界(単位)で発行する。したがって、命令プリフェッチも同様であり、L1キャッシュのキャッシュラインは1ライン128バイトなので、同一ラインへのリクエストを何度も発行していた。
【0007】
一方、L1キャッシュは、L2キャッシュからのリクエストまたは他のL1キャッシュからL2キャッシュへのリクエストにより、命令制御部から新規命令フェッチリクエストを受け付けられない場合に、L2キャッシュに対してプリフェッチリクエストを発行していた。ところが、L1キャッシュは、分岐予測機構を参照できないため、実際は分岐予測先アドレスでリクエストを発行すべきところをシーケンシャル方向、言い換えると、例えば、命令実行順序方向や命令実行するアドレス方向で発行することがあった。
【0008】
ここで、図13を用いて、上述した処理を具体的に説明する。従来技術に係るプロセッサの命令制御部は、命令フェッチ要求が出力できると判断した場合には(ステップS501YES)、命令フェッチ要求をL1キャッシュに出力する(ステップS502)。
【0009】
ところが、従来技術に係るプロセッサの命令制御部は、命令フェッチ要求が出力できないと判断した場合には(ステップS501NO)、命令プリフェッチ要求がL1キャッシュに出力できるかを判定する(ステップS503)。ここで、プロセッサの命令制御部は、命令バッファに空きがないため命令プリフェッチ要求を出力できないと判定した場合には(ステップS503NO)、ステップS501に戻って処理を繰り返す。
【0010】
一方、プロセッサの命令制御部は、命令バッファに空きがあり命令プリフェッチ要求を出力できると判定した場合には(ステップS503YES)、中断している命令フェッチは分岐予測のターゲットか否かを判定する(ステップS504)。言い換えると、例えば、プロセッサの命令制御部は、領域不足等で実行できない、本来なら実行したい命令フェッチ要求先のアドレスが分岐予測機構から分岐予測された分岐予測アドレス(分岐先アドレス)であるか否かを判定する。
【0011】
中断している命令フェッチが分岐予測のターゲットである場合(ステップS504YES)、プロセッサの命令制御部は、分岐予測機構によって予測された分岐先アドレスを用いて命令プリフェッチ要求をL1キャッシュに出力する(ステップS505)。その後、ステップS501に戻って以降の処理を繰り返す。言い換えると、例えば、プロセッサの命令制御部は、領域不足等で実行できない、本来なら実行した命令フェッチ要求先のアドレスが分岐予測機構から分岐予測された分岐先アドレスである場合に、命令プリフェッチ要求をL1キャッシュに出力する。
【0012】
また、中断している命令フェッチが分岐予測のターゲットでない場合(ステップS504NO)、プロセッサの命令制御部は、アドレスに32バイト加算した新たなアドレスで分岐予測を行うことを分岐予測機構に要求する(ステップS506)。言い換えると、例えば、命令制御部は、領域不足等で実行できない、本来なら実行したい命令フェッチ要求先のアドレスが分岐予測機構から分岐予測された分岐先アドレスでない場合に、上記新たなアドレスで分岐予測を行うことを分岐予測機構に要求する。
【0013】
その後、分岐予測機構によって分岐予測された場合には(ステップS507YES)、プロセッサの命令制御部は、ステップS505の処理を実行する。一方、プロセッサの命令制御部は、分岐予測機構によって分岐予測されなかった場合には(ステップS507NO)、命令プリフェッチ要求をL1キャッシュに出力する(ステップS508)。
【先行技術文献】
【特許文献】
【0014】
【特許文献1】特開2000−357090号公報
【特許文献2】特開平8−272610号公報
【特許文献3】特開2001−166934号公報
【発明の概要】
【発明が解決しようとする課題】
【0015】
しかしながら、上述した従来の技術では、不要な命令プリフェッチ要求などが発生し、プロセッサの性能低下に繋がってしまうという課題があった。具体的には、上述したように、命令フェッチ制御部とL1キャッシュが異なる条件で個別にプリフェッチを発行していた。そのため、実際に必要としない領域に対してリクエストを発行することや、必要な領域をリプレースするという現象が発生していた。プロセッサは、本来は不必要であるこれらの動作を実行してしまうことで、結果的に性能面で寄与しないケースや悪化してしまうケースが発生していた。
【0016】
例えば、図14に示すように、命令制御部は、L1キャッシュから受け付けた命令を保持する命令バッファに空きが無い場合に、命令フェッチが中断され、命令フェッチ要求を命令プリフェッチ要求に差し替えて、L1キャッシュに何度も出力する。一方、L1キャッシュは、命令制御部から出力される命令プリフェッチ要求に関係なく、L2キャッシュからのムーブイン要求等で新規命令フェッチリクエストを受け付けられない場合に、L2キャッシュに対して命令プリフェッチ要求を発行する。
【0017】
また、図15に示すように、命令制御部は、3回目の命令プリフェッチ要求を分岐予測機構によって予測された分岐予測先アドレスを用いた要求でL1キャッシュに発行する。この場合、L1キャッシュは、分岐予測先アドレスを用いて命令プリフェッチ要求を発行する必要があるが、分岐予測先機構を参照することができないため、通常通り、命令フェッチアドレスのシーケンシャル方向で発行してしまう。つまり、図14や図15からわかるように、命令制御部とL1キャッシュとの間で、命令プリフェッチ要求が連動していない。そのため、一方が正しく命令プリフェッチ要求を発行した場合であっても、もう一方が不要な命令プリフェッチ要求を発行してしまうなど、整合性がない命令プリフェッチ要求が乱立してしまう可能性がある。
【0018】
開示の技術は、上記に鑑みてなされたものであって、不要な命令プリフェッチ要求などの発生を抑止し、プロセッサの性能低下を防止することが可能である命令制御装置、命令制御方法および演算回路を提供することを目的とする。
【課題を解決するための手段】
【0019】
本願の開示する命令制御装置は、一つの態様において、メインメモリに記憶されるデータのうち利用頻度の高いデータを記憶するキャッシュメモリと、前記キャッシュメモリから受信した命令フェッチデータを保存する命令バッファに空きがあるか否かを判定する第一空き領域判定部と、前記第一空き領域判定部によって、前記命令バッファに空きがあると判定された場合に、前記キャッシュメモリから前記メインメモリに送出する命令フェッチリクエストキューを管理する、前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあるか否かを判定する第二空き領域判定部と、前記第二空き領域判定部によって前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあると判定された場合に、前記キャッシュラインのラインサイズに従ったアドレス境界で命令プリフェッチ要求を前記キャッシュメモリに出力する命令制御部と、を有する。
【発明の効果】
【0020】
本願の開示する命令制御装置、命令制御方法および演算回路の一つの態様によれば、不要な命令プリフェッチ要求などの発生を抑止し、プロセッサの性能低下を防止することが可能であるという効果を奏する。
【図面の簡単な説明】
【0021】
【図1】図1は、実施例1に係る命令制御装置の構成を示すブロック図である。
【図2】図2は、IBUFFの構成とL1キャッシュとの接続関係を示す図である。
【図3】図3は、命令プリフェッチパイプ制御の例を示す図である。
【図4】図4は、命令フェッチパイプと命令プリフェッチパイプのパイプ制御の関係例を示す図である。
【図5】図5は、命令プリフェッチ制御を説明する図である。
【図6】図6は、分岐予測結果も用いた命令プリフェッチ制御を説明する図である。
【図7】図7は、実施例1に係る命令制御装置による処理の流れを示すフローチャートである。
【図8】図8は、サイクル3が命令フェッチリクエストの最後となる場合のタイムチャートである。
【図9】図9は、サイクル3が命令フェッチリクエストの最後となり、サイクル5で分岐すると予測された場合のタイムチャートである。
【図10】図10は、PORT−BUSYで命令フェッチリクエストが停止している場合のタイムチャートである。
【図11】図11は、サイクル5でサイクル3の命令フェッチが分岐すると予測された場合のタイムチャートである。
【図12】図12は、サイクル12で命令フェッチが再開する場合のタイムチャートである。
【図13】図13は、従来の命令プリフェッチ制御処理の流れを示すフローチャートである。
【図14】図14は、従来の命令プリフェッチ制御を説明する図である。
【図15】図15は、従来の分岐予測結果も用いた命令プリフェッチ制御を説明する図である。
【発明を実施するための形態】
【0022】
以下に、本願の開示する命令制御装置、命令制御方法および演算回路の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの開示する命令制御装置が限定されるものではない。
【実施例1】
【0023】
開示する命令制御装置は、各種キャッシュメモリや分岐予測機構などと接続され、CPUやMPUなどのプロセッサであり、コンピュータなどの情報処理装置に用いられる。また、開示する命令制御装置を有するプロセッサは、パイプライン方式を採用しており、さらに、アウトオブオーダーで命令を実行することで、高速な処理を実行することができる。そして、開示する命令制御装置は、L1キャッシュ部と命令制御部とで独立して行われていた命令プリフェッチ制御を命令制御部のみで実行することにより、不要な命令プリフェッチ要求などの発生を抑止し、プロセッサの性能低下を防止することができる。
【0024】
そこで、実施例1では、開示する命令制御装置の構成、処理の流れ、タイムチャート、効果等について、図を用いて説明する。
【0025】
[命令制御装置の構成]
まず、図1を用いて、実施例1に係る命令制御装置の構成について説明する。図1は、実施例1に係る命令制御装置の構成を示すブロック図である。
【0026】
図1に示すように、命令制御装置10は、分岐予測機構11と、命令制御部12と、L1キャッシュ部13と、L2キャッシュ部14、デコーダ部15とを有する。もちろん、ここで例示した機能部は、あくまで例示であり、これら以外にもレジスタ、プログラムカウンタ、コミット部などプロセッサの一般的な機能部を有していてもよい。なお、分岐予測機構11は、特許請求の範囲に記載の分岐予測部の一例であり、命令制御部12は、特許請求の範囲に記載の第一空き領域判定部や命令制御部などの一例であり、L1キャッシュ部13は、特許請求の範囲に記載の第二空き領域判定部の一例である。
【0027】
分岐予測機構11は、命令制御部12と接続され、現在実行されている命令の後続の命令が分岐するかを予測し、分岐する場合は分岐先の命令を命令制御部12のパイプラインに出力する。具体的には、分岐予測機構11は、命令制御部12から受け付けた命令フェッチアドレスを用いて分岐予測を行い、命令フェッチアドレスを受け付けたサイクルの次にサイクルで命令制御部12に予測結果を出力する。なお、分岐予測手法は、単純予測、静的予測、次ライン予測など様々な手法があるが、いずれの手法でも用いることができる。
【0028】
命令制御部12は、命令フェッチ制御、命令プリフェッチ制御、デコーダ部への命令出力等を行う制御部であり、特に、IBUFF12aと、IFEAG12bと、IFCTL12cとを有する。
【0029】
IBUFF12aは、L1キャッシュ部13から取得した命令データをデコーダ部15に供給するまで一時的に保存するバッファである。また、IBUFF12aは、図2に示すように、32バイト格納可能な6個のバッファ(IBR0〜IBR5)を有し、それぞれのバッファに対応して命令フェッチアドレスを記憶している。なお、図2は、IBUFFの構成とL1キャッシュとの接続関係を示す図である。
【0030】
IFEAG12bは、命令フェッチアドレスや命令プリフェッチアドレスを生成して、L1キャッシュ部13等に出力する処理部である。また、IFCTL12cは、命令フェッチ要求(命令フェッチリクエスト)や命令プリフェッチ要求(命令プリフェッチリクエスト)をL1キャッシュ部13に出力する制御部である。
【0031】
ここで、命令制御部12が実行する命令フェッチ制御と命令プリフェッチ制御について説明する。
【0032】
(命令フェッチ制御)
命令制御部12が実行する命令フェッチ制御は、5サイクル(IA、IT、IM、IB、IR)の命令フェッチパイプ(パイプライン)で実行される。
【0033】
(IAサイクル)
IAサイクルでは、命令制御部12のIFCTL12cは、先頭命令のアドレスがプログラムカウンタからIFEAG12bに供給されると、先頭命令の命令フェッチ要求をL1キャッシュ部13に送信する。また、IFEAG12bは、IFCTL12cからの命令フェッチ要求と同時に、L1キャッシュ部13に命令フェッチアドレスを送信する。なお、命令フェッチは32バイト単位でおこなわれ、1サイクルで1リクエスト送ることができる。
【0034】
(ITサイクル)
ITサイクルでは、命令制御部12のIFEAG12bは、IAサイクルで作成した命令フェッチアドレスを分岐予測機構11に送信する。ここで、分岐予測機構11は、受け付けた命令フェッチアドレスを用いて分岐予測を行う。
【0035】
(IMサイクル)
IMサイクルでは、命令制御部12のIFCTL12cは、分岐予測機構11から予測結果を受信し、IFEAG12bは、分岐予測機構11から予測された分岐予測アドレスを受信する。なお、命令フェッチ要求は、最大IBUFF12aのIBRの数だけL1キャッシュ部13に送ることができる。そのため、毎サイクル、命令フェッチを送ると最大6リクエスト分の命令フェッチパイプが動作していることになる。IMサイクルで分岐すると予測された場合、分岐予測をおこなっているIT、IMサイクル2サイクルの間に+32バイト、+64バイトの2個のリクエストが送られていることになる。ところが、これらのリクエストは分岐予測結果に反していることになり不必要なリクエストであるため、IBサイクルでキャンセルされる。
【0036】
(IBサイクル)
IBサイクルでは、命令制御部12のIFCTL12cは、IBUFF12aのいずれかのIBRに空きがあった場合に、IMサイクルで受信した分岐予測アドレスを用いた命令フェッチ要求をL1キャッシュ部13に出力する。なお、IBサイクルでは、L1キャッシュ部13からIBUFF12aに対して命令データが送信される。
【0037】
(IRサイクル)
IRサイクルでは、各IBR0〜5内の命令データが有効であることを通知するIF−STV信号がL1キャッシュ部13から命令制御部12のIFCTL12cに送信される。IRサイクルまで完了すると命令フェッチが完了したことになる。IBUFF12aからデコーダ部15への命令データ供給は最短でIRサイクルで行われる。IBR1個は、32バイトの命令データを保持しており、1命令が4バイトであり、デコーダ部15が4命令を同時処理できることから、1〜2サイクルでデコーダ部15への命令供給が可能である。全てのデータを供給したIBRはクリアされ新しい命令フェッチ制御に使用される。
【0038】
上述したように、通常、命令制御部12は、毎サイクルで命令フェッチ要を送信することができるが、以下の場合は送信できなくなる。(条件1)IBUFFの6個のバッファ(IBR0〜5)すべて使用中の場合、(条件2)L1キャッシュ部13がキャッシュミスし、L2キャッシュ部14からのムーブイン待ちもしくはL2キャッシュ部14からのムーブアウト要求等で新規命令フェッチリクエストを受け付けられない場合である。
【0039】
開示する命令制御装置では、上記(条件1)、(条件2)のいずれの事象が発生した場合であっても、L1キャッシュ部13内のムーブイン・バッファ(MIB)に空きがあれば、命令プリフェッチ制御をおこなうことができる。命令プリフェッチ制御をおこなうことで、L1キャッシュ部13に命令データが存在しない場合に、早めにL2キャッシュ部14に対してリクエストを送ることができる。命令プリフェッチ制御のリクエスト制御はIFCTL12cでおこなわれ、アドレスはIFEAG12bで作成される。命令プリフェッチ制御は、要求する命令データがL1キャッシュ部13にヒットするか否かに関わらず条件がそろえば命令制御部12からL1キャッシュ部13に対しておこなわれる。
【0040】
(命令プリフェッチ制御)
ここで、命令制御部12が実行する命令プリフェッチ制御について説明する。命令制御部12は、上述した命令フェッチ制御が上記(条件1)もしくは(条件2)の要因で停止している場合に、今後必要であると思われる先行アドレスに対して命令プリフェッチ制御を行う。また、命令制御部12の命令フェッチ制御と同様に、分岐予測をおこないながら複数のアドレスに対して命令プリフェッチ制御を行うことも可能である。例えば、上記(条件1)の条件は、IFCTL12c内で判断される。上記(条件2)の条件については、L1キャッシュ部13から条件成立の1τ前(L1キャッシュ部13がキャッシュミスした信号出力後)にIFCTL12cに通知される。
【0041】
なお、L1キャッシュ部13は、命令制御部12から指示された命令プリフェッチアドレスに対してキャッシュを検索し、ヒットしなかった場合は、L2キャッシュ部14にリクエストを出力する。L1キャッシュ部13は、キャッシュヒットするしないに関わらず要求された命令プリフェッチリクエストに対して命令データを命令制御部12に送信(応答)する必要はない。
【0042】
そして、命令制御部12は、上述した6サイクルの命令フェッチパイプとは別に、独立した4パイプ(PA、PT、PM、PB)で命令プリフェッチ制御を行う。命令制御部12は、命令フェッチパイプとは異なりPA、PT、PMサイクル時は他のPA、PT、PMサイクルを動作させることができないので、図3に示すようなパイプ制御を行うこととなる。なお、図3は、命令プリフェッチパイプ制御の例を示す図である。
【0043】
また、命令制御部12は、命令フェッチパイプと命令プリフェッチパイプを同時に実行する場合、IA、IT、IMサイクル時はPA、PT、PMサイクルを動作できない。さらに、IA、PAサイクルは同時に動作できない。ただし、PT、PM、PBサイクル時に新規の命令フェッチパイプを動作は可能である。以上より、命令制御部12は、命令フェッチパイプと命令プリフェッチパイプを同時に実行する場合、図4に示すようなパイプ制御を行うこととなる。なお、図4は、命令フェッチパイプと命令プリフェッチパイプのパイプ制御の関係例を示す図である。
【0044】
命令制御部12は、命令プリフェッチ要求をPAサイクルでL1キャッシュ部13に送信する。ただし、命令制御部12は、(条件3)分岐予測がおこなわれ分岐先アドレスが供給された場合に送信することができる。また、命令制御部12は、(条件4)命令プリフェッチアドレスがL1キャッシュのラインアドレス境界を指している場合に、命令プリフェッチ要求をL1キャッシュ部13に送信することができる。したがって、命令制御部12は、PAサイクルだからといって必ず命令プリフェッチ要求を送信できるわけではない。
【0045】
次に、命令プリフェッチアドレスの生成について説明する。命令プリフェッチアドレスは、命令制御部12のIFEAG12bで生成される。命令プリフェッチアドレスは、命令フェッチが停止したアドレスの後続アドレスである。IFEAG12bは、各IBR0〜5から出力された命令フェッチアドレスを各IBRでクリアされるまで保持している。また、次に命令フェッチするアドレスもIFEAG12bで生成され保持されている。また、IFEAG12bは、分岐予測機構11によって分岐予測された分岐先アドレスも保持している。
【0046】
命令制御部12のIFEAG12bは、上記(条件1)もしくは(条件2)の条件で停止した命令フェッチが次に分岐予測した分岐先アドレスを要求しようとしていた場合、命令プリフェッチアドレスに、そのまま分岐先アドレスをセットする。
【0047】
また、命令制御部12のIFEAG12bは、停止した命令フェッチがそれ以外のアドレスを要求しようとしていた場合、そのアドレスがL1キャッシュ部13のライン境界アドレスであれば、そのアドレスを命令プリフェッチアドレスにセットする。一方、命令制御部12のIFEAG12bは、アドレスがL1キャッシュのライン境界でない場合は、命令プリフェッチを出力しない。
【0048】
ただしここで、命令制御部12のIFEAG12bは、命令フェッチパイプのIT、IMサイクルが起動していない場合は、命令プリフェッチパイプのPAサイクルを起動する。そして、命令制御部12のIFEAG12bは、PAサイクルを起動すると、1τ後にPTサイクルを起動する。PTサイクルでは、停止したアドレスに対して+32バイト(32バイト加算)されたアドレスがIFEAG12bにセットされる。同時に、停止した命令フェッチアドレスに対して分岐予測機構11で分岐予測が開始される。
【0049】
続いて、PMサイクルで、分岐予測機構11は、分岐予測結果を出力し、IFEAG12bは、PTサイクルでセットされたアドレスに対してL1キャッシュ部13のライン境界であるかどうかが判定する。そして、分岐予測機構11によって分岐すると判定された場合、IFEAG12bは、分岐予測機構11によって予測された分岐先アドレスを命令プリフェッチアドレスに再セットする。一方、IFEAG12bは、分岐予測機構11によって分岐しないと判定された場合には、命令プリフェッチアドレスを変更しない。
【0050】
このように、IFEAG12bは、PMサイクルにおいて、L1キャッシュ部13のライン境界であると判定するか、または、分岐予測機構11によって分岐すると判定されると、以下の処理を実行する。つまり、IFEAG12bは、1τ後のPBサイクルのタイミングで、命令プリフェッチリクエストをL1キャッシュ部13に要求し、新規PAサイクルを起動する。また、IFEAG12bは、PMサイクルにおいて、L1キャッシュ部13のライン境界でないと判定するか、または、分岐予測機構11によって分岐されないと判定されると、以下の処理を実行する。つまり、IFEAG12bは、命令プリフェッチリクエストを要求しないが新規PAサイクルを起動する。
【0051】
この後、命令制御部12は、新規命令プリフェッチパイプを同じように実行していく。そして、命令制御部12は、命令プリフェッチパイプが実行・命令フェッチパイプラインがクリアされる、もしくは上記(条件1)、(条件2)の状態が解除され命令フェッチが再開されるとクリアする。また、命令制御部12は、(条件1)、(条件2)の状態が続く限り、命令プリフェッチパイプラインを動作させることが可能であるが、L1キャッシュに対する命令プリフェッチ要求回数を制限することもできる。この場合、命令制御部12は、命令プリフェッチ要求を制限回数L1キャッシュに対して送出すると、それ以降命令プリフェッチパイプラインに新規命令フェッチを要求し、再度、上記(条件1)、(条件2)の状態になるまで起動しない。
【0052】
図1に戻り、L1キャッシュ部13は、L2キャッシュ部14に記憶される情報よりもさらに利用頻度の高いデータ(命令やデータ)を記憶する高速なキャッシュメモリである。また、L1キャッシュ部13は、命令制御部12から送られた命令プリフェッチリクエストに対して各種制御を行う。
【0053】
具体的には、L1キャッシュ部13は、送られてきたアドレスに対してキャッシュミスしてL2キャッシュ部14以降にデータを要求する場合、MIBに2エントリ以上の空きがあるかないかを判定する。そして、L1キャッシュ部13は、MIBに2エントリ以上の空きがない場合は、MIBの割り当てはおこなわず、L1キャッシュ部13内でアボートされMIBに2エントリ以上の空きができるまで待機する。
【0054】
つまり、命令プリフェッチのデータ要求でMIBが一杯になっている間に、命令フェッチ停止状態が解除された場合、新規命令フェッチ要求が受け付けられないからである。命令プリフェッチリクエストがMIBを獲得しデータが返ってくるのを待っている間に、命令フェッチが再開する。そして、命令プリフェッチアドレスと同一キャッシュラインアドレスの命令フェッチリクエストがL1キャッシュ部13に送られている場合に、L2キャッシュ部14から命令プリフェッチに対して返されたデータがバイパスされ、後続の命令フェッチデータとして命令制御部12に返される。L1キャッシュ部13は、命令プリフェッチリクエストを受け付けられない場合、命令制御部12に対してその旨を示す信号(IF−SU−PREFCH−BUSY)をオンにする。また、L1キャッシュ部13は、命令フェッチリクエストを受け付けられない場合、別信号(IF−SU−BUSY)をオンにする。この2つの信号は別信号でありそれぞれ独立している。したがって、IF−SU−BUSYがオンであるからといって、IF−SU−PREFCH−BUSYがオンであるとは限らないし、その逆も同じである。なお、両信号がオンになることもある。
【0055】
図2に戻り、L2キャッシュ部14は、L1キャッシュ部13よりも容量が多く低速で、メインメモリよりも高速なキャッシュメモリであって、比較的利用頻度の高いデータ(命令やデータ)を記憶している。
【0056】
デコーダ部15は、命令制御部12のIBUFF12aから読み出した命令をデコードして実行するデコーダーである。なお、開示する装置は、上述した以外にも、プログラムカウンタやコミット判定など他の一般的な機能部を有していてもよいが、これらの機能は一般的なプロセッサ(CPUやMPUなど)に搭載される機能部と同様の機能を有するので、ここでは詳細な説明は省略する。
【0057】
[命令制御装置による処理]
次に、図5〜図7を用いて、実施例1に係る命令制御装置に処理の流れについて説明する。図5に示すように、命令制御部12は、当該制御部12内の命令バッファ(IBUFF12aなど)に空きが無い場合に、命令フェッチ制御を停止する。また、命令制御部12は、L1キャッシュ部13からL2キャッシュ部14からのムーブイン要求等で新規命令フェッチリクエストを受信できない旨が通知されると、命令フェッチ制御を停止する。これらの場合、命令制御部12は、上述した(条件1)または(条件2)に該当することから、命令プリフェッチ要求(リクエスト)をL1キャッシュに送信する。なお、命令制御部12は、上述した(条件1)および(条件2)が解除されるまで命令プリフェッチ要求(リクエスト)をL1キャッシュに送信するが、回数を制限することもでき、図5では、2回送信している例を示している。
【0058】
また、図6に示すように、命令制御部12は、当該制御部12内の命令バッファ(IBUFF12aなど)に空きが無い場合に、命令フェッチ制御を停止する。また、命令制御部12は、L1キャッシュ部13からL2キャッシュ部14からのムーブイン要求等で新規命令フェッチリクエストを受信できない旨が通知されると、命令フェッチ制御を停止する。これらの場合、命令制御部12は、上述した(条件1)または(条件2)に該当することから、命令プリフェッチ要求(リクエスト)をL1キャッシュに送信する。図6の場合、命令制御部12は、命令プリフェッチ要求をL1キャッシュ部13に1回送信した後、分岐予測機構11によって予測された分岐予測アドレスを用いて、2回目の命令プリフェッチ要求をL1キャッシュ部13に送信している。
【0059】
図5と図6をみてもわかるように、L1キャッシュ部13は、L2キャッシュ部14からのムーブイン要求等で新規命令フェッチリクエストを受信できない旨を命令制御部12に出力していることから、独自で命令プリフェッチ要求を送信していない。したがって、L1キャッシュと命令制御部とで独立して行われていた命令プリフェッチ制御を命令制御部のみで実行することができ、不要な命令プリフェッチ要求などの発生を抑止し、プロセッサの性能低下を防止することができる。なお、図5は、命令プリフェッチ制御を説明する図であり、図6は、分岐予測結果も用いた命令プリフェッチ制御を説明する図である。
【0060】
次に、図7を用いて、実施例1に係る命令制御装置による処理の流れを説明する。図7は、実施例1に係る命令制御装置による処理の流れを示すフローチャートである。
【0061】
図7に示すように、命令制御部12は、命令フェッチ要求が出力できると判断した場合には(ステップS101YES)、命令フェッチ要求をL1キャッシュに出力する(ステップS102)。
【0062】
ところが、命令制御部12は、命令フェッチ要求が出力できないと判断した場合には(ステップS101NO)、命令プリフェッチ要求がL1キャッシュに出力できるかを判定する(ステップS103)。ここで、命令制御部12は、命令バッファ(IBUFF12a)に空きがないため命令プリフェッチ要求を出力できないと判定した場合には(ステップS103NO)、ステップS101に戻って処理を繰り返す。同様に、命令制御部12は、L2キャッシュ部14からのムーブイン要求等で新規命令フェッチリクエストを受け付けられない旨の通知をL1キャッシュ部13から受信した場合にも(ステップS103NO)、ステップS101に戻って処理を繰り返す。
【0063】
一方、命令制御部12は、命令バッファに空きがあり命令プリフェッチ要求を出力できると判定した場合には(ステップS103YES)、中断している命令フェッチは分岐予測のターゲットか否かを判定する(ステップS104)。言い換えると、例えば、命令制御部12は、領域不足等で実行できない、本来なら実行したい命令フェッチ要求先のアドレスが分岐予測機構11から分岐予測された分岐予測アドレス(分岐先アドレス)であるか否かを判定する。
【0064】
中断している命令フェッチが分岐予測のターゲットである場合(ステップS104YES)、命令制御部12は、分岐予測機構11によって予測された分岐先アドレスを用いて命令プリフェッチ要求をL1キャッシュ部13に出力する(ステップS105)。その後、ステップS101に戻って以降の処理を繰り返す。言い換えると、例えば、命令制御部12は、領域不足等で実行できない、本来なら実行した命令フェッチ要求先のアドレスが分岐予測機構11から分岐予測された分岐先アドレスである場合に、命令プリフェッチ要求をL1キャッシュ部13に出力する。
【0065】
また、中断している命令フェッチが分岐予測のターゲットでない場合(ステップS104NO)、命令制御部12は、現在対象となっている命令フェッチアドレスに32バイト加算した新たなアドレスで分岐予測を行うことを分岐予測機構11に要求する(ステップS106)。言い換えると、例えば、命令制御部12は、領域不足等で実行できない、本来なら実行したい命令フェッチ要求先のアドレスが分岐予測機構11から分岐予測された分岐先アドレスでない場合に、上記新たなアドレスで分岐予測を行うことを分岐予測機構11に要求する。
【0066】
その後、分岐予測機構11によって分岐予測された場合には(ステップS107YES)、命令制御部12は、ステップS105の処理を実行する。一方、命令制御部12は、分岐予測機構11によって分岐予測されなかった場合には(ステップS107NO)、現在対象となっている命令フェッチアドレスがL1キャッシュライン境界か否かを判定する(ステップS108)。
【0067】
そして、命令制御部12は、現在命令フェッチ対象となっているアドレスがL1キャッシュライン境界である場合(ステップS108YES)、当該アドレスを用いて、命令プリフェッチ要求を行う(ステップS109)。一方、命令制御部12は、現在命令フェッチ対象となっているアドレスがL1キャッシュライン境界でない場合(ステップS108NO)、ステップS106に戻って、以降の処理を実行する。
【0068】
[命令制御装置のタイムチャート]
次に、図8〜図12を用いて、命令制御装置で実施される命令フェッチ制御および命令プリフェッチ制御のタイムチャート例を説明する。なお、ここで提示しているタイムチャートは動作タイミングの一部であり全てのタイミングを示すものではない。
【0069】
まず、図8〜図12に登場する信号について説明する。「IBUFF−FULL」は、IBR0〜5がすべて使用中であることを示す信号である。「PREFCH−PRIO−TGR」は、この信号がオンのときのみ命令プリフェッチパイプが起動できる。ただし、この信号がオンだからといってプリフェッチパイプが起動されているわけではない。
【0070】
「PREFCH−IAR」は、IFEAG12bが保持している命令プリフェッチリクエスト用のアドレスレジスタ。+32とあるのは前サイクルのアドレスに対して32バイト加算したという意味である。「PREFCH−REQ−VAL」は、命令制御部12からL1キャッシュ部13への命令プリフェッチリクエスト信号である。「PREFCH−REQ−LCH」は、命令プリフェッチ条件および命令プリフェッチアドレスが確定したことを示す信号であり、この信号がオンでないと命令プリフェッチ要求は送出されない。「PORT−BUSY」は、L1キャッシュ部13がキャッシュミスしL2キャッシュ部14からのムーブイン待ちもしくはL2キャッシュ部14からのムーブアウト要求等で新規命令フェッチリクエストを受け付けられないことを示す信号である。この信号がオンになると1τ後に命令制御部12に対して、命令フェッチリクエストを受け付けられないことを通知する「IF−SU−BUSY」がオンとなる。
【0071】
(パターン1)
パターン1は、図8に示すように、サイクル3が命令フェッチリクエストの最後となるパターンである。パターン1では、命令制御部12は、サイクル4〜サイクル12までIBR0〜5に空きがないため、命令フェッチを出力することが出来ない。サイクル4の「PREFCH−IAR=+32」は(サイクル3で出した命令フェッチアドレス+32バイト)である。命令制御部12は、サイクル5において、サイクル3で出した命令フェッチアドレスの分岐予測判定およびシーケンシャル方向の次32バイトアドレスのL1キャッシュライン境界の判定を行う。ここでは、命令制御部12は、サイクル5の時点で命令プリフェッチ条件を満たさなかったため、サイクル6のPAサイクルでは命令プリフェッチリクエストを出力しない。
【0072】
また、命令制御部12は、サイクル8において、サイクル3で出した命令フェッチアドレス+64バイトがL1キャッシュライン境界であると判定する。そのため、命令制御部12は、サイクル9で「PREFCH−REQ−LCH」をオンとし、同時に「PREFCH−REQ−VAL」をオンとして、L1キャッシュ部13に命令プリフェッチ要求を送出する。このときL1キャッシュに送られた命令プリフェッチアドレスは、サイクル3で出した命令フェッチアドレス+64バイトである。なお、命令プリフェッチアドレスは、32バイトずつ加算されたアドレスとなるためL1キャッシュ部13のライン境界を跨ぐケースがあるが、L1キャッシュ部13内でライン境界を見ているため問題とならない。なお、図8は、サイクル3が命令フェッチリクエストの最後となる場合のタイムチャートである。
【0073】
(パターン2)
パターン2は、図9に示すように、サイクル3が命令フェッチリクエストの最後となるパターンであるが、サイクル5でサイクル3の命令フェッチリクエストが「分岐する」と予測判定された場合のパターンである。なお、HITとあるのは分岐予測で分岐すると予測したことを示し、「BRHIS−TGT」は、分岐先アドレスを示している。
【0074】
命令制御部12は、サイクル6において、命令プリフェッチアドレスを分岐先アドレスとし、「PREFCH−REQ−LCH」をオンとするとともに、「PREFCH−REQ−VAL」をオンにして、L1キャッシュ部13に命令プリフェッチ要求を送出する。また、命令制御部12は、サイクル12において、サイクル11でサイクル6の命令プリフェッチアドレスである「BRHIS−TGT」に+64バイト加算したアドレスがL1キャッシュライン境界であると判定したために、命令プリフェッチ要求を送出している。なお、図9は、サイクル3が命令フェッチリクエストの最後となり、サイクル5で分岐すると予測された場合のタイムチャートである。
【0075】
(パターン3)
パターン3は、図10に示すように、サイクル3〜10まで「PORT−BUSY」がオンとなっているためサイクル4〜11まで「IF−SU−BUSY」がオンとなりこの間、命令フェッチリクエストが停止している状態である。この場合、命令制御部12は、サイクル12で「IF−SU−BUSY」をオフとして、命令フェッチを再開する。この場合の命令フェッチアドレスは、サイクル3の命令フェッチの続きであり、サイクル3の命令フェッチが分岐予測されていないため、サイクル3で出した命令フェッチアドレス+32バイトとなる。なお、図10は、PORT−BUSYで命令フェッチリクエストが停止している場合のタイムチャートである。
【0076】
(パターン4)
パターン4は、図11に示すように、パターン3のケースと類似ケースであるが、サイクル5で、サイクル3の命令フェッチが分岐すると予測されている。そのため、命令制御部12は、サイクル12で命令フェッチが再開された場合の命令フェッチアドレスを「BRHIS−TGT」としている。なお、図11は、サイクル5でサイクル3の命令フェッチが分岐すると予測された場合のタイムチャートである。
【0077】
(パターン5)
パターン5は、図12に示すように、パターン3と同様、サイクル12で「IF−SU−BUSY」がオフとなり命令フェッチが再開しているパターンである。この場合の命令フェッチアドレスは、サイクル3の命令フェッチの続きであり、サイクル3の命令フェッチが分岐予測されていないため、サイクル3で出した命令フェッチアドレス+32バイトとなる。命令制御部12は、プリフェッチパイプ中に分岐予測がおこなわれているため(サイクル8)、サイクル12で再開した命令フェッチリクエストより後続のアドレスを前もって命令プリフェッチすることとなる。なお、図12は、サイクル12で命令フェッチが再開する場合のタイムチャートである。
【0078】
[実施例1による効果]
このように、実施例1によれば、L1キャッシュ部13と命令制御部12とで独立して行われていた命令プリフェッチ制御を命令制御部12のみで実行することができる。その結果、不要な命令プリフェッチ要求などの発生を抑止し、プロセッサの性能低下を防止することができる。
【0079】
また、実施例1によれば、上記した(条件1)、(条件2)の状態が続く限り、命令プリフェッチパイプラインを動作させることが可能であるが、L1キャッシュに対する命令プリフェッチ要求回数を制限することができる。その結果、不要な命令プリフェッチ要求などの発生をより抑止することができ、結果として、プロセッサの性能低下をさらに防止することができる。
【実施例2】
【0080】
さて、これまで開示する情報処理装置の実施例について説明したが、開示する命令制御装置は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に示すように、異なる実施例を説明する。
【0081】
(パイプライン数)
実施例1で説明した命令フェッチパイプライン数や命令プリフェッチパイプライン数は、あくまで例示であり、これに限定されるものではない。
【0082】
(システム構成等)
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができ、CPUコアが複数あってもよい。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUやMPUおよび当該CPUやMPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【0083】
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【符号の説明】
【0084】
10 命令制御装置
11 分岐予測機構
12 命令制御部
12a IBUFF
12b IFEAG
12c IFCTL
13 L1キャッシュ部
14 L2キャッシュ部
15 デコーダ部
【技術分野】
【0001】
本発明は、命令制御装置、命令制御方法および演算回路に関する。
【背景技術】
【0002】
従来より、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などのプロセッサでは、将来に実行が予測される命令をメインメモリからキャッシュメモリ等のより高速なメモリに予め読み込んでおき、プロセッサの性能の向上を図る命令プリフェッチ制御が利用されている。
【0003】
プロセッサは、メインメモリ、1次キャッシュ(L1キャッシュ)、2次キャッシュ(L2キャッシュ)、命令制御部、デコーダ部などの機能部を有している。メインメモリは、データやプログラムなどを記憶する主記憶装置であり、CPUなどの情報処理装置が直接読み書きできるRAM(Random Access Memory)やROM(Read Only Memory)などの半導体記憶装置である。
【0004】
2次キャッシュは、メインメモリに記憶される比較的利用頻度の高いデータや命令を記憶するキャッシュメモリであって、メインメモリより高速なアクセスを可能とするキャッシュメモリである。1次キャッシュは、2次キャッシュに記憶される情報よりも利用頻度の高いデータ(命令やデータ)を記憶する2次キャッシュより高速なキャッシュメモリである。
【0005】
命令制御部は、命令のフェッチやプリフェッチ制御を行う制御部であり、デコーダ部は、命令制御部により読み出された命令をデコードして実行する制御部である。もっとも、プロセッサは、上述した機能部以外にも、例えば、次に実行する命令アドレスを示すプログラムカウンタや命令の実行完了判定であるコミット判定など他の一般的な機能部を有していてもよい。
【0006】
ところで、上述した命令プリフェッチ制御は、上記命令制御部とL1キャッシュの両方で独立して実行される。命令制御部では、L1キャッシュから送られる命令フェッチデータを一時的に保持する命令バッファに空きがない場合にのみ、命令フェッチリクエストをプリフェッチリクエストに差し替えていた。この場合、L1キャッシュは、プリフェッチリクエストに対してキャッシュヒットしたか否かに関わらず、必ずしも命令制御部に命令を応答する必要はない。また、命令フェッチのアドレスは、命令バッファ1エントリ分のデータ容量に依存する。命令バッファ1エントリ分の容量は、例えば32バイトなので命令フェッチアドレスは32バイトアドレス境界(単位)で発行する。したがって、命令プリフェッチも同様であり、L1キャッシュのキャッシュラインは1ライン128バイトなので、同一ラインへのリクエストを何度も発行していた。
【0007】
一方、L1キャッシュは、L2キャッシュからのリクエストまたは他のL1キャッシュからL2キャッシュへのリクエストにより、命令制御部から新規命令フェッチリクエストを受け付けられない場合に、L2キャッシュに対してプリフェッチリクエストを発行していた。ところが、L1キャッシュは、分岐予測機構を参照できないため、実際は分岐予測先アドレスでリクエストを発行すべきところをシーケンシャル方向、言い換えると、例えば、命令実行順序方向や命令実行するアドレス方向で発行することがあった。
【0008】
ここで、図13を用いて、上述した処理を具体的に説明する。従来技術に係るプロセッサの命令制御部は、命令フェッチ要求が出力できると判断した場合には(ステップS501YES)、命令フェッチ要求をL1キャッシュに出力する(ステップS502)。
【0009】
ところが、従来技術に係るプロセッサの命令制御部は、命令フェッチ要求が出力できないと判断した場合には(ステップS501NO)、命令プリフェッチ要求がL1キャッシュに出力できるかを判定する(ステップS503)。ここで、プロセッサの命令制御部は、命令バッファに空きがないため命令プリフェッチ要求を出力できないと判定した場合には(ステップS503NO)、ステップS501に戻って処理を繰り返す。
【0010】
一方、プロセッサの命令制御部は、命令バッファに空きがあり命令プリフェッチ要求を出力できると判定した場合には(ステップS503YES)、中断している命令フェッチは分岐予測のターゲットか否かを判定する(ステップS504)。言い換えると、例えば、プロセッサの命令制御部は、領域不足等で実行できない、本来なら実行したい命令フェッチ要求先のアドレスが分岐予測機構から分岐予測された分岐予測アドレス(分岐先アドレス)であるか否かを判定する。
【0011】
中断している命令フェッチが分岐予測のターゲットである場合(ステップS504YES)、プロセッサの命令制御部は、分岐予測機構によって予測された分岐先アドレスを用いて命令プリフェッチ要求をL1キャッシュに出力する(ステップS505)。その後、ステップS501に戻って以降の処理を繰り返す。言い換えると、例えば、プロセッサの命令制御部は、領域不足等で実行できない、本来なら実行した命令フェッチ要求先のアドレスが分岐予測機構から分岐予測された分岐先アドレスである場合に、命令プリフェッチ要求をL1キャッシュに出力する。
【0012】
また、中断している命令フェッチが分岐予測のターゲットでない場合(ステップS504NO)、プロセッサの命令制御部は、アドレスに32バイト加算した新たなアドレスで分岐予測を行うことを分岐予測機構に要求する(ステップS506)。言い換えると、例えば、命令制御部は、領域不足等で実行できない、本来なら実行したい命令フェッチ要求先のアドレスが分岐予測機構から分岐予測された分岐先アドレスでない場合に、上記新たなアドレスで分岐予測を行うことを分岐予測機構に要求する。
【0013】
その後、分岐予測機構によって分岐予測された場合には(ステップS507YES)、プロセッサの命令制御部は、ステップS505の処理を実行する。一方、プロセッサの命令制御部は、分岐予測機構によって分岐予測されなかった場合には(ステップS507NO)、命令プリフェッチ要求をL1キャッシュに出力する(ステップS508)。
【先行技術文献】
【特許文献】
【0014】
【特許文献1】特開2000−357090号公報
【特許文献2】特開平8−272610号公報
【特許文献3】特開2001−166934号公報
【発明の概要】
【発明が解決しようとする課題】
【0015】
しかしながら、上述した従来の技術では、不要な命令プリフェッチ要求などが発生し、プロセッサの性能低下に繋がってしまうという課題があった。具体的には、上述したように、命令フェッチ制御部とL1キャッシュが異なる条件で個別にプリフェッチを発行していた。そのため、実際に必要としない領域に対してリクエストを発行することや、必要な領域をリプレースするという現象が発生していた。プロセッサは、本来は不必要であるこれらの動作を実行してしまうことで、結果的に性能面で寄与しないケースや悪化してしまうケースが発生していた。
【0016】
例えば、図14に示すように、命令制御部は、L1キャッシュから受け付けた命令を保持する命令バッファに空きが無い場合に、命令フェッチが中断され、命令フェッチ要求を命令プリフェッチ要求に差し替えて、L1キャッシュに何度も出力する。一方、L1キャッシュは、命令制御部から出力される命令プリフェッチ要求に関係なく、L2キャッシュからのムーブイン要求等で新規命令フェッチリクエストを受け付けられない場合に、L2キャッシュに対して命令プリフェッチ要求を発行する。
【0017】
また、図15に示すように、命令制御部は、3回目の命令プリフェッチ要求を分岐予測機構によって予測された分岐予測先アドレスを用いた要求でL1キャッシュに発行する。この場合、L1キャッシュは、分岐予測先アドレスを用いて命令プリフェッチ要求を発行する必要があるが、分岐予測先機構を参照することができないため、通常通り、命令フェッチアドレスのシーケンシャル方向で発行してしまう。つまり、図14や図15からわかるように、命令制御部とL1キャッシュとの間で、命令プリフェッチ要求が連動していない。そのため、一方が正しく命令プリフェッチ要求を発行した場合であっても、もう一方が不要な命令プリフェッチ要求を発行してしまうなど、整合性がない命令プリフェッチ要求が乱立してしまう可能性がある。
【0018】
開示の技術は、上記に鑑みてなされたものであって、不要な命令プリフェッチ要求などの発生を抑止し、プロセッサの性能低下を防止することが可能である命令制御装置、命令制御方法および演算回路を提供することを目的とする。
【課題を解決するための手段】
【0019】
本願の開示する命令制御装置は、一つの態様において、メインメモリに記憶されるデータのうち利用頻度の高いデータを記憶するキャッシュメモリと、前記キャッシュメモリから受信した命令フェッチデータを保存する命令バッファに空きがあるか否かを判定する第一空き領域判定部と、前記第一空き領域判定部によって、前記命令バッファに空きがあると判定された場合に、前記キャッシュメモリから前記メインメモリに送出する命令フェッチリクエストキューを管理する、前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあるか否かを判定する第二空き領域判定部と、前記第二空き領域判定部によって前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあると判定された場合に、前記キャッシュラインのラインサイズに従ったアドレス境界で命令プリフェッチ要求を前記キャッシュメモリに出力する命令制御部と、を有する。
【発明の効果】
【0020】
本願の開示する命令制御装置、命令制御方法および演算回路の一つの態様によれば、不要な命令プリフェッチ要求などの発生を抑止し、プロセッサの性能低下を防止することが可能であるという効果を奏する。
【図面の簡単な説明】
【0021】
【図1】図1は、実施例1に係る命令制御装置の構成を示すブロック図である。
【図2】図2は、IBUFFの構成とL1キャッシュとの接続関係を示す図である。
【図3】図3は、命令プリフェッチパイプ制御の例を示す図である。
【図4】図4は、命令フェッチパイプと命令プリフェッチパイプのパイプ制御の関係例を示す図である。
【図5】図5は、命令プリフェッチ制御を説明する図である。
【図6】図6は、分岐予測結果も用いた命令プリフェッチ制御を説明する図である。
【図7】図7は、実施例1に係る命令制御装置による処理の流れを示すフローチャートである。
【図8】図8は、サイクル3が命令フェッチリクエストの最後となる場合のタイムチャートである。
【図9】図9は、サイクル3が命令フェッチリクエストの最後となり、サイクル5で分岐すると予測された場合のタイムチャートである。
【図10】図10は、PORT−BUSYで命令フェッチリクエストが停止している場合のタイムチャートである。
【図11】図11は、サイクル5でサイクル3の命令フェッチが分岐すると予測された場合のタイムチャートである。
【図12】図12は、サイクル12で命令フェッチが再開する場合のタイムチャートである。
【図13】図13は、従来の命令プリフェッチ制御処理の流れを示すフローチャートである。
【図14】図14は、従来の命令プリフェッチ制御を説明する図である。
【図15】図15は、従来の分岐予測結果も用いた命令プリフェッチ制御を説明する図である。
【発明を実施するための形態】
【0022】
以下に、本願の開示する命令制御装置、命令制御方法および演算回路の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの開示する命令制御装置が限定されるものではない。
【実施例1】
【0023】
開示する命令制御装置は、各種キャッシュメモリや分岐予測機構などと接続され、CPUやMPUなどのプロセッサであり、コンピュータなどの情報処理装置に用いられる。また、開示する命令制御装置を有するプロセッサは、パイプライン方式を採用しており、さらに、アウトオブオーダーで命令を実行することで、高速な処理を実行することができる。そして、開示する命令制御装置は、L1キャッシュ部と命令制御部とで独立して行われていた命令プリフェッチ制御を命令制御部のみで実行することにより、不要な命令プリフェッチ要求などの発生を抑止し、プロセッサの性能低下を防止することができる。
【0024】
そこで、実施例1では、開示する命令制御装置の構成、処理の流れ、タイムチャート、効果等について、図を用いて説明する。
【0025】
[命令制御装置の構成]
まず、図1を用いて、実施例1に係る命令制御装置の構成について説明する。図1は、実施例1に係る命令制御装置の構成を示すブロック図である。
【0026】
図1に示すように、命令制御装置10は、分岐予測機構11と、命令制御部12と、L1キャッシュ部13と、L2キャッシュ部14、デコーダ部15とを有する。もちろん、ここで例示した機能部は、あくまで例示であり、これら以外にもレジスタ、プログラムカウンタ、コミット部などプロセッサの一般的な機能部を有していてもよい。なお、分岐予測機構11は、特許請求の範囲に記載の分岐予測部の一例であり、命令制御部12は、特許請求の範囲に記載の第一空き領域判定部や命令制御部などの一例であり、L1キャッシュ部13は、特許請求の範囲に記載の第二空き領域判定部の一例である。
【0027】
分岐予測機構11は、命令制御部12と接続され、現在実行されている命令の後続の命令が分岐するかを予測し、分岐する場合は分岐先の命令を命令制御部12のパイプラインに出力する。具体的には、分岐予測機構11は、命令制御部12から受け付けた命令フェッチアドレスを用いて分岐予測を行い、命令フェッチアドレスを受け付けたサイクルの次にサイクルで命令制御部12に予測結果を出力する。なお、分岐予測手法は、単純予測、静的予測、次ライン予測など様々な手法があるが、いずれの手法でも用いることができる。
【0028】
命令制御部12は、命令フェッチ制御、命令プリフェッチ制御、デコーダ部への命令出力等を行う制御部であり、特に、IBUFF12aと、IFEAG12bと、IFCTL12cとを有する。
【0029】
IBUFF12aは、L1キャッシュ部13から取得した命令データをデコーダ部15に供給するまで一時的に保存するバッファである。また、IBUFF12aは、図2に示すように、32バイト格納可能な6個のバッファ(IBR0〜IBR5)を有し、それぞれのバッファに対応して命令フェッチアドレスを記憶している。なお、図2は、IBUFFの構成とL1キャッシュとの接続関係を示す図である。
【0030】
IFEAG12bは、命令フェッチアドレスや命令プリフェッチアドレスを生成して、L1キャッシュ部13等に出力する処理部である。また、IFCTL12cは、命令フェッチ要求(命令フェッチリクエスト)や命令プリフェッチ要求(命令プリフェッチリクエスト)をL1キャッシュ部13に出力する制御部である。
【0031】
ここで、命令制御部12が実行する命令フェッチ制御と命令プリフェッチ制御について説明する。
【0032】
(命令フェッチ制御)
命令制御部12が実行する命令フェッチ制御は、5サイクル(IA、IT、IM、IB、IR)の命令フェッチパイプ(パイプライン)で実行される。
【0033】
(IAサイクル)
IAサイクルでは、命令制御部12のIFCTL12cは、先頭命令のアドレスがプログラムカウンタからIFEAG12bに供給されると、先頭命令の命令フェッチ要求をL1キャッシュ部13に送信する。また、IFEAG12bは、IFCTL12cからの命令フェッチ要求と同時に、L1キャッシュ部13に命令フェッチアドレスを送信する。なお、命令フェッチは32バイト単位でおこなわれ、1サイクルで1リクエスト送ることができる。
【0034】
(ITサイクル)
ITサイクルでは、命令制御部12のIFEAG12bは、IAサイクルで作成した命令フェッチアドレスを分岐予測機構11に送信する。ここで、分岐予測機構11は、受け付けた命令フェッチアドレスを用いて分岐予測を行う。
【0035】
(IMサイクル)
IMサイクルでは、命令制御部12のIFCTL12cは、分岐予測機構11から予測結果を受信し、IFEAG12bは、分岐予測機構11から予測された分岐予測アドレスを受信する。なお、命令フェッチ要求は、最大IBUFF12aのIBRの数だけL1キャッシュ部13に送ることができる。そのため、毎サイクル、命令フェッチを送ると最大6リクエスト分の命令フェッチパイプが動作していることになる。IMサイクルで分岐すると予測された場合、分岐予測をおこなっているIT、IMサイクル2サイクルの間に+32バイト、+64バイトの2個のリクエストが送られていることになる。ところが、これらのリクエストは分岐予測結果に反していることになり不必要なリクエストであるため、IBサイクルでキャンセルされる。
【0036】
(IBサイクル)
IBサイクルでは、命令制御部12のIFCTL12cは、IBUFF12aのいずれかのIBRに空きがあった場合に、IMサイクルで受信した分岐予測アドレスを用いた命令フェッチ要求をL1キャッシュ部13に出力する。なお、IBサイクルでは、L1キャッシュ部13からIBUFF12aに対して命令データが送信される。
【0037】
(IRサイクル)
IRサイクルでは、各IBR0〜5内の命令データが有効であることを通知するIF−STV信号がL1キャッシュ部13から命令制御部12のIFCTL12cに送信される。IRサイクルまで完了すると命令フェッチが完了したことになる。IBUFF12aからデコーダ部15への命令データ供給は最短でIRサイクルで行われる。IBR1個は、32バイトの命令データを保持しており、1命令が4バイトであり、デコーダ部15が4命令を同時処理できることから、1〜2サイクルでデコーダ部15への命令供給が可能である。全てのデータを供給したIBRはクリアされ新しい命令フェッチ制御に使用される。
【0038】
上述したように、通常、命令制御部12は、毎サイクルで命令フェッチ要を送信することができるが、以下の場合は送信できなくなる。(条件1)IBUFFの6個のバッファ(IBR0〜5)すべて使用中の場合、(条件2)L1キャッシュ部13がキャッシュミスし、L2キャッシュ部14からのムーブイン待ちもしくはL2キャッシュ部14からのムーブアウト要求等で新規命令フェッチリクエストを受け付けられない場合である。
【0039】
開示する命令制御装置では、上記(条件1)、(条件2)のいずれの事象が発生した場合であっても、L1キャッシュ部13内のムーブイン・バッファ(MIB)に空きがあれば、命令プリフェッチ制御をおこなうことができる。命令プリフェッチ制御をおこなうことで、L1キャッシュ部13に命令データが存在しない場合に、早めにL2キャッシュ部14に対してリクエストを送ることができる。命令プリフェッチ制御のリクエスト制御はIFCTL12cでおこなわれ、アドレスはIFEAG12bで作成される。命令プリフェッチ制御は、要求する命令データがL1キャッシュ部13にヒットするか否かに関わらず条件がそろえば命令制御部12からL1キャッシュ部13に対しておこなわれる。
【0040】
(命令プリフェッチ制御)
ここで、命令制御部12が実行する命令プリフェッチ制御について説明する。命令制御部12は、上述した命令フェッチ制御が上記(条件1)もしくは(条件2)の要因で停止している場合に、今後必要であると思われる先行アドレスに対して命令プリフェッチ制御を行う。また、命令制御部12の命令フェッチ制御と同様に、分岐予測をおこないながら複数のアドレスに対して命令プリフェッチ制御を行うことも可能である。例えば、上記(条件1)の条件は、IFCTL12c内で判断される。上記(条件2)の条件については、L1キャッシュ部13から条件成立の1τ前(L1キャッシュ部13がキャッシュミスした信号出力後)にIFCTL12cに通知される。
【0041】
なお、L1キャッシュ部13は、命令制御部12から指示された命令プリフェッチアドレスに対してキャッシュを検索し、ヒットしなかった場合は、L2キャッシュ部14にリクエストを出力する。L1キャッシュ部13は、キャッシュヒットするしないに関わらず要求された命令プリフェッチリクエストに対して命令データを命令制御部12に送信(応答)する必要はない。
【0042】
そして、命令制御部12は、上述した6サイクルの命令フェッチパイプとは別に、独立した4パイプ(PA、PT、PM、PB)で命令プリフェッチ制御を行う。命令制御部12は、命令フェッチパイプとは異なりPA、PT、PMサイクル時は他のPA、PT、PMサイクルを動作させることができないので、図3に示すようなパイプ制御を行うこととなる。なお、図3は、命令プリフェッチパイプ制御の例を示す図である。
【0043】
また、命令制御部12は、命令フェッチパイプと命令プリフェッチパイプを同時に実行する場合、IA、IT、IMサイクル時はPA、PT、PMサイクルを動作できない。さらに、IA、PAサイクルは同時に動作できない。ただし、PT、PM、PBサイクル時に新規の命令フェッチパイプを動作は可能である。以上より、命令制御部12は、命令フェッチパイプと命令プリフェッチパイプを同時に実行する場合、図4に示すようなパイプ制御を行うこととなる。なお、図4は、命令フェッチパイプと命令プリフェッチパイプのパイプ制御の関係例を示す図である。
【0044】
命令制御部12は、命令プリフェッチ要求をPAサイクルでL1キャッシュ部13に送信する。ただし、命令制御部12は、(条件3)分岐予測がおこなわれ分岐先アドレスが供給された場合に送信することができる。また、命令制御部12は、(条件4)命令プリフェッチアドレスがL1キャッシュのラインアドレス境界を指している場合に、命令プリフェッチ要求をL1キャッシュ部13に送信することができる。したがって、命令制御部12は、PAサイクルだからといって必ず命令プリフェッチ要求を送信できるわけではない。
【0045】
次に、命令プリフェッチアドレスの生成について説明する。命令プリフェッチアドレスは、命令制御部12のIFEAG12bで生成される。命令プリフェッチアドレスは、命令フェッチが停止したアドレスの後続アドレスである。IFEAG12bは、各IBR0〜5から出力された命令フェッチアドレスを各IBRでクリアされるまで保持している。また、次に命令フェッチするアドレスもIFEAG12bで生成され保持されている。また、IFEAG12bは、分岐予測機構11によって分岐予測された分岐先アドレスも保持している。
【0046】
命令制御部12のIFEAG12bは、上記(条件1)もしくは(条件2)の条件で停止した命令フェッチが次に分岐予測した分岐先アドレスを要求しようとしていた場合、命令プリフェッチアドレスに、そのまま分岐先アドレスをセットする。
【0047】
また、命令制御部12のIFEAG12bは、停止した命令フェッチがそれ以外のアドレスを要求しようとしていた場合、そのアドレスがL1キャッシュ部13のライン境界アドレスであれば、そのアドレスを命令プリフェッチアドレスにセットする。一方、命令制御部12のIFEAG12bは、アドレスがL1キャッシュのライン境界でない場合は、命令プリフェッチを出力しない。
【0048】
ただしここで、命令制御部12のIFEAG12bは、命令フェッチパイプのIT、IMサイクルが起動していない場合は、命令プリフェッチパイプのPAサイクルを起動する。そして、命令制御部12のIFEAG12bは、PAサイクルを起動すると、1τ後にPTサイクルを起動する。PTサイクルでは、停止したアドレスに対して+32バイト(32バイト加算)されたアドレスがIFEAG12bにセットされる。同時に、停止した命令フェッチアドレスに対して分岐予測機構11で分岐予測が開始される。
【0049】
続いて、PMサイクルで、分岐予測機構11は、分岐予測結果を出力し、IFEAG12bは、PTサイクルでセットされたアドレスに対してL1キャッシュ部13のライン境界であるかどうかが判定する。そして、分岐予測機構11によって分岐すると判定された場合、IFEAG12bは、分岐予測機構11によって予測された分岐先アドレスを命令プリフェッチアドレスに再セットする。一方、IFEAG12bは、分岐予測機構11によって分岐しないと判定された場合には、命令プリフェッチアドレスを変更しない。
【0050】
このように、IFEAG12bは、PMサイクルにおいて、L1キャッシュ部13のライン境界であると判定するか、または、分岐予測機構11によって分岐すると判定されると、以下の処理を実行する。つまり、IFEAG12bは、1τ後のPBサイクルのタイミングで、命令プリフェッチリクエストをL1キャッシュ部13に要求し、新規PAサイクルを起動する。また、IFEAG12bは、PMサイクルにおいて、L1キャッシュ部13のライン境界でないと判定するか、または、分岐予測機構11によって分岐されないと判定されると、以下の処理を実行する。つまり、IFEAG12bは、命令プリフェッチリクエストを要求しないが新規PAサイクルを起動する。
【0051】
この後、命令制御部12は、新規命令プリフェッチパイプを同じように実行していく。そして、命令制御部12は、命令プリフェッチパイプが実行・命令フェッチパイプラインがクリアされる、もしくは上記(条件1)、(条件2)の状態が解除され命令フェッチが再開されるとクリアする。また、命令制御部12は、(条件1)、(条件2)の状態が続く限り、命令プリフェッチパイプラインを動作させることが可能であるが、L1キャッシュに対する命令プリフェッチ要求回数を制限することもできる。この場合、命令制御部12は、命令プリフェッチ要求を制限回数L1キャッシュに対して送出すると、それ以降命令プリフェッチパイプラインに新規命令フェッチを要求し、再度、上記(条件1)、(条件2)の状態になるまで起動しない。
【0052】
図1に戻り、L1キャッシュ部13は、L2キャッシュ部14に記憶される情報よりもさらに利用頻度の高いデータ(命令やデータ)を記憶する高速なキャッシュメモリである。また、L1キャッシュ部13は、命令制御部12から送られた命令プリフェッチリクエストに対して各種制御を行う。
【0053】
具体的には、L1キャッシュ部13は、送られてきたアドレスに対してキャッシュミスしてL2キャッシュ部14以降にデータを要求する場合、MIBに2エントリ以上の空きがあるかないかを判定する。そして、L1キャッシュ部13は、MIBに2エントリ以上の空きがない場合は、MIBの割り当てはおこなわず、L1キャッシュ部13内でアボートされMIBに2エントリ以上の空きができるまで待機する。
【0054】
つまり、命令プリフェッチのデータ要求でMIBが一杯になっている間に、命令フェッチ停止状態が解除された場合、新規命令フェッチ要求が受け付けられないからである。命令プリフェッチリクエストがMIBを獲得しデータが返ってくるのを待っている間に、命令フェッチが再開する。そして、命令プリフェッチアドレスと同一キャッシュラインアドレスの命令フェッチリクエストがL1キャッシュ部13に送られている場合に、L2キャッシュ部14から命令プリフェッチに対して返されたデータがバイパスされ、後続の命令フェッチデータとして命令制御部12に返される。L1キャッシュ部13は、命令プリフェッチリクエストを受け付けられない場合、命令制御部12に対してその旨を示す信号(IF−SU−PREFCH−BUSY)をオンにする。また、L1キャッシュ部13は、命令フェッチリクエストを受け付けられない場合、別信号(IF−SU−BUSY)をオンにする。この2つの信号は別信号でありそれぞれ独立している。したがって、IF−SU−BUSYがオンであるからといって、IF−SU−PREFCH−BUSYがオンであるとは限らないし、その逆も同じである。なお、両信号がオンになることもある。
【0055】
図2に戻り、L2キャッシュ部14は、L1キャッシュ部13よりも容量が多く低速で、メインメモリよりも高速なキャッシュメモリであって、比較的利用頻度の高いデータ(命令やデータ)を記憶している。
【0056】
デコーダ部15は、命令制御部12のIBUFF12aから読み出した命令をデコードして実行するデコーダーである。なお、開示する装置は、上述した以外にも、プログラムカウンタやコミット判定など他の一般的な機能部を有していてもよいが、これらの機能は一般的なプロセッサ(CPUやMPUなど)に搭載される機能部と同様の機能を有するので、ここでは詳細な説明は省略する。
【0057】
[命令制御装置による処理]
次に、図5〜図7を用いて、実施例1に係る命令制御装置に処理の流れについて説明する。図5に示すように、命令制御部12は、当該制御部12内の命令バッファ(IBUFF12aなど)に空きが無い場合に、命令フェッチ制御を停止する。また、命令制御部12は、L1キャッシュ部13からL2キャッシュ部14からのムーブイン要求等で新規命令フェッチリクエストを受信できない旨が通知されると、命令フェッチ制御を停止する。これらの場合、命令制御部12は、上述した(条件1)または(条件2)に該当することから、命令プリフェッチ要求(リクエスト)をL1キャッシュに送信する。なお、命令制御部12は、上述した(条件1)および(条件2)が解除されるまで命令プリフェッチ要求(リクエスト)をL1キャッシュに送信するが、回数を制限することもでき、図5では、2回送信している例を示している。
【0058】
また、図6に示すように、命令制御部12は、当該制御部12内の命令バッファ(IBUFF12aなど)に空きが無い場合に、命令フェッチ制御を停止する。また、命令制御部12は、L1キャッシュ部13からL2キャッシュ部14からのムーブイン要求等で新規命令フェッチリクエストを受信できない旨が通知されると、命令フェッチ制御を停止する。これらの場合、命令制御部12は、上述した(条件1)または(条件2)に該当することから、命令プリフェッチ要求(リクエスト)をL1キャッシュに送信する。図6の場合、命令制御部12は、命令プリフェッチ要求をL1キャッシュ部13に1回送信した後、分岐予測機構11によって予測された分岐予測アドレスを用いて、2回目の命令プリフェッチ要求をL1キャッシュ部13に送信している。
【0059】
図5と図6をみてもわかるように、L1キャッシュ部13は、L2キャッシュ部14からのムーブイン要求等で新規命令フェッチリクエストを受信できない旨を命令制御部12に出力していることから、独自で命令プリフェッチ要求を送信していない。したがって、L1キャッシュと命令制御部とで独立して行われていた命令プリフェッチ制御を命令制御部のみで実行することができ、不要な命令プリフェッチ要求などの発生を抑止し、プロセッサの性能低下を防止することができる。なお、図5は、命令プリフェッチ制御を説明する図であり、図6は、分岐予測結果も用いた命令プリフェッチ制御を説明する図である。
【0060】
次に、図7を用いて、実施例1に係る命令制御装置による処理の流れを説明する。図7は、実施例1に係る命令制御装置による処理の流れを示すフローチャートである。
【0061】
図7に示すように、命令制御部12は、命令フェッチ要求が出力できると判断した場合には(ステップS101YES)、命令フェッチ要求をL1キャッシュに出力する(ステップS102)。
【0062】
ところが、命令制御部12は、命令フェッチ要求が出力できないと判断した場合には(ステップS101NO)、命令プリフェッチ要求がL1キャッシュに出力できるかを判定する(ステップS103)。ここで、命令制御部12は、命令バッファ(IBUFF12a)に空きがないため命令プリフェッチ要求を出力できないと判定した場合には(ステップS103NO)、ステップS101に戻って処理を繰り返す。同様に、命令制御部12は、L2キャッシュ部14からのムーブイン要求等で新規命令フェッチリクエストを受け付けられない旨の通知をL1キャッシュ部13から受信した場合にも(ステップS103NO)、ステップS101に戻って処理を繰り返す。
【0063】
一方、命令制御部12は、命令バッファに空きがあり命令プリフェッチ要求を出力できると判定した場合には(ステップS103YES)、中断している命令フェッチは分岐予測のターゲットか否かを判定する(ステップS104)。言い換えると、例えば、命令制御部12は、領域不足等で実行できない、本来なら実行したい命令フェッチ要求先のアドレスが分岐予測機構11から分岐予測された分岐予測アドレス(分岐先アドレス)であるか否かを判定する。
【0064】
中断している命令フェッチが分岐予測のターゲットである場合(ステップS104YES)、命令制御部12は、分岐予測機構11によって予測された分岐先アドレスを用いて命令プリフェッチ要求をL1キャッシュ部13に出力する(ステップS105)。その後、ステップS101に戻って以降の処理を繰り返す。言い換えると、例えば、命令制御部12は、領域不足等で実行できない、本来なら実行した命令フェッチ要求先のアドレスが分岐予測機構11から分岐予測された分岐先アドレスである場合に、命令プリフェッチ要求をL1キャッシュ部13に出力する。
【0065】
また、中断している命令フェッチが分岐予測のターゲットでない場合(ステップS104NO)、命令制御部12は、現在対象となっている命令フェッチアドレスに32バイト加算した新たなアドレスで分岐予測を行うことを分岐予測機構11に要求する(ステップS106)。言い換えると、例えば、命令制御部12は、領域不足等で実行できない、本来なら実行したい命令フェッチ要求先のアドレスが分岐予測機構11から分岐予測された分岐先アドレスでない場合に、上記新たなアドレスで分岐予測を行うことを分岐予測機構11に要求する。
【0066】
その後、分岐予測機構11によって分岐予測された場合には(ステップS107YES)、命令制御部12は、ステップS105の処理を実行する。一方、命令制御部12は、分岐予測機構11によって分岐予測されなかった場合には(ステップS107NO)、現在対象となっている命令フェッチアドレスがL1キャッシュライン境界か否かを判定する(ステップS108)。
【0067】
そして、命令制御部12は、現在命令フェッチ対象となっているアドレスがL1キャッシュライン境界である場合(ステップS108YES)、当該アドレスを用いて、命令プリフェッチ要求を行う(ステップS109)。一方、命令制御部12は、現在命令フェッチ対象となっているアドレスがL1キャッシュライン境界でない場合(ステップS108NO)、ステップS106に戻って、以降の処理を実行する。
【0068】
[命令制御装置のタイムチャート]
次に、図8〜図12を用いて、命令制御装置で実施される命令フェッチ制御および命令プリフェッチ制御のタイムチャート例を説明する。なお、ここで提示しているタイムチャートは動作タイミングの一部であり全てのタイミングを示すものではない。
【0069】
まず、図8〜図12に登場する信号について説明する。「IBUFF−FULL」は、IBR0〜5がすべて使用中であることを示す信号である。「PREFCH−PRIO−TGR」は、この信号がオンのときのみ命令プリフェッチパイプが起動できる。ただし、この信号がオンだからといってプリフェッチパイプが起動されているわけではない。
【0070】
「PREFCH−IAR」は、IFEAG12bが保持している命令プリフェッチリクエスト用のアドレスレジスタ。+32とあるのは前サイクルのアドレスに対して32バイト加算したという意味である。「PREFCH−REQ−VAL」は、命令制御部12からL1キャッシュ部13への命令プリフェッチリクエスト信号である。「PREFCH−REQ−LCH」は、命令プリフェッチ条件および命令プリフェッチアドレスが確定したことを示す信号であり、この信号がオンでないと命令プリフェッチ要求は送出されない。「PORT−BUSY」は、L1キャッシュ部13がキャッシュミスしL2キャッシュ部14からのムーブイン待ちもしくはL2キャッシュ部14からのムーブアウト要求等で新規命令フェッチリクエストを受け付けられないことを示す信号である。この信号がオンになると1τ後に命令制御部12に対して、命令フェッチリクエストを受け付けられないことを通知する「IF−SU−BUSY」がオンとなる。
【0071】
(パターン1)
パターン1は、図8に示すように、サイクル3が命令フェッチリクエストの最後となるパターンである。パターン1では、命令制御部12は、サイクル4〜サイクル12までIBR0〜5に空きがないため、命令フェッチを出力することが出来ない。サイクル4の「PREFCH−IAR=+32」は(サイクル3で出した命令フェッチアドレス+32バイト)である。命令制御部12は、サイクル5において、サイクル3で出した命令フェッチアドレスの分岐予測判定およびシーケンシャル方向の次32バイトアドレスのL1キャッシュライン境界の判定を行う。ここでは、命令制御部12は、サイクル5の時点で命令プリフェッチ条件を満たさなかったため、サイクル6のPAサイクルでは命令プリフェッチリクエストを出力しない。
【0072】
また、命令制御部12は、サイクル8において、サイクル3で出した命令フェッチアドレス+64バイトがL1キャッシュライン境界であると判定する。そのため、命令制御部12は、サイクル9で「PREFCH−REQ−LCH」をオンとし、同時に「PREFCH−REQ−VAL」をオンとして、L1キャッシュ部13に命令プリフェッチ要求を送出する。このときL1キャッシュに送られた命令プリフェッチアドレスは、サイクル3で出した命令フェッチアドレス+64バイトである。なお、命令プリフェッチアドレスは、32バイトずつ加算されたアドレスとなるためL1キャッシュ部13のライン境界を跨ぐケースがあるが、L1キャッシュ部13内でライン境界を見ているため問題とならない。なお、図8は、サイクル3が命令フェッチリクエストの最後となる場合のタイムチャートである。
【0073】
(パターン2)
パターン2は、図9に示すように、サイクル3が命令フェッチリクエストの最後となるパターンであるが、サイクル5でサイクル3の命令フェッチリクエストが「分岐する」と予測判定された場合のパターンである。なお、HITとあるのは分岐予測で分岐すると予測したことを示し、「BRHIS−TGT」は、分岐先アドレスを示している。
【0074】
命令制御部12は、サイクル6において、命令プリフェッチアドレスを分岐先アドレスとし、「PREFCH−REQ−LCH」をオンとするとともに、「PREFCH−REQ−VAL」をオンにして、L1キャッシュ部13に命令プリフェッチ要求を送出する。また、命令制御部12は、サイクル12において、サイクル11でサイクル6の命令プリフェッチアドレスである「BRHIS−TGT」に+64バイト加算したアドレスがL1キャッシュライン境界であると判定したために、命令プリフェッチ要求を送出している。なお、図9は、サイクル3が命令フェッチリクエストの最後となり、サイクル5で分岐すると予測された場合のタイムチャートである。
【0075】
(パターン3)
パターン3は、図10に示すように、サイクル3〜10まで「PORT−BUSY」がオンとなっているためサイクル4〜11まで「IF−SU−BUSY」がオンとなりこの間、命令フェッチリクエストが停止している状態である。この場合、命令制御部12は、サイクル12で「IF−SU−BUSY」をオフとして、命令フェッチを再開する。この場合の命令フェッチアドレスは、サイクル3の命令フェッチの続きであり、サイクル3の命令フェッチが分岐予測されていないため、サイクル3で出した命令フェッチアドレス+32バイトとなる。なお、図10は、PORT−BUSYで命令フェッチリクエストが停止している場合のタイムチャートである。
【0076】
(パターン4)
パターン4は、図11に示すように、パターン3のケースと類似ケースであるが、サイクル5で、サイクル3の命令フェッチが分岐すると予測されている。そのため、命令制御部12は、サイクル12で命令フェッチが再開された場合の命令フェッチアドレスを「BRHIS−TGT」としている。なお、図11は、サイクル5でサイクル3の命令フェッチが分岐すると予測された場合のタイムチャートである。
【0077】
(パターン5)
パターン5は、図12に示すように、パターン3と同様、サイクル12で「IF−SU−BUSY」がオフとなり命令フェッチが再開しているパターンである。この場合の命令フェッチアドレスは、サイクル3の命令フェッチの続きであり、サイクル3の命令フェッチが分岐予測されていないため、サイクル3で出した命令フェッチアドレス+32バイトとなる。命令制御部12は、プリフェッチパイプ中に分岐予測がおこなわれているため(サイクル8)、サイクル12で再開した命令フェッチリクエストより後続のアドレスを前もって命令プリフェッチすることとなる。なお、図12は、サイクル12で命令フェッチが再開する場合のタイムチャートである。
【0078】
[実施例1による効果]
このように、実施例1によれば、L1キャッシュ部13と命令制御部12とで独立して行われていた命令プリフェッチ制御を命令制御部12のみで実行することができる。その結果、不要な命令プリフェッチ要求などの発生を抑止し、プロセッサの性能低下を防止することができる。
【0079】
また、実施例1によれば、上記した(条件1)、(条件2)の状態が続く限り、命令プリフェッチパイプラインを動作させることが可能であるが、L1キャッシュに対する命令プリフェッチ要求回数を制限することができる。その結果、不要な命令プリフェッチ要求などの発生をより抑止することができ、結果として、プロセッサの性能低下をさらに防止することができる。
【実施例2】
【0080】
さて、これまで開示する情報処理装置の実施例について説明したが、開示する命令制御装置は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に示すように、異なる実施例を説明する。
【0081】
(パイプライン数)
実施例1で説明した命令フェッチパイプライン数や命令プリフェッチパイプライン数は、あくまで例示であり、これに限定されるものではない。
【0082】
(システム構成等)
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができ、CPUコアが複数あってもよい。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUやMPUおよび当該CPUやMPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【0083】
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【符号の説明】
【0084】
10 命令制御装置
11 分岐予測機構
12 命令制御部
12a IBUFF
12b IFEAG
12c IFCTL
13 L1キャッシュ部
14 L2キャッシュ部
15 デコーダ部
【特許請求の範囲】
【請求項1】
メインメモリに記憶されるデータのうち利用頻度の高いデータを記憶するキャッシュメモリと、
前記キャッシュメモリから受信した命令フェッチデータを保存する命令バッファに空きがあるか否かを判定する第一空き領域判定部と、
前記第一空き領域判定部によって、前記命令バッファに空きがあると判定された場合に、前記キャッシュメモリから前記メインメモリに送出する命令フェッチリクエストキューを管理する、前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあるか否かを判定する第二空き領域判定部と、
前記第二空き領域判定部によって前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあると判定された場合に、前記キャッシュラインのラインサイズに従ったアドレス境界で命令プリフェッチ要求を前記キャッシュメモリに出力する命令制御部と、
を有することを特徴とする命令制御装置。
【請求項2】
前記キャッシュメモリが他のキャッシュメモリまたは前記メインメモリからの応答待ちもしくは他のキャッシュメモリのリクエストによって、命令フェッチ要求を新たに受け付けられない状態か否かを判定するキャッシュメモリ判定部をさらに有し、
前記第二空き領域判定部は、前記キャッシュメモリ判定部によって、前記命令フェッチ要求を新たに受け付けられない状態であると判定された場合に、前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあるか否かを判定することを特徴とする請求項1に記載の命令制御装置。
【請求項3】
命令が分岐するか否かを判定し、分岐すると判定した場合に、分岐先のアドレスを予測する分岐予測部をさらに有し、
前記命令制御部は、前記第二空き領域判定部によって前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあると判定され、かつ、前記分岐予測部によって前記分岐先のアドレスが予測された場合には、前記分岐先のアドレスを用いて、前記命令プリフェッチ要求を前記キャッシュメモリに出力することを特徴とする請求項1または2に記載の命令制御装置。
【請求項4】
メインメモリに記憶されるデータのうち利用頻度の高いデータを記憶するキャッシュメモリから受信した命令フェッチデータを保存する命令バッファに空きがあるか否かを判定する第一空き領域判定ステップと、
前記第一空き領域判定ステップによって、前記命令バッファに空きがあると判定された場合に、前記キャッシュメモリから前記メインメモリに送出する命令フェッチリクエストキューを管理する、前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあるか否かを判定する第二空き領域判定ステップと、
前記第二空き領域判定ステップによって前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあると判定された場合に、前記キャッシュラインのラインサイズに従ったアドレス境界で命令プリフェッチ要求を前記キャッシュメモリに出力する命令制御ステップと、
を含んだことを特徴とする命令制御方法。
【請求項5】
前記キャッシュメモリが他のキャッシュメモリまたは前記メインメモリからの応答待ちもしくは他のキャッシュメモリのリクエストによって、命令フェッチ要求を新たに受け付けられない状態か否かを判定するキャッシュメモリ判定ステップをさらに有し、
前記第二空き領域判定ステップは、前記キャッシュメモリ判定ステップによって、前記命令フェッチ要求を新たに受け付けられない状態であると判定された場合に、前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあるか否かを判定することを特徴とする請求項4に記載の命令制御方法。
【請求項6】
命令が分岐するか否かを判定し、分岐すると判定した場合に、分岐先のアドレスを予測する分岐予測ステップをさらに有し、
前記命令制御ステップは、前記第二空き領域判定ステップによって前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあると判定され、かつ、前記分岐予測ステップによって前記分岐先のアドレスが予測された場合には、前記分岐先のアドレスを用いて、前記命令プリフェッチ要求を前記キャッシュメモリに出力することを特徴とする請求項4または5に記載の命令制御方法。
【請求項7】
メインメモリに記憶されるデータのうち利用頻度の高いデータを記憶するキャッシュメモリと、
前記キャッシュメモリから受信した命令フェッチデータを保存する命令バッファに空きがあるか否かを判定する第一空き領域判定部と、
前記第一空き領域判定部によって、前記命令バッファに空きがあると判定された場合に、前記キャッシュメモリから前記メインメモリに送出する命令フェッチリクエストキューを管理する、前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあるか否かを判定する第二空き領域判定部と、
前記第二空き領域判定部によって前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあると判定された場合に、前記キャッシュラインのラインサイズに従ったアドレス境界で命令プリフェッチ要求を前記キャッシュメモリに出力する命令制御部と、
を有することを特徴とする演算回路。
【請求項1】
メインメモリに記憶されるデータのうち利用頻度の高いデータを記憶するキャッシュメモリと、
前記キャッシュメモリから受信した命令フェッチデータを保存する命令バッファに空きがあるか否かを判定する第一空き領域判定部と、
前記第一空き領域判定部によって、前記命令バッファに空きがあると判定された場合に、前記キャッシュメモリから前記メインメモリに送出する命令フェッチリクエストキューを管理する、前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあるか否かを判定する第二空き領域判定部と、
前記第二空き領域判定部によって前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあると判定された場合に、前記キャッシュラインのラインサイズに従ったアドレス境界で命令プリフェッチ要求を前記キャッシュメモリに出力する命令制御部と、
を有することを特徴とする命令制御装置。
【請求項2】
前記キャッシュメモリが他のキャッシュメモリまたは前記メインメモリからの応答待ちもしくは他のキャッシュメモリのリクエストによって、命令フェッチ要求を新たに受け付けられない状態か否かを判定するキャッシュメモリ判定部をさらに有し、
前記第二空き領域判定部は、前記キャッシュメモリ判定部によって、前記命令フェッチ要求を新たに受け付けられない状態であると判定された場合に、前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあるか否かを判定することを特徴とする請求項1に記載の命令制御装置。
【請求項3】
命令が分岐するか否かを判定し、分岐すると判定した場合に、分岐先のアドレスを予測する分岐予測部をさらに有し、
前記命令制御部は、前記第二空き領域判定部によって前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあると判定され、かつ、前記分岐予測部によって前記分岐先のアドレスが予測された場合には、前記分岐先のアドレスを用いて、前記命令プリフェッチ要求を前記キャッシュメモリに出力することを特徴とする請求項1または2に記載の命令制御装置。
【請求項4】
メインメモリに記憶されるデータのうち利用頻度の高いデータを記憶するキャッシュメモリから受信した命令フェッチデータを保存する命令バッファに空きがあるか否かを判定する第一空き領域判定ステップと、
前記第一空き領域判定ステップによって、前記命令バッファに空きがあると判定された場合に、前記キャッシュメモリから前記メインメモリに送出する命令フェッチリクエストキューを管理する、前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあるか否かを判定する第二空き領域判定ステップと、
前記第二空き領域判定ステップによって前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあると判定された場合に、前記キャッシュラインのラインサイズに従ったアドレス境界で命令プリフェッチ要求を前記キャッシュメモリに出力する命令制御ステップと、
を含んだことを特徴とする命令制御方法。
【請求項5】
前記キャッシュメモリが他のキャッシュメモリまたは前記メインメモリからの応答待ちもしくは他のキャッシュメモリのリクエストによって、命令フェッチ要求を新たに受け付けられない状態か否かを判定するキャッシュメモリ判定ステップをさらに有し、
前記第二空き領域判定ステップは、前記キャッシュメモリ判定ステップによって、前記命令フェッチ要求を新たに受け付けられない状態であると判定された場合に、前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあるか否かを判定することを特徴とする請求項4に記載の命令制御方法。
【請求項6】
命令が分岐するか否かを判定し、分岐すると判定した場合に、分岐先のアドレスを予測する分岐予測ステップをさらに有し、
前記命令制御ステップは、前記第二空き領域判定ステップによって前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあると判定され、かつ、前記分岐予測ステップによって前記分岐先のアドレスが予測された場合には、前記分岐先のアドレスを用いて、前記命令プリフェッチ要求を前記キャッシュメモリに出力することを特徴とする請求項4または5に記載の命令制御方法。
【請求項7】
メインメモリに記憶されるデータのうち利用頻度の高いデータを記憶するキャッシュメモリと、
前記キャッシュメモリから受信した命令フェッチデータを保存する命令バッファに空きがあるか否かを判定する第一空き領域判定部と、
前記第一空き領域判定部によって、前記命令バッファに空きがあると判定された場合に、前記キャッシュメモリから前記メインメモリに送出する命令フェッチリクエストキューを管理する、前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあるか否かを判定する第二空き領域判定部と、
前記第二空き領域判定部によって前記キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあると判定された場合に、前記キャッシュラインのラインサイズに従ったアドレス境界で命令プリフェッチ要求を前記キャッシュメモリに出力する命令制御部と、
を有することを特徴とする演算回路。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【公開番号】特開2011−13864(P2011−13864A)
【公開日】平成23年1月20日(2011.1.20)
【国際特許分類】
【出願番号】特願2009−156373(P2009−156373)
【出願日】平成21年6月30日(2009.6.30)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成23年1月20日(2011.1.20)
【国際特許分類】
【出願日】平成21年6月30日(2009.6.30)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]