(57)【要約】【課題】演算器の使用効率を向上させる演算処理装置及び演算処理装置の制御方法を提供する。【解決手段】ＬＤＳＴＱ１６１は、第１個数を上限としてロードストア命令を格納し、格納した前記ロードストア命令を順次出力して、出力したロードストア命令に応じたデータの処理をデータキャッシュ１６２又はメインメモリ２に実行させる。デコード部１３は、ロードストア命令を取得し、自己が出力したロードストア命令のうちＬＤＳＴＱ１６１から出力されていないロードストア命令の滞留数を求め、滞留数が第１個数より大きい第２個数未満の場合、取得したロードストア命令を出力する。ＬＤＳＴＱ管理部１５０は、デコード部１３から出力されたロードストア命令を取得し、ＬＤＳＴＱ１６１が格納するロードストア命令の格納数が第１個数未満の場合、取得したロードストア命令をＬＤＳＴＱ１６１へ格納する。【選択図】図２
2018205918.tif 000002
【特許請求の範囲】
【請求項１】
第１個数を上限としてロードストア命令を格納し、格納した前記ロードストア命令を順次出力して、出力したロードストア命令に応じたデータの処理をキャッシュ又はメモリに実行させる格納部と、
ロードストア命令を取得し、自己が出力したロードストア命令のうち前記格納部から出力されていないロードストア命令の滞留数を求め、前記滞留数が前記第１個数より大きい第２個数未満の場合、取得したロードストア命令を出力する命令管理部と、
前記命令管理部から出力されたロードストア命令を取得し、前記格納部が格納するロードストア命令の格納数が前記第１個数未満の場合、取得したロードストア命令を前記格納部へ格納する格納管理部と
を備えたことを特徴とする演算処理装置。
【請求項２】
前記命令管理部が出力したロードストア命令を取得し蓄積し、蓄積したロードストア命令を前記格納部へ向けて順次出力する蓄積部をさらに備え、
前記格納管理部は、前記蓄積部から出力された特定のロードストア命令を取得し、前記格納数が前記第１個数以上の場合、前記特定のロードストア命令を破棄し、前記特定のロードストア命令を前記蓄積部に再度出力させることを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記格納管理部は、前記格納数が前記第１個数以上の場合、前記特定のロードストア命令を破棄し、前記特定のロードストア命令を前記格納部が格納可能な状態になるまで、前記蓄積部からの前記特定のロードストア命令の出力を待機させ、前記特定のロードストア命令を前記格納部が出力可能な状態になった場合、前記特定のロードストア命令を前記蓄積部から再度出力させることを特徴とする請求項２に記載の演算処理装置。
【請求項４】
前記格納管理部は、前記格納数が前記第１個数以上の場合、取得した前記ロードストア命令で指定された処理で取り扱うデータを前記キャッシュに格納させることを特徴とする請求項１〜３のいずれか一つに記載の演算処理装置。
【請求項５】
第１個数を上限としてロードストア命令を格納し、格納した前記ロードストア命令を順次出力して、出力したロードストア命令に応じたデータの処理をキャッシュ又はメモリに実行させるロードストアキューを有する演算処理装置の制御方法であって、
前記ロードストア命令を命令管理回路に取得させ、
前記命令管理回路が出力したロードストア命令のうち前記ロードストアキューから出力されていないロードストア命令の滞留数を求め、
前記滞留数が前記第１個数より大きい第２個数未満の場合、取得したロードストア命令を前記命令管理回路に出力させ、
前記命令管理回路により出力された前記ロードストア命令を格納管理回路に取得させ、
前記ロードストアキューが格納するロードストア命令の格納数が前記第１個数未満の場合、前記格納管理回路が取得した前記ロードストア命令を前記ロードストアキューへ格納させる
ことを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
情報処理装置が有するプロセッサは、１つ又は複数のプロセッサコアを備える。各プロセッサコアは、命令キャッシュ、命令バッファ、デコード部、リザベーションステーション、演算実行部及びロードストアユニットを有する。プロセッサコアは、命令の実行に際して以下の処理を行う。
【０００３】
命令キャッシュには、命令が格納される。そして、命令キャッシュから命令フェッチにより読み出された命令は、命令バッファに格納される。その後、命令バッファに格納された命令バッファは、順次デコード部に送られる。デコード部は、命令デコードを行いリザベーションステーションへ命令を投入する。
【０００４】
リザベーションステーションには、演算命令を蓄積するＲＳＥ（Reservation  Station  for  Execution）及びロードストア命令を蓄積するＲＳＡ（Reservation  Station  for  Address）が含まれる。リザベーションステーションから各演算実行部への命令の投入の判断は、リザベーションステーションが行う。リザベーションステーションは、命令の並び順に依存せずに処理可能な命令から順次処理していくアウトオブオーダで命令の投入を行う。ＲＳＥは、固定小数点演算に用いるデータを保持するための固定小数点レジスタ番号を演算実行部へ送る。また、ＲＳＡも、データのロードストアに用いる固定小数点レジスタ番号を演算実行部へ送る。
【０００５】
演算実行部は、固定小数点演算器、ＧＰＲ（固定小数点レジスタ）及びアドレス生成演算器を有する。固定小数点演算器は、ＲＳＥで選ばれた演算命令が投入される。また、ＧＰＲには、固定小数点レジスタ番号の入力を受ける。固定小数点演算器は、固定小数点レジスタ番号を基に参照されたＧＰＲのデータを取得し、取得したデータを用いて投入された演算命令を実行する。演算終了後、固定小数点演算器は、ＧＰＲに演算結果を書き込む。
【０００６】
また、アドレス生成演算器は、ＲＳＡで選ばれたロードストア命令を実行する。アドレス生成演算器は、固定小数点レジスタ番号を基に参照されたＧＰＲのデータを取得する。そして、アドレス生成演算器は、ロードストア命令におけるアクセス対象となるメモリのアドレスを出力する。ＲＳＡは、アドレス生成演算器によりアドレス生成が行われたタイミングに合わせて、ロード命令もしくはストア命令をロードストアユニットに出力する。
【０００７】
ロードストアユニットのデータ管理部は、アクセス対象となるメモリのアドレスの入力をアドレス生成演算器から取得する。また、データ管理部は、ロード命令もしくはストア命令の入力をＲＳＡから受ける。そして、データ管理部は、ロード命令及びストア命令をＬＤＳＴＱ（Load  &  Store  Queue）に格納しつつ、ロード又はストアを実行する。
【０００８】
ロードストアユニットにロード命令もしくはストア命令を出力したタイミングで、ＲＳＡは、出力した命令が格納されていた領域を解放し、その通知をデコーダ部に送信する。データ管理部は、実行するロード命令が完了した場合は、ＧＰＲにメモリからの読み出し結果を格納する。そして、データ管理部は、ＬＤＳＴＱを解放してその通知をデコーダ部へ送る。ここで、キャッシュミスなどでロード命令が完了されなかった場合、その命令はアボートされ、ＬＤＳＴＱからデータ管理部へ再発行される。
【０００９】
命令バッファに格納された命令が処理されるまでのＲＳＡへの格納及びアドレスの生成といった各処理段階を並べた一連の処理経路は、パイプラインステージと呼ばれる場合がある。
【００１０】
なお、命令と先行命令とでリソースが競合した場合に競合関係をフラグ化し、フラグを基に先行命令を追い越して命令を発行するか否かを判定する従来技術がある。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００９−１９３３７８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
しかしながら、ＬＤＳＴＱに対する処理は、パイプラインステージの後段に位置している。そのため、処理を開始してからＬＤＳＴＱが解放されるまでに多くのサイクル数がかかる。演算命令及びロードストア命令に対するＲＳＥやＲＳＡにおけるリソースの割り当てはどちらもデコード部により行われるが、デコード部は、ＬＤＳＴＱ及びＲＳＡの両方に空きが無いとロード命令を発行しない。例えば、ＲＳＡに十分な空きが有る場合でも、ＬＤＳＴＱに空きが無ければ、デコード部はロード命令を発行しない。
【００１３】
これに対して、ＬＤＳＴＱを使用しない演算命令などはＲＳＡやＲＳＥに空きさえあれば、デコード部は、それらの命令を発行する。しかし、デコード部による命令発行はアウトオブオーダで行うことが困難であるため、先行のロードストア命令がデコーダ部でＬＤＳＴＱの解放待ちの場合は、デコード部は、ＬＤＳＴＱを使用しない演算命令なども待ち状態とする。そのため、デコード部はＲＳＡ及びＲＳＥに命令を詰められず、これがリザベーションステーションによるアウトオブオーダでの命令投入によるアドレス生成演算器や固定小数点演算器の使用効率の向上の妨げになる。
【００１４】
また、ＬＤＳＴＱに対するロードストア命令の割り当てはデコード部で行われるが、命令がＬＤＳＴＱに入るのはＲＳＡから命令が発行され、アドレス生成の完了後にロードストアユニットに命令が出力されるタイミングである。すなわち、ＬＤＳＴＱが解放されてから実際にその空きに命令が投入されるまでには、ある程度の期間が存在する。この期間が、ＬＤＳＴＱの命令充填率向上の妨げとなる。そして、ＬＤＳＴＱの命令充填率が低い場合、リザベーションステーションによるアウトオブオーダでの命令投入によるアドレス生成演算器や固定小数点演算器の使用効率の向上の妨げになる。また、性能低下を防ぐための単純な方法として、ＬＤＳＴＱに格納可能な命令数を多くすることが考えられるが、回路規模の増大のおそれがあり実現が困難である。
【００１５】
また、競合関係をフラグ化する従来技術を用いても、ＬＤＳＴＱの状態により命令発行を行う場合には、ロードストア命令の待機が発生による演算器の使用効率の低下を軽減することは困難である。さらに、競合関係をフラグ化する従来技術を用いても、ＬＤＳＴＱの解放から充填までの期間は変化しないため、その点でもアドレス生成演算器や固定小数点演算器の使用効率の低下を軽減することは困難である。
【００１６】
開示の技術は、上記に鑑みてなされたものであって、演算器の使用効率を向上させる演算処理装置及び演算処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１７】
本願の開示する演算処理装置及び演算処理装置の制御方法の一つの態様において、格納部は、第１個数を上限としてロードストア命令を格納する。そして、前記格納部は、格納した前記ロードストア命令を順次出力して、出力したロードストア命令に応じたデータの処理をキャッシュ又はメモリに実行させる。命令管理部は、前記ロードストア命令を取得し、自己が出力したロードストア命令のうち前記格納部から出力されていないロードストア命令の滞留数を求め、前記滞留数が前記第１個数より大きい第２個数未満の場合、取得したロードストア命令を出力する。格納管理部は、前記命令管理部から出力されたロードストア命令を取得し、前記格納部が格納するロードストア命令の格納数が前記第１個数未満の場合、取得したロードストア命令を前記格納部へ格納する。
【発明の効果】
【００１８】
１つの側面では、本発明は、演算器の使用効率を向上させることができる。
【図面の簡単な説明】
【００１９】
【図１】図１は、情報処理装置の構成の一例を表す図である。
【図２】図２は、コアのブロック図である。
【図３】図３は、実施例１に係るコアにおける命令パイプラインの詳細を表す図である。
【図４】図４は、デコード部の回路構成の一例を表すブロック図である。
【図５】図５は、ＬＤＳＴＱ管理部の回路構成の一例を表すブロック図である。
【図６】図６は、ＬＤＳＴＱに格納されたデータを表すイメージ図である。
【図７】図７は、デコード部における命令発行処理のフローチャートである。
【図８】図８は、実施例１に係るＬＤＳＴＱ管理部におけるリクエスト発行処理のフローチャートである。
【図９】図９は、実施例２に係るコアにおける命令パイプラインの詳細を表す図である。
【図１０】図１０は、実施例２に係るＬＤＳＴＱ管理部におけるリクエスト発行処理のフローチャートである。
【発明を実施するための形態】
【００２０】
以下に、本願の開示する演算処理装置及び演算処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する演算処理装置及び演算処理装置の制御方法が限定されるものではない。
【実施例１】
【００２１】
図１は、情報処理装置の構成の一例を表す図である。情報処理装置１００は、例えば、ＣＰＵ（Central  Processing  Unit）１、メインメモリ２及びハードディスク３を有する。ＣＰＵ１、メインメモリ２及びハードディスク３は、バスで接続され、互いに通信を行う。ＣＰＵ１は、１つ又は複数のコア１０を有する。このコア１０が、「演算処理装置」の一例にあたる。
【００２２】
メインメモリ２には、プログラムが展開されることで生成されたプロセスに含まれる命令列が格納される。命令列には、加算や減算などを実行させる演算命令及びデータの読み出し又は書き込みを行わせるロードストア命令が含まれる。
【００２３】
図２は、コアのブロック図である。コア１０は、命令キャッシュ１１、  命令バッファ１２、デコード部１３、リザベーションステーション１４、演算実行部１５及びロードストアユニット１６を有する。
【００２４】
図２に示す命令キャッシュ１１は、メインメモリ２上に展開されたプロセスが動作することで、メインメモリ２に格納された命令列に含まれる命令が格納される。命令キャッシュ１１に格納された命令はデコード部１３に読み出され、命令バッファ１２に格納される。命令バッファ１２に格納された命令は、デコード部１３に順次出力される。
【００２５】
デコード部１３は、命令キャッシュ１１に格納された命令を読み出し、命令バッファ１２に格納する。そして、デコード部１３は、命令バッファ１２に格納された命令の入力を受ける。そして、デコード部１３は、取得した命令を解釈し、その命令が演算命令かロードストア命令かを判定する。
【００２６】
デコード部１３は、仮ＬＤＳＴＱ管理部１３１を有する。そして、デコード部１３は、後述する仮ＬＤＳＴＱ管理部１３１によりロードストア命令が出力可能と判定された場合、ロードストア命令に仮ＬＤＳＴＱ番号を割り当て、ＬＤＳＴＱ１６１のエントリの仮割り当てを行う。ここで、仮ＬＤＳＴＱ番号は、ロードストア命令に対してＬＤＳＴＱ１６１のエントリに仮割り当てを行うための番号である。本実施例では、仮ＬＤＳＴＱ番号は、グループ番号と実際のＬＤＳＴＱ１６１のエントリを表すＬＤＳＴＱ番号との組み合わせで表される。このように仮ＬＤＳＴＱ番号を設定することで、仮ＬＤＳＴＱ番号から容易にＬＤＳＴＱ番号を生成でき、ロードストア命令に対するＬＤＳＴＱ１６１のエントリの仮割り当てを実際の割り当てに変更することが容易となる。ただし、仮ＬＤＳＴＱ番号は、ロードストア命令の処理順が判定できる番号であり、且つ、ＬＤＳＴＱ番号に変換する機構があれば他の番号を割り当ててもよい。
【００２７】
その後、デコード部１３は、仮ＬＤＳＴＱ番号を割り当てたロードストア命令をリザベーションステーション１４のＲＳＡ１４２へ出力する。また、演算命令の場合、デコード部１３は、取得した演算命令をリザベーションステーション１４のＲＳＥ１４１へ順次出力する。
【００２８】
ここで、デコード部１３は、命令発行を命令が発行された順序通り（インオーダ）で出力する。そのため、例えば、ある命令の出力が待機状態の場合、デコード部１３は、その出力を待機させている命令以降の命令の出力も待機することになる。このデコード部１３が、「命令管理部」及び「命令管理回路」の一例にあたる。
【００２９】
仮ＬＤＳＴＱ管理部１３１は、デコード部１３から出力されたロードストア命令の数をカウントする。さらに、仮ＬＤＳＴＱ管理部１３１は、後述するＬＤＳＴＱ１６１からＬＤＳＴＱ解放信号を取得する。ＬＤＳＴＱ解放信号は、ＬＤＳＴＱ１６１におけるロードストア命令が格納された領域であるエントリからロードストア命令がデータキャッシュ１６２へ出力されそのエントリが解放された場合にＬＤＳＴＱ１６１から出力される信号である。ここで、ＬＤＳＴＱ１６１は、ロードストア命令を格納可能な上限数を有する。以下では、ＬＤＳＴＱ１６１におけるロードストア命令を格納可能な上限数をＬＤＳＴＱ１６１の「エントリ数」という。すなわち、ＬＤＳＴＱ解放信号は、ＬＤＳＴＱ１６１のエントリが解放されたことを表す信号である。ＬＤＳＴＱ１６１のエントリ数が、「第１個数」の一例にあたる。
【００３０】
ここで、仮ＬＤＳＴＱ管理部１３１は、ＬＤＳＴＱ１６１のエントリ数より大きい命令発行上限数を予め有する。例えば、仮ＬＤＳＴＱ管理部１３１は、ＬＤＳＴＱ１６１のエントリ数の４倍の数を命令発行上限数として記憶する。ここで、命令発行上限数は、ＬＤＳＴＱ１６１のエントリ数より大きければどのような値を用いてもよい。命令発行上限数が大きいほど、ＲＳＥ１４１及びＲＳＡ１４２のアウトオブオーダ性能を向上させることができる。上述したデコード部１３が発行可能な仮ＬＤＳＴＱ番号の数は、この命令発行上限数が上限となる。この命令発行上限数が、「第２個数」の一例にあたる。
【００３１】
仮ＬＤＳＴＱ管理部１３１は、デコード部１３が出力したロードストア命令のうち未だＬＤＳＴＱ１６１から出力されていないロードストア命令の数であるロードストア命令の滞留数を求める。そして、仮ＬＤＳＴＱ管理部１３１は、ロードストア命令の滞留数が命令発行上限未満か否かを判定する。
【００３２】
ロードストア命令の滞留数が命令発行上限以上の場合、仮ＬＤＳＴＱ管理部１３１は、デコード部１３からのロードストア命令の出力を待機させる。これに対して、ロードストア命令の滞留数が命令発行上限未満の場合、仮ＬＤＳＴＱ管理部１３１は、ロードストア命令を出力したことを表すＲＳＡ１４２の解放信号をＲＳＡ１４２から取得したか否かを判定する。
【００３３】
ＲＳＡ１４２の解放信号を受信した場合、仮ＬＤＳＴＱ管理部１３１は、ロードストア命令を格納するための空きがＲＳＡ１４２に存在すると判定する。そして、ロードストア命令を格納するための空きがＲＳＡ１４２に存在する場合、仮ＬＤＳＴＱ管理部１３１は、ロードストア命令が出力可能であることをデコード部１３へ通知し、デコード部１３からロードストア命令をリザベーションステーション１４のＲＳＡ１４２へ出力させる。
【００３４】
リザベーションステーション１４は、演算命令を蓄積するＲＳＥ１４１及びロードストア命令を蓄積するＲＳＡ１４２を有する。
【００３５】
ＲＳＥ１４１は、演算命令の入力をデコード部１３から受ける。ＲＳＥ１４１は、取得した演算命令を蓄積する。そして、ＲＳＥ１４１は、蓄積した演算命令の中から出力する演算命令を選択する。その後、ＲＳＥ１４１は、選択した演算命令で指定された加算や減算を表す命令コードを固定小数点演算器１５１へ出力する。さらに、ＲＳＥ１４１は、選択した演算命令で指定される固定小数点レジスタ（ＧＰＲ：General  Purpose  Register）番号をＧＰＲ１５２へ出力する。
【００３６】
ＲＳＡ１４２は、仮ＬＤＳＴＱ番号とともにロードストア命令の入力をデコード部１３から受ける。ＲＳＡ１４２は、取得したロードストア命令を仮ＬＤＳＴＱ番号とともに蓄積する。そして、ＲＳＡ１４２は、蓄積したロードストア命令の中から出力するロードストア命令を選択する。その後、ＲＳＡ１４２は、選択したロードストア命令においてデータの読み出し又は書き込みなどを表す命令コードを仮ＬＤＳＴＱ番号とともにＬＤＳＴＱ管理部１５０へ出力する。また、ＲＳＡ１４２は、選択したロードストア命令で指定される固定小数点レジスタ番号をＧＰＲ１５２へ出力する。さらに、ＲＳＡ１４２は、ロードストア命令を出力したことを表すＲＳＡ１４２の解放信号をデコード部１３へ出力する。
【００３７】
ＲＳＡ１４２は、ＬＤＳＴＱ１６１へ出力されなかったロードストア命令の入力をＬＤＳＴＱ管理部１５０から受ける。さらに、ＲＳＡ１４２は、戻されたロードストア命令とともに、インターロック信号の入力をＬＤＳＴＱ管理部１５０から受ける。そして、ＲＳＡ１４２は、戻されたロードストア命令にインターロックを掛けてそのロードストア命令の出力を待機する。
【００３８】
この時、ＲＳＡ１４２は、インターロックを掛けていないロードストア命令についてはＬＤＳＴＱ管理部１５０への出力を継続する。そのため、ＲＳＡ１４２は、複数のロードストア命令がインターロック信号とともにＬＤＳＴＱ管理部１５０から戻される場合がある。その場合、ＲＳＡ１４２は、戻されたロードストア命令の全てにインターロックを掛け出力を待機する。これにより、ＬＤＳＴＱ１６１が長時間解放されない場合に、ＲＳＡ１４２が繰り返し同じロードストア命令を発行してしまい、他の命令の発行を妨げてコア１０の処理性能が低下してしまうことを防ぐことができる。
【００３９】
その後、ＲＳＡ１４２は、ＬＤＳＴＱ解放信号の入力をＬＤＳＴＱ１６１から受ける。そして、ＬＤＳＴＱ解放信号の入力をトリガとして、ＲＳＡ１４２は、インターロックを掛けた全てのロードストア命令のインターロックを解除する。そして、ＲＳＡ１４２は、インターロックを解除したロードストア命令の再発行を含む保持する全てのロードストア命令の出力を順次行う。このＲＳＡ１４２が、「蓄積部」の一例にあたる。
【００４０】
ここで、ＬＤＳＴＱ１６１の開放は本来の命令順にしたがって行われる。そこで、前のロードストア命令が出力されない場合、その後のロードストア命令を格納するエントリも解放されない。そのため、ひとたびＬＤＳＴＱ１６１からＬＤＳＴＱ解放信号が出力された場合、ＲＳＡ１４２は、連続でＬＤＳＴＱ１６１からＬＤＳＴＱ解放信号の入力を受ける可能性が高い。そこで、ＲＳＡ１４２は、１つのＬＤＳＴＱ解放信号を受けた際に、全てのインターロックを解除することで、その後に解放信号を受ける可能性の高いロードストア命令を前もって出力することができる。これにより、ＬＤＳＴＱ解放信号が出力されるタイミングでの新しいロードストア命令のＬＤＳＴＱ１６１への格納が可能となり、ロードストア命令のＬＤＳＴＱ１６１への格納の効率が向上する。さらに、このインターロックの解除には、ＬＤＳＴＱ１６１のエントリ番号の把握や空き数の勘定を用いないので、コア１０における回路増加が抑えられる。
【００４１】
固定小数点演算器１５１は、命令コードの入力をＲＳＥ１４１から受ける。また、固定小数点演算器１５１は、演算結果の書き込み先の固定小数点レジスタ番号の入力をＲＳＥ１４１から受ける  。また、固定小数点演算器１５１は、ＧＰＲ１５２から出力されたデータの入力を受ける。そして、固定小数点演算器１５１は、ＧＰＲ１５２から取得したデータを用いて命令コードにしたがって演算を行う。その後、固定小数点演算器１５１は、書き込み先の固定小数点レジスタ番号で指定されたＧＰＲ１５２における位置に演算結果を書き込む。
【００４２】
ＧＰＲ１５２は、固定小数点レジスタ番号の入力をＲＳＥ１４１から受ける。そして、ＧＰＲ１５２は、入力された固定小数点レジスタ番号が示す位置に格納されたデータを固定小数点演算器１５１へ出力する。その後、ＧＰＲ１５２は、固定小数点演算器１５１により指定された格納先の固定小数点レジスタ番号が示す位置に、固定小数点演算器１５１による演算結果を格納する。
【００４３】
また、ＧＰＲ１５２は、固定小数点レジスタ番号の入力をＲＳＡ１４２から受ける。そして、ＧＰＲ１５２は、入力された固定小数点レジスタ番号が示す位置に格納されたデータをアドレス生成演算部１５３へ出力する。
【００４４】
ＬＤＳＴＱ管理部１５０は、ＬＤＳＴＱ１６１のエントリ数の情報を予め有する。ＬＤＳＴＱ管理部１５０は、ロードストア命令の命令コードの入力をＲＳＡ１４２から受ける。また、ＬＤＳＴＱ管理部１５０は、ＬＤＳＴＱ解放信号の入力をＬＤＳＴＱ１６１から受ける。
【００４５】
ＬＤＳＴＱ管理部１５０は、自己がＬＤＳＴＱ１６１へ出力したロードストア命令の数とＬＤＳＴＱ１６１から入力されたＬＤＳＴＱ解放信号から、ＬＤＳＴＱ１６１が保持するロードストア命令の数を求める。そして、ＬＤＳＴＱ管理部１５０は、ＬＤＳＴＱ１６１が保持するロードストア命令の数がＬＤＳＴＱ１６１のエントリ数未満か否かを判定する。
【００４６】
ＬＤＳＴＱ１６１が保持するロードストア命令の数がＬＤＳＴＱ１６１のエントリ数未満であれば、ＬＤＳＴＱ管理部１５０は、ＲＳＡ１４２から入力されたロードストア命令の命令コードをアドレス生成演算部１５３へ出力する。一方、ＬＤＳＴＱ１６１が保持するロードストア命令の数がＬＤＳＴＱ１６１のエントリ数以上の場合、ＬＤＳＴＱ管理部１５０は、ＬＤＳＴＱ１６１がフル、すなわちＲＳＡ１４２から入力されたロードストア命令の格納場所がＬＤＳＴＱ１６１に無いと判定する。ＬＤＳＴＱ１６１がフルの場合、ＬＤＳＴＱ管理部１５０は、ＲＳＡ１４２から入力されたロードストア命令をＲＳＡ１４２へ戻すとともにインターロック信号をＲＳＡ１４２へ送信する。ＲＳＡ１４２から入力されたロードストア命令をＲＳＡ１４２へ戻すことは、ＬＤＳＴＱ管理部１５０がそのロードストア命令を破棄し、ＲＳＡ１４２にそのロードストア命令の再送信を要求することにあたる。このＬＤＳＴＱ管理部１５０が、「格納管理部」及び「格納管理回路」の一例にあたる。
【００４７】
アドレス生成演算部１５３は、ロードストア命令の命令コードの入力をＬＤＳＴＱ管理部１５０から受ける。さらに、アドレス生成演算部１５３は、計算に使用する値の入力をＧＰＲ１５２から受ける。そして、アドレス生成演算部１５３は、ＧＰＲ１５２から入力された値を用いてアドレスを生成する。例えば、アドレス生成演算部１５３は、ＧＰＲ１５２から入力された値を所定倍するなどしてアドレスを生成する。てそして、アドレス生成演算部１５３は、生成したアドレスと命令コードをＬＤＳＴＱ１６１へ出力し、生成したアドレス及び命令コードをＬＤＳＴＱ１６１に格納する。
【００４８】
ＬＤＳＴＱ１６１は、ロードストア命令の命令コード及び処理対象のアドレスの入力をアドレス生成演算部１５３から受ける。そして、ＬＤＳＴＱ１６１は、アドレス生成演算部１５３からエントリ数を上限としてロードストア命令の命令コード及び処理対象のアドレスを格納する。ここでは、ＬＤＳＴＱ１６１におけるロードストア命令の命令コード及び処理対象のアドレスの格納を、単にＬＤＳＴＱ１６１におけるロードストア命令の格納という。ＬＤＳＴＱ１６１は、処理順にロードストア命令を格納する。
【００４９】
そして、ＬＤＳＴＱ１６１は、処理の順番が早い順にロードストア命令を処理する。具体的には、ＬＤＳＴＱ１６１は、１つ前のロードストア命令の処理が完了すると、次のロードストア命令で指定されたアドレスをデータキャッシュ１６２に送信し、命令コードで指定された処理を実行させる。そして、ＬＤＳＴＱ１６１は、格納したロードストア命令の処理が完了すると、ＬＤＳＴＱ解放信号をデコード部１３、ＲＳＡ１４２及びＬＤＳＴＱ管理部１５０へ出力する。ここで、データキャッシュ１６２によるキャッシュミスなどでロードストア命令が完了しなかった場合、既に出力されたロードストア命令は中断され、ＬＤＳＴＱ１６１は、同じロードストア命令を再発行する。このＬＤＳＴＱ１６１が、「格納部」の一例にあたる。
【００５０】
データキャッシュ１６２は、命令コード及びアドレスの入力をＬＤＳＴＱ１６１から受ける。そして、データキャッシュ１６２は、指定されたアドレスに対応するデータが有る場合、そのデータを用いて処理を行う。
【００５１】
ロード命令の場合、指定されたアドレスにデータが無ければ、データキャッシュ１６２は、メインメモリ２からデータを取得する。そして、データキャッシュ１６２は、取得したデータを自己に格納するとともに取得したデータをＧＰＲ１５２に格納する。また、ストア命令の場合、データキャッシュ１６２は、取得したデータを自己に格納するとともに取得したデータをメインメモリ２の指定されたアドレスに格納する。
【００５２】
次に、図３を参照して、命令パイプラインにおける処理段階に沿って命令処理の流れについて説明する。図３は、実施例１に係るコアにおける命令パイプラインの詳細を表す図である。すなわち、図３は、実施例１に係るコア１０による各種命令の処理の流れを表す。図３におけるロードストアパイプライン２００は、ロードストア命令を処理する経路を表す。また、演算パイプライン３００は、演算命令を処理する経路である。
【００５３】
命令パイプラインは、複数の処理段階（パイプラインステージ）を有する。処理段階には、例えば、Ｄ（Decode）サイクル及びＤＴ（Decode  Transfer）サイクルと呼ばれる処理段階が存在する。Ｄサイクル及びＤＴサイクルは、ロードストア命令及び演算命令の双方に共通の処理段階である。
【００５４】
さらに、処理段階には、Ｐ（Priority）サイクル、ＰＴ（Priority  Transfer）サイクル、Ｂ（Buffer）１サイクル、Ｂ（Buffer）２サイクル、Ａ（Address  Generate）サイクル及びＸ（eXecution）サイクルと呼ばれる処理段階が存在する。
【００５５】
ロードストア命令は、Ｐサイクル、ＰＴサイクル、Ｂ１サイクル、Ｂ２サイクル及びＡサイクルの５つの処理段階を有するロードストアパイプライン２００で実行される。ロードストアパイプライン２００は、ＲＳＡ１４２からＬＤＳＴＱ１６１までの経路に対応する。
【００５６】
演算命令は、Ｐサイクル、ＰＴサイクル、Ｂ１サイクル、Ｂ２サイクル及びＸサイクルの５つの処理段階を有する演算パイプライン３００で実行される。演算パイプライン３００は、ＲＳＥ１４１から固定小数点演算器１５１までの経路に対応する。
【００５７】
Ｄサイクルでは、デコード部１３が命令バッファ１２から命令を取得する。そして、デコード部１３は、取得した命令をデコードし、デコードした命令をリザベーションステーション１４のＲＳＥ１４１又はＲＳＡ１４２へ送るためにフリップフロップ１７へ出力する。Ｄサイクルでは、デコード部１３により、ＬＤＳＴＱ１６１へ向けて出力されるロードストア命令の数の管理や、ロードストア命令に対するＬＤＳＴＱ１６１のエントリの仮の割り当てが行われる。ここで、仮の割当とは、ＬＤＳＴＱ１６１のエントリ数を仮想的に増やした識別情報を仮想のエントリとしてロードストア命令に割り当てることを指す。
【００５８】
ＤＴサイクルでは、Ｄサイクルでデコードされた命令がフリップフロップ１７を経由して転送され、リザベーションステーション１４のＲＳＥ１４１又はＲＳＡ１４２に格納される。
【００５９】
次に、ロードストアパイプライン２００の各処理段階について説明する。Ｐサイクルでは、リザベーションステーション１４のＲＳＡ１４２が有する命令の中から、エントリ選択部２０１が、アドレス生成演算部１５３へ投入する命令を決定する。そして、エントリ選択部２０１は、決定した命令のデータをフリップフロップ２０２へ出力する。
【００６０】
ＰＴサイクルでは、Ｐサイクルで決定された命令の命令コードが、フリップフロップ２０２からフリップフロップ２０３へ転送される。また、Ｐサイクルで決定された命令固定小数点レジスタ番号がレジスタ番号転送部５２１に送られる。
【００６１】
Ｂ１サイクル及びＢ２サイクルでは、固定小数点レジスタ番号がレジスタ番号転送部５２１からレジスタ番号転送部５２２を経由してリードポート５２３へ入力される。そして、リードポート５２３は、取得した固定小数点レジスタ番号に応じた位置にあるデータをアドレス生成演算に用いられるデータと決定し、アドレス生成演算に用いられるデータをＧＰＲ１５２から読み出す。そして、リードポート５２３は、アドレス生成演算に用いられるデータをデータ転送部５２４へ出力する。また、Ｂ１サイクル及びＢ２サイクルでは、ＧＰＲ１５２からデータが読み出されるタイミングに合わせてフリップフロップ２０３〜２０５によりデータに遅延が与えられる。それととともに、ＬＤＳＴＱ管理部１５０は、ＬＤＳＴＱ１６１から出力されたＬＤＳＴＱ解放信号を用いて、Ｄサイクルで仮に割り当てたエントリに対応する実際にＬＤＳＴＱ１６１のエントリが空いているか否かのチェックを行う。ＬＤＳＴＱ１６１のエントリが空いている場合、ＬＤＳＴＱ管理部１５０は、アドレス生成演算部１５３へ入力する命令コードをフリップフロップ２０５へ出力する。一方、ＬＤＳＴＱ１６１のエントリが空いていない場合、ＬＤＳＴＱ管理部１５０は、ＲＳＡ１４２へ戻す命令コードをフリップフロップ２０５へ出力するとともに、インターロック信号をフリップフロップ２０５へ出力する。
【００６２】
Ａサイクルでは、ＬＤＳＴＱ１６１のエントリが空いていない場合、フリップフロップ２０５を経由した命令コードは、ＲＳＡ１４２へ戻される。さらに、フリップフロップ２０５を経由したインターロック信号がＲＳＡ１４２へ送信される。これに対して、ＬＤＳＴＱ１６１のエントリが空いている場合、フリップフロップ２０５を経由した命令コードは、アドレス生成演算部１５３へ入力される。さらに、データ転送部５２４から出力されたアドレス生成演算に用いられるデータがアドレス生成演算部１５３に入力される。そして、アドレス生成演算部１５３は、アドレス生成演算を行い、生成したアドレス及びロードストア要求をＬＤＳＴＱ１６１へ送る。ＬＤＳＴＱ１６１は、アドレスをデータキャッシュ１６２に対して出力しロードストアの処理を実行させると、ＬＤＳＴＱ解放信号をＲＳＡ１４２及びＬＤＳＴＱ管理部１５０へ出力する。
【００６３】
ＬＤＳＴＱ管理部１５０は、実際のＬＤＳＴＱ１６１のエントリ数を用いてロードストア命令がエントリに割り当て可能か否か、すなわち、ロードストア命令をＬＤＳＴＱ１６１に格納可能か否かを判定する。ロードストア命令がエントリに割り当て可能な場合、デコード部１３によりに与えられた仮のエントリがＬＤＳＴＱ管理部１５０においてＬＤＳＴＱ１６１の実際のエントリに変更される。このように、デコード部１３においてＬＤＳＴＱ１６１のエントリ数よりも大きい命令発行上限数を上限としてロードストア命令に仮のエントリ番号が割り当てられる。そして、後ろの処理段階であるＢ２サイクルに配置されたＬＤＳＴＱ管理部１５０において、ＬＤＳＴＱ１６１の実際の空きがチェックされる。これにより、ＬＤＳＴＱ解放信号がＬＤＳＴＱ１６１から出力されてからＬＤＳＴＱ１６１のエントリに新たにロードストア命令が割り当てられるまでのサイクル数を短縮することができる。すなわち、ＬＤＳＴＱ１６１のエントリが解放されてから、その空いたエントリが埋まるまでのサイクル数を短縮することができる。
【００６４】
例えば、デコード部１３で実際のＬＤＳＴＱ１６１のエントリをロードストア命令に割り当てる場合、空いたエントリが埋まるまでのサイクルは、最大でＤサイクルからＡサイクルまでの７サイクルかかる。これに対して、ＬＤＳＴＱ管理部１５０で実際のＬＤＳＴＱ１６１のエントリをロードストア命令に割り当てる場合、空いたエントリが埋まるまでのサイクルは、最大でＢ２サイクル及びＡサイクルの２サイクルに短縮することができる。また、インターロックがＲＳＡ１４２でかかっている場合であっても、ＬＤＳＴＱ解放信号が出力されてから空いたエントリが埋まるまでのサイクルは、最大でＰサイクルからＡサイクルまでの５サイクルに短縮することができる。
【００６５】
ここで、ＬＤＳＴＱ管理部１５０は、ＬＤＳＴＱ１６１に格納するロードストア命令が選択されてからロードストア命令に対して実際のＬＤＳＴＱ１６１のエントリの割り当てを行うことで処理を減らしている。例えば、ＲＳＡ１４２において仮の割り当てを実際のＬＤＳＴＱ１６１のエントリへの割り当てに変換できるかを判定する場合、ＲＳＡ１４２が保持するロードストア命令全てに対して判定を行う機構が配置される。ＲＳＡ１４２は、最大で命令発行上限数のロードストア命令を保持するため、実際のＬＤＳＴＱ１６１のエントリへの割り当て判定用の機構が配置される。このようにＬＤＳＴＱ１６１に格納するロードストア命令の選択前の段階で判定を行う場合、回路規模が大きくなってしまう。そこで、ＬＤＳＴＱ管理部１５０は、エントリ選択部２０１の後に配置されることが好ましい。そして、ＬＤＳＴＱ管理部１５０は、エントリ選択部２０１とアドレス生成演算部１５３の間であればどの場所に配置することも可能であるが、なるべくアドレス生成演算部１５３に近い場所に配置することが好ましい。アドレス生成演算部１５３に近いほど、ＬＤＳＴＱ解放信号が出力されてから空いたエントリが埋まるまでのサイクルを短縮することができるからである。
【００６６】
次に、演算パイプライン３００の各処理段階について説明する。Ｐサイクルでは、リザベーションステーション１４のＲＳＥ１４１が有する命令の中から、エントリ選択部３０１が、演算実行部１５の固定小数点演算器１５１へ投入する命令を決定する。そして、エントリ選択部３０１は、決定した処理をフリップフロップ３０２へ出力する。
【００６７】
ＰＴサイクルでは、Ｐサイクルで決定された命令の命令コードが、フリップフロップ３０２からフリップフロップ３０３へ転送される。また、Ｐサイクルで決定された命令固定小数点レジスタ番号がレジスタ番号転送部５２５へ送られる。
【００６８】
Ｂ１サイクル及びＢ２サイクルでは、固定小数点レジスタ番号がレジスタ番号転送部５２５からレジスタ番号転送部５２６を経由してリードポート５２７へ入力される。そして、リードポート５２７は、取得した固定小数点レジスタ番号に応じた位置にあるデータをアドレス生成演算に用いられるデータと決定し、固定小数点演算に用いられるデータをＧＰＲ１５２から読み出す。そして、リードポート５２７は、固定小数点演算に用いられるデータをデータ転送部５２８へ出力する。また、Ｂ１サイクル及びＢ２サイクルでは、ＧＰＲ１５２からデータが読み出されるタイミングに合わせてフリップフロップ３０３〜３０５により固定小数点演算器１５１に送られる命令コードに遅延が与えられる。
【００６９】
Ｘサイクルでは、フリップフロップ３０５から、固定小数点演算の命令コードが固定小数点演算器１５１へ入力される。さらに、データ転送部５２８から出力された固定小数点演算に用いられるデータが固定小数点演算器１５１に入力される。そして、固定小数点演算器１５１は、固定小数点演算を行い、格納先の固定小数点レジスタ番号で表されるＧＰＲ１５２における位置に演算結果を格納する。
【００７０】
次に、図４を参照して、デコード部１３のロードストア命令に対するＬＤＳＴＱ１６１のエントリの仮の割り当て及びロードストア命令のＲＳＡ１４２への発行の具体的な回路の一例について説明する。図４は、デコード部の回路構成の一例を表すブロック図である。
【００７１】
本実施例では、デコード部１３は、ロードストア命令に対するＬＤＳＴＱ１６１のエントリの仮の割り当てとして、ロードストア命令にＬＤＳＴＱ１６１のエントリ数を上限としたＬＤＳＴＱ番号とグループ番号とを組にして表す仮ＬＤＳＴＱ番号を割り当てる。ここでは、ＬＤＳＴＱ１６１のエントリ数を１０個とし、命令発行上限数をＬＤＳＴＱ１６１のエントリ数の４倍の４０個とした場合で説明する。すなわち、命令発行上限数は、４０となる。
【００７２】
命令解釈回路４０３は、命令バッファ１２から入力された命令が演算命令かロードストア命令かを判定する。命令解釈回路４０３は、命令が演算命令の場合は０をＮＡＮＤ（Not  AND）ゲート４０４及びＡＮＤゲート４０６へ出力し、命令がロードストア命令の場合は１をＮＡＮＤゲート４０４及びＡＮＤゲート４０６へ出力する。
【００７３】
仮ＬＤＳＴＱ番号発行数カウンタ４０１は、デコード部１３から発行され且つＬＤＳＴＱ１６１で処理が完了していないロードストア命令に発行した仮ＬＤＳＴＱ番号の数、すなわちロードストア命令の滞留数のカウンタである。仮ＬＤＳＴＱ番号発行数カウンタ４０１は、減算器４０８と加算器４０９とによる計算結果の入力を受ける。そして、仮ＬＤＳＴＱ番号発行数カウンタ４０１は、自己が有するカウンタに入力された値を加えたカウント値をロードストア命令の滞留数として求める。そして、仮ＬＤＳＴＱ番号発行数カウンタ４０１は、算出したロードストア命令の滞留数をＦｕｌｌ判定回路４０２へ出力し、さらに、カウント値を表す信号を減算器４０８へ出力する。
【００７４】
Ｆｕｌｌ判定回路４０２は、デコード部１３から発行され且つＬＤＳＴＱ１６１で処理が完了していないロードストア命令に発行した仮ＬＤＳＴＱ番号の数、すなわちロードストア命令の滞留数の入力を仮ＬＤＳＴＱ番号発行数カウンタ４０１から受ける。Ｆｕｌｌ判定回路４０２は、ロードストア命令の滞留数が命令発行上限数である４０であるか否かを判定する。ロードストア命令の滞留数が４０でなければ、Ｆｕｌｌ判定回路４０２は、０をＮＡＮＤゲート４０４へ出力する。これに対して、ロードストア命令の滞留数が４０の場合、Ｆｕｌｌ判定回路４０２は、１をＮＡＮＤゲート４０４へ出力する。
【００７５】
ＮＡＮＤゲート４０４は、命令がロードストア命令か否かを表す信号の入力を命令解釈回路４０３から受ける。また、ＮＡＮＤゲート４０４は、ロードストア命令の滞留数が命令発行上限数に達しているか否かを表す信号をＦｕｌｌ判定回路４０２から受ける。そして、ＮＡＮＤゲート４０４は、入力された２つの信号の否定論理積を出力する。すなわち、命令がロードストア命令であり且つロードストア命令の滞留数が命令発行上限数に達していない場合、ＮＡＮＤゲート４０４は、ロードストア命令の発行を表す信号として０をＡＮＤゲート４０５へ出力し、それ以外の場合、ロードストア命令の不発行を表す信号として１をＡＮＤゲート４０５へ出力する。
【００７６】
ＡＮＤゲート４０５は、命令バッファ１２から命令が入力されたか否かを表す信号、すなわち命令バッファ１２から有効な命令が入力されたか否かを表す有効信号の入力を受ける。ＡＮＤゲート４０５は、命令バッファ１２から命令が入力された場合には１の入力を受け、命令バッファ１２からの命令の入力が無い場合は０の入力を受ける。また、ＡＮＤゲート４０５は、ＮＡＮＤゲート４０４からロードストア命令が発行されたか否かを表す信号の入力を受ける。そして、ＡＮＤゲート４０５は、入力された２つの信号の論理積を出力する。すなわち、ＡＮＤゲート４０５は、命令バッファ１２から命令が入力され且つロードストア命令の発行の場合に１をＡＮＤゲート４０６及びＲＳＡ１４２へ出力し、それ以外の場合に０をＡＮＤゲート４０６、ＲＳＡ１４２及び命令バッファ１２へ出力する。命令バッファ１２は、ＡＮＤゲート４０５から１の信号の入力を受けると、次の命令を出力する。
【００７７】
ＡＮＤゲート４０６は、命令がロードストア命令か否かを表す信号の入力を命令解釈回路４０３から受ける。さらに、ＡＮＤゲート４０６は、命令バッファ１２から出力された命令がロードストア命令であるか否かを表す信号の入力をＡＮＤゲート４０５から受ける。そして、ＡＮＤゲート４０６は、入力された２つの信号の論理積を出力する。すなわち、命令バッファ１２から命令が入力され、命令がロードストア命令であり、且つ、そのロードストア命令を発行する場合、ＡＮＤゲート４０６は、１を加算器４０９及び４１３へ出力し、それ以外の場合０を加算器４０９及び４１３へ出力する。
【００７８】
減算器４０８は、仮ＬＤＳＴＱ番号発行数カウンタ４０１が出力したカウント値の出力を表す信号の入力を受ける。さらに、減算器４０８は、ＬＤＳＴＱ解放信号の入力をＬＤＳＴＱ１６１から受ける。ＬＤＳＴＱ解放信号の入力を受けていなければ、減算器４０８は、カウント値の出力を表す信号の入力を受けて、０を加算器４０９へ出力する。これに対して、ＬＤＳＴＱ解放信号の入力を受けている場合、減算器４０８は、カウント値の出力を表す信号の入力を受けて、−１を加算器４０９へ出力する。
【００７９】
加算器４０９は、減算器４０８の計算結果の入力を受ける。さらに、加算器４０９は、命令バッファ１２から命令が入力され、命令がロードストア命令であり、且つ、そのロードストア命令が発行されるか否かを表す信号の入力をＡＮＤゲート４０６から受ける。命令バッファ１２から入力されたロードストア命令が発行されることを表す信号の入力を受けた場合、加算器４０９は、減算器４０８から入力された値に１を加算した値を仮ＬＤＳＴＱ番号発行数カウンタ４０１へ出力する。これに対して、命令バッファ１２から入力されたロードストア命令が発行される場合でないことを表す信号の入力を受けた場合、加算器４０９は、減算器４０８から入力された値をそのまま仮ＬＤＳＴＱ番号発行数カウンタ４０１へ出力する。すなわち、仮ＬＤＳＴＱ番号発行数カウンタ４０１のカウンタは、ロードストア命令がデコード部１３から発行されると１つインクリメントされ、ＬＤＳＴＱ解放信号がＬＤＳＴＱ１６１から出力されると１つデクリメントされる。
【００８０】
ＬＤＳＴＱ番号発行回路４１１は、０から９までの連続したＬＤＳＴＱ番号を順番に発行する。ＬＤＳＴＱ番号発行回路４１１は、加算器４１３から加算結果の入力を受ける。そして、ＬＤＳＴＱ番号発行回路４１１は、入力された値をＬＤＳＴＱ番号に加算して次のＬＤＳＴＱ番号として発行する。そして、ＬＤＳＴＱ番号発行回路４１１は、ＬＤＳＴＱ番号として９を発行した場合、次にはＬＤＳＴＱ番号として０を発行する。ＬＤＳＴＱ番号発行回路４１１がＲＳＡ１４２にＬＤＳＴＱ番号を発行すると、インクリメント信号が加算器４１３に入力される。
【００８１】
加算器４１３は、ＬＤＳＴＱ番号発行回路４１１から出力されたインクリメント信号の入力を受ける。さらに、加算器４１３は、命令バッファ１２から命令が入力され、命令がロードストア命令であり、且つ、そのロードストア命令が発行されるか否かを表す信号の入力をＡＮＤゲート４０６から受ける。命令バッファ１２から入力されたロードストア命令が発行されることを表す信号の入力を受けた場合、インクリメント信号が入力されると、加算器４１３は、１を出力する。すなわち、命令バッファ１２から入力されたロードストア命令が発行されるとＬＤＳＴＱ番号発行回路４１１が発行するＬＤＳＴＱ番号が１つ増える。そして、加算器４１３は、１の値を有する信号の１０回目の出力の際に、すなわち、ＬＤＳＴＱ番号発行回路４１１が発行するＬＤＳＴＱ番号が９から０へ変わるタイミングでオーバーフロー信号を加算器４１４へ出力する。
【００８２】
グループ番号発行回路４１２は、０から３までの連続したグループ番号を順番に発行する。命令発行上限数がＬＤＳＴＱ１６１のエントリ数の４倍であることから、グループ番号の上限は３となる。グループ番号発行回路４１２は、加算器４１４から加算結果の入力を受ける。そして、グループ番号発行回路４１２は、入力された値をグループ番号に加算して次のグループ番号として発行する。そして、グループ番号発行回路４１２は、グループ番号として３を発行した場合、次にはグループ番号として０を発行する。グループ番号発行回路４１２がＲＳＡ１４２にグループ番号を発行すると、インクリメント信号が加算器４１４に入力される。
【００８３】
加算器４１４は、グループ番号発行回路４１２から出力されたインクリメント信号の入力を受ける。さらに、加算器４１４は、オーバーフロー信号の入力を加算器４１３から受ける。オーバーフロー信号の入力を受けた場合、インクリメント信号が入力されると、加算器４１３は、１を出力する。すなわち、ＬＤＳＴＱ番号が９に達すると次はＬＤＳＴＱ番号が０に戻りグループ番号が１つ増える。
【００８４】
ＲＳＡ１４２は、ＬＤＳＴＱ番号発行回路４１１から入力されたＬＤＳＴＱ番号の入力をＬＤＳＴＱ番号発行回路４１１から受ける。また、ＲＳＡ１４２は、グループ番号発行回路４１２から入力されたグループ番号の入力を受ける。さらに、ＲＳＡ１４２は、命令バッファ１２から命令が入力され且つロードストア命令が発行された信号の入力をＡＮＤゲート４０５から受ける。そして、ＲＳＡ１４２は、グループ番号発行回路４１２から入力されたグループ番号とＬＤＳＴＱ番号発行回路４１１から入力されたＬＤＳＴＱ番号とを並べた値を仮ＬＤＳＴＱ番号として取得する。すなわち、ここでは、仮ＬＤＳＴＱ番号は、００〜３９の番号となる。
【００８５】
次に、図５を参照して、ＬＤＳＴＱ管理部１５０による実際のＬＤＳＴＱ１６１のエントリの割り当ての具体的な回路の一例について説明する。図５は、ＬＤＳＴＱ管理部の回路構成の一例を表すブロック図である。
【００８６】
先頭ＬＤＳＴＱ番号保持回路５０３は、その時点でＬＤＳＴＱ１６１に格納されたロードストア命令に割り当てられた仮ＬＤＳＴＱ番号を構成するＬＤＳＴＱ番号の先頭の番号である先頭ＬＤＳＴＱ番号を保持する回路である。先頭ＬＤＳＴＱ番号は、初期値が０である。先頭ＬＤＳＴＱ番号保持回路５０３は、加算器５０１から加算結果の入力を受ける。そして、先頭ＬＤＳＴＱ番号保持回路５０３は、保持する先頭ＬＤＳＴＱ番号に加算器５０１から入力された値を加算して次の先頭ＬＤＳＴＱ番号を生成する。そして、先頭ＬＤＳＴＱ番号保持回路５０３は、生成した先頭ＬＤＳＴＱ番号を比較器５０６及び比較器５０８へ出力する。また、先頭ＬＤＳＴＱ番号保持回路５０３が先頭ＬＤＳＴＱ番号を出力すると、インクリメント信号が加算器５０１に入力される。
【００８７】
加算器５０１は、ＬＤＳＴＱ解放信号の入力をＬＤＳＴＱ１６１から受ける。また、加算器５０１は、先頭ＬＤＳＴＱ番号保持回路５０３が出力したインクリメント信号の入力を受ける。ＬＤＳＴＱ解放信号の入力を受けた状態でインクリメント信号の入力を受けた場合、加算器５０１は、１を出力する。すなわち、ＬＤＳＴＱ１６１から解放信号が出力されると、先頭ＬＤＳＴＱ番号は１つ増える。さらに、加算器５０１は、１の値を有する信号の１０回目の出力の際に、すなわち、先頭ＬＤＳＴＱ番号が９から０へ変わるタイミングでオーバーフロー信号を加算器５０２へ出力する。
【００８８】
先頭グループ番号保持回路５０４は、その時点でＬＤＳＴＱ１６１に格納されたロードストア命令に割り当てられた仮ＬＤＳＴＱ番号を構成するグループ番号の先頭の番号である先頭グループ番号を保持する回路である。先頭グループ番号は、初期値が０である。先頭グループ番号保持回路５０４は、０から３までの連続したグループ番号を順番に発行する。先頭グループ番号保持回路５０４は、加算器５０２から加算結果の入力を受ける。そして、先頭グループ番号保持回路５０４は、入力された値を先頭グループ番号に加算して次の先頭グループ番号として加算器５０５及び比較器５０９へ発行する。そして、先頭グループ番号保持回路５０４は、先頭グループ番号として３を発行した場合、次には先頭グループ番号として０を発行する。先頭グループ番号保持回路５０４が先頭グループ番号を発行すると、インクリメント信号が加算器５０２に入力される。
【００８９】
加算器５０２は、先頭グループ番号保持回路５０４から出力されたインクリメント信号の入力を受ける。さらに、加算器５０２は、オーバーフロー信号の入力を加算器５０１から受ける。オーバーフロー信号の入力を受けた場合、インクリメント信号が入力されると、加算器５０２は、１を出力する。すなわち、先頭ＬＤＳＴＱ番号が９に達すると次は先頭ＬＤＳＴＱ番号が０に戻り先頭グループ番号が１つ増える。
【００９０】
加算器５０５は、先頭グループ番号保持回路５０４から入力された先頭グループ番号に１を加算し、比較器５０７へ出力する。
【００９１】
ここで、フリップフロップ２０４は、ＲＳＡ１４２から出力されたロードストア命令に割り当てられた仮ＬＤＳＴＱ番号を保持する。仮ＬＤＳＴＱ番号は、図５に示すように、ＬＤＳＴＱ番号及びグループ番号で構成される。
【００９２】
比較器５０６は、フリップフロップ２０４が保持する仮ＬＤＡＴＱ番号を構成するＬＤＳＴＱ番号の入力を受ける。以下では、ＲＳＡ１４２から出力されたロードストア命令に割り当てられた仮ＬＤＳＴＱ番号を構成するＬＤＳＴＱ番号を入力ＬＤＳＴＱ番号という。さらに、比較器５０６は、先頭ＬＤＳＴＱ番号の入力を先頭ＬＤＳＴＱ番号保持回路５０３から受ける。そして、比較器５０６は、入力ＬＤＳＴＱ番号と先頭ＬＤＳＴＱ番号とを比較する。入力ＬＤＳＴＱ番号が先頭ＬＤＳＴＱ番号より小さい場合、比較器５０６は、１をＡＮＤゲート５１０へ出力し、それ以外の場合、０をＡＮＤゲート５１０へ出力する。
【００９３】
比較器５０７は、フリップフロップ２０４が保持する仮ＬＤＡＴＱ番号を構成するグループ番号の入力を受ける。以下では、ＲＳＡ１４２から出力されたロードストア命令に割り当てられた仮ＬＤＳＴＱ番号を構成するグループ番号を入力グループ番号という。さらに、比較器５０７は、先頭グループ番号に１が加算された番号の入力を加算器５０５から受ける。そして、比較器５０７は、入力グループ番号と先頭グループ番号に１を加算した番号とを比較する。入力グループ番号と先頭グループ番号に１を加算した番号とが一致する場合、比較器５０７は、１をＡＮＤゲート５１０へ出力し、それ以外の場合、０をＡＮＤゲート５１０へ出力する。
【００９４】
ＡＮＤゲート５１０は、入力ＬＤＳＴＱ番号が先頭ＬＤＳＴＱ番号より小さいか否かを表す信号の入力を比較器５０６から受ける。また、ＡＮＤゲート５１０は、入力グループ番号と先頭グループ番号に１を加算した番号とが一致するか否かを表す情報の入力を比較器５０７から受ける。そして、ＡＮＤゲート５１０は、入力された２つの信号の論理積を出力する。すなわち、ＡＮＤゲート５１０は、入力グループ番号が先頭グループ番号に１を加算した値と一致し且つ入力ＬＤＳＴＱ番号が先頭ＬＤＳＴＱ番号よりも小さい場合に１を出力する。
【００９５】
比較器５０８は、入力ＬＤＳＴＱ番号の入力をフリップフロップ２０４から受ける。さらに、比較器５０８は、先頭ＬＤＳＴＱ番号の入力を先頭ＬＤＳＴＱ番号保持回路５０３から受ける。そして、比較器５０６は、入力ＬＤＳＴＱ番号と先頭ＬＤＳＴＱ番号とを比較する。入力ＬＤＳＴＱ番号が先頭ＬＤＳＴＱ番号以上の場合、比較器５０６は、１をＡＮＤゲート５１０へ出力し、それ以外の場合、０をＡＮＤゲート５１０へ出力する。
【００９６】
比較器５０９は、入力グループ番号の入力をフリップフロップ２０４から受ける。さらに、比較器５０９は、先頭グループ番号の入力を先頭グループ番号保持回路５０４から受ける。そして、比較器５０９は、入力グループ番号と先頭グループ番号とを比較する。入力グループ番号と先頭グループ番号とが一致する場合、比較器５０９は、１をＡＮＤゲート５１１へ出力し、それ以外の場合、０をＡＮＤゲート５１１へ出力する。
【００９７】
ＡＮＤゲート５１１は、入力ＬＤＳＴＱ番号が先頭ＬＤＳＴＱ番号以上か否かを表す信号の入力を比較器５０８から受ける。また、ＡＮＤゲート５１１は、入力グループ番号と先頭グループ番号とが一致するか否かを表す情報の入力を比較器５０９から受ける。そして、ＡＮＤゲート５１１は、入力された２つの信号の論理積を出力する。すなわち、ＡＮＤゲート５１１は、入力グループ番号が先頭グループ番号と一致し且つ入力ＬＤＳＴＱ番号が先頭ＬＤＳＴＱ番号以上の場合に１を出力する。
【００９８】
ＯＲゲート５１２は、入力グループ番号が先頭グループ番号に１を加算した値と一致し且つ入力ＬＤＳＴＱ番号が先頭ＬＤＳＴＱ番号よりも小さいか否かを表す信号の入力をＡＮＤゲート５１０から受ける。また、ＯＲゲート５１２は、入力グループ番号が先頭グループ番号と一致し且つ入力ＬＤＳＴＱ番号が先頭ＬＤＳＴＱ番号以上か否かを表す信号の入力をＡＮＤゲート５１１から受ける。そして、ＯＲゲート５１２は、入力された２つの信号の論理和を出力する。すなわち、ＯＲゲート５１２は、入力グループ番号が先頭グループ番号に１を加算した値と一致し且つ入力ＬＤＳＴＱ番号が先頭ＬＤＳＴＱ番号よりも小さい場合に１を出力する。さらに、ＯＲゲート５１２は、入力グループ番号が先頭グループ番号と一致し且つ入力ＬＤＳＴＱ番号が先頭ＬＤＳＴＱ番号以上の場合に１を出力する。ＯＲゲート５１２が出力する１の信号は、ＲＳＡ１４２から出力されフリップフロップ２０４に格納されたロードストア命令がＬＤＳＴＱ１６１に格納可能であることを表す信号である。
【００９９】
ここで、図６を参照して、図５におけるＯＲゲート５１２が１を出力する場合に、ＲＳＡ１４２から出力されフリップフロップ２０４に格納されたロードストア命令がＬＤＳＴＱ１６１に格納可能である理由を説明する。図６は、ＬＤＳＴＱに格納されたデータを表すイメージ図である。
【０１００】
仮ＬＤＳＴＱ番号６００〜６０４は、デコード部１３から発行される仮ＬＤＳＴＱ番号を全て表している。そして、仮ＬＤＳＴＱ番号６０２〜６０４のそれぞれに配置された枠６１１〜６１４は、各状態でのＬＤＳＴＱ１６１に格納されたロードストア命令に割り当てられた仮ＬＤＳＴＱ番号である。ここでは仮ＬＤＳＴＱ番号を２桁の数字で表すが、１桁目がグループ番号を表し、２桁目がＬＤＳＴＱ番号を表す。さらに、枠６１１〜６１４に含まれる仮ＬＤＳＴＱ番号において「先頭」と記載されている仮ＬＤＳＴＱ番号は、ＬＤＳＴＱ１６１に格納されたロードストア命令のうち先頭のロードストア命令の仮ＬＤＳＴＱ番号である。すなわち、「先頭」と記載されている仮ＬＤＳＴＱ番号のグループ番号が先頭グループ番号にあたり、ＬＤＳＴＱ番号が先頭ＬＤＳＴＱ番号にあたる。
【０１０１】
ロードストア命令に仮ＬＤＳＴＱ番号が００から割り当てられ順次ＬＤＳＴＱ１６１に格納されると、最初は、ＬＤＳＴＱ１６１には、仮ＬＤＳＴＱ番号が００〜０９であるロードストア命令が格納される。実際には、ＬＤＳＴＱ１６１には、ＬＤＳＴＱ１６１のエントリを表すＬＤＳＴＱ番号が割り当てられたロードストア命令が格納されるが、ここでは、実際のＬＤＳＴＱ１６１のエントリの割り当て前の仮ＬＤＳＴＱ番号を用いて説明する。
【０１０２】
仮ＬＤＳＴＱ番号６０１の状態から仮ＬＤＳＴＱ番号が００のロードストア命令が出力され、解放されると次のロードストア命令が格納される場合は仮ＬＤＳＴＱ番号６０２で表される状態となる。この場合、仮ＬＤＳＴＱ番号が０９の次の仮ＬＤＳＴＱ番号は１０であるので、ＬＤＳＴＱ１６１には、仮ＬＤＳＴＱ番号６０２における枠６１２に含まれる仮ＬＤＳＴＱ番号を有するロードストア命令が格納される。このようにエントリの解放及び新たなロードストア命令を繰り返すと、仮ＬＤＳＴＱ番号６０３及び６０４で表される状態となる。
【０１０３】
いずれの状態でも、ＬＤＳＴＱ１６１に格納されるロードストア命令のグループ番号は、先頭グループ番号か先頭グループ番号に１を加算した番号である。そして、グループ番号が先頭グループ番号と一致するものであれば先頭ＬＤＳＴＱ番号以上のＬＤＳＴＱ番号を含む仮ＬＤＳＴＱ番号が割り当てられたロードストア命令であれば、ＬＤＳＴＱ１６１に格納可能である。また、グループ番号が先頭グループ番号に１を加算した番号と一致するものであれば先頭ＬＤＳＴＱ番号未満のＬＤＳＴＱ番号を含む仮ＬＤＳＴＱ番号が割り当てられたロードストア命令であれば、ＬＤＳＴＱ１６１に格納可能である。このことから、図５のＯＲゲート５１２が１を出力した場合であれば、その際にＲＳＡ１４２から出力されフリップフロップ２０４に格納されたロードストア命令がＬＤＳＴＱ１６１に格納可能であるといえる。
【０１０４】
ここで、図７を参照して、デコード部１３における命令発行処理の流れについて説明する。図７は、デコード部における命令発行処理のフローチャートである。
【０１０５】
デコード部１３は、命令バッファ１２から命令が出力されたことを表す信号、すなわち、値が１の有効信号の入力を受けたか否かを判定する（ステップＳ１）。この処理は、図４におけるＡＮＤゲート４０５が、命令バッファ１２から信号の入力を受けることにあたる。値が１の有効信号の入力が無い場合（ステップＳ１：否定）、デコード部１３は、命令をリザベーションステーション１４へ出力せずに命令発行処理を終了する。これは、ＡＮＤゲート４０５が０を出力することにあたる。
【０１０６】
これに対して、値が１の有効信号の入力がある場合（ステップＳ１：肯定）、デコード部１３は、命令解釈を行い入力された命令がロードストア命令か否かを判定する（ステップＳ２）。この処理は、図４におけるＮＡＮＤゲート４０４が、命令解釈部４０３による命令の解釈結果の入力を受けることにあたる。ロードストア命令でない場合（ステップＳ２：否定）、デコード部１３は、ステップＳ７へ進む。
【０１０７】
これに対して、ロードストア命令の場合（ステップＳ２：肯定）、デコード部１３は、ロードストア命令の滞留量が命令発行上限未満か否かを判定する（ステップＳ３）。この処理は、図４におけるＮＡＮＤゲート４０４が、Ｆｕｌｌ判定回路４０２からの判定結果を表す信号の入力を受けることにあたる。ロードストア命令の滞留量が命令発行上限以上の場合（ステップＳ３：否定）、デコード部１３は、命令をリザベーションステーション１４へ出力せずに命令発行処理を終了する。この処理は、ＮＡＮＤゲート４０４が０を出力し、それを受けてＡＮＤゲート４０５が０を出力することにあたる。
【０１０８】
これに対して、ロードストア命令の滞留量が命令発行上限未満の場合（ステップＳ３：肯定）、デコード部１３は、ＬＤＳＴＱ番号をインクリメントする（ステップＳ４）。この処理は、図４における仮ＬＤＳＴＱ番号発行数カウンタ４０１の更新及びＬＤＳＴＱ番号発行回路４１１によるＬＤＳＴＱ番号のインクリメントにあたる。
【０１０９】
次に、デコード部１３は、ＬＤＳＴＱ番号が０か否かを判定する（ステップＳ５）。この処理は、加算器４１３におけるオーバーフロー信号の出力判定にあたる。ＬＤＳＴＱ信号が０でない場合（ステップＳ５：否定）、デコード部１３は、ステップＳ７へ進む。これは、図４において加算器４１３がオーバーフロー信号を出力しない場合にあたる。
【０１１０】
これに対して、ＬＤＳＴＱ信号が０である場合（ステップＳ５：肯定）、デコード部１３は、グループ番号をインクリメントする（ステップＳ６）。この処理は、図４における加算器４１４が加算器４１３からのオーバーフロー信号の入力を受けて１を出力することで、グループ番号発行回路４１２がグループ番号をインクリメントする処理にあたる。
【０１１１】
その後、デコード部１３は、仮ＬＤＳＴＱ番号を出力するとともに、命令をリザベーションステーション１４へ出力し、さらに、命令発行信号を命令バッファ１２に発行する（ステップＳ７）。
【０１１２】
次に、図８を参照して、ＬＤＳＴＱ管理部１５０におけるリクエスト発行処理の流れについて説明する。図８は、実施例１に係るＬＤＳＴＱ管理部におけるリクエスト発行処理のフローチャートである。
【０１１３】
ＬＤＳＴＱ管理部１５０は、入力ＬＤＳＴＱ番号が先頭ＬＤＳＴＱ番号未満か否かを判定する（ステップＳ１１）。この処理は、図５における比較器５０６及び５０８による判定処理にあたる。
【０１１４】
入力ＬＤＳＴＱ番号が先頭ＬＤＳＴＱ番号未満の場合（ステップＳ１１：肯定）、ＬＤＳＴＱ管理部１５０は、入力グループ番号が先頭グループ番号に１を加算した番号と一致するかを判定する（ステップＳ１２）。この処理は、図５における比較器５０７による判定処理にあたる。
【０１１５】
また、入力ＬＤＳＴＱ番号が先頭ＬＤＳＴＱ番号以上の場合（ステップＳ１１：否定）、ＬＤＳＴＱ管理部１５０は、入力グループ番号が先頭グループ番号と一致するかを判定する（ステップＳ１３）。この処理は、図５における比較器５０９による判定処理にあたる。
【０１１６】
入力グループ番号が先頭グループ番号に１を加算した番号と一致しない場合（ステップＳ１２：否定）又は入力グループ番号が先頭グループ番号と一致しない場合（ステップＳ１３：否定）、ＬＤＳＴＱ管理部１５０は、ＬＤＳＴＱ１６１への格納不能と判定する。この処理は、図５におけるＯＲゲート５１２が、０の値の信号を出力した場合にあたる。そして、ＬＤＳＴＱ管理部１５０は、命令コードをＲＳＡ１４２へ戻し、さらに、インターロック信号をＲＳＡ１４２へ送信する（ステップＳ１４）。
【０１１７】
一方、入力グループ番号が先頭グループ番号に１を加算した番号と一致する場合（ステップＳ１２：肯定）又は入力グループ番号が先頭グループ番号と一致する場合（ステップＳ１３：肯定）、ＬＤＳＴＱ管理部１５０は、ＬＤＳＴＱ１６１への格納可能と判定する。この処理は、図５におけるＯＲゲート５１２が、１の値の信号を出力した場合にあたる。そして、ＬＤＳＴＱ管理部１５０は、ロードストア命令に対して実際のＬＤＳＴＱ１６１のエントリに対応するＬＤＳＴＱ番号を割り当てる。そして、ＬＤＳＴＱ管理部１５０は、命令コードをＬＤＳＴＱ１６１のＬＤＳＴＱ番号で表される位置に格納し、ロードストア命令の実行要求をＬＤＳＴＱ１６１へ出力する（ステップＳ１５）。
【０１１８】
その後、ＬＤＳＴＱ管理部１５０はインターロック解除信号を出力してＲＳＡ１４２のインターロックを解除する。また、ＬＤＳＴＱ１６１は、ロードストア命令の処理完了後にＬＤＳＴＱ解放信号を出力する（ステップＳ１６）。
【０１１９】
以上に説明したように、本実施例に係るコアは、デコード部でＬＤＳＴＱのエントリ数以上のロードストア命令に対して仮ＬＤＳＴＱ番号を割り当てＲＳＡへ出力する。そして、コアは、ＬＤＳＴＱ管理部において、実際のＬＤＳＴＱに仮のＬＤＳＴＱ番号が割り当てられたロードストア命令が格納可能かを判定し、格納可能であればＬＤＳＴＱのエントリを割り当て、格納する場所が無ければＲＳＡへ戻す。これにより、処理の順番にしたがって命令を出力するデコード部は、ＬＤＳＴＱのエントリ数以上のロードストア命令を出力することができる。そのため、デコード部からのロードストア命令の発行が待機させられる可能性が低くなり、より多くのロードストア命令及び演算命令を処理が可能となり、アドレス生成演算器や固定小数点演算器の使用効率を向上させることが可能となる。
【０１２０】
また、ＬＤＳＴＱ解放信号が出力された場合、ＬＤＳＴＱへ格納されるロードストア命令はＬＤＳＴＱ管理部又はＲＳＡから出力されるため、デコード部から出力されたロードストア命令の到着を待つよりもＬＤＳＴＱへの格納時間を短縮することができる。これにより、アドレス生成演算器や固定小数点演算器の使用効率を向上させることができる。
【０１２１】
また、ＬＤＳＴＱ管理部によるＬＤＳＴＱへの格納の可否判定は、ＲＳＡから出力された１つのロードストア命令に対して行うため、回路規模を値策することができる。さらに、ＲＳＡのインターロックの解除やＬＤＳＴＱ管理部によるＬＤＳＴＱへの格納の可否判定には、既存のＬＤＳＴＱ解放信号を用いるため、これらの処理を実現するための回路も規模を小さく抑えることができる。
【０１２２】
さらに、ロードストア命令のＬＤＳＴＱにおける格納場所が無い場合に、インターロックを掛けてそのロードストア命令のＲＳＡからの出力を待機させる。これにより、同じロードストア命令を繰り返し処理する手間を軽減でき、アドレス生成演算器や固定小数点演算器の使用効率を向上させることができる。
【０１２３】
ただし、同じロードストア命令を繰り返し処理した場合の処理能力の低下を許容することができる場合には、ＲＳＡにおけるインターロックを実行しなくてもよい。その場合でも、デコード部からの命令の出力の増加及びＬＤＳＴＱのエントリ解放からの次のエントリ割り当てまでの時間の短縮は実現でき、演算器の使用効率を向上させることができる。
【実施例２】
【０１２４】
次に、実施例２について説明する。本実施例に係るコアは、ＬＤＳＴＱにロードストア命令の格納する場所が無い場合に、そのロードストア命令のプリフェッチを実行することが実施例１と異なる。本実施例に係るコア１０も図２のブロック図で表される。以下の説明では、実施例１と同様の各部の動作は説明を省略する。
【０１２５】
図９は、実施例２に係るコアにおける命令パイプラインの詳細を表す図である。本実施例に係るロードストアパイプライン２００には、アドレス生成演算部１５３からＬＤＳＴＱ１６１を迂回してデータキャッシュ１６２に接続するバイパス経路が設けられる。
【０１２６】
ＬＤＳＴＱ管理部１５０は、取得したロードストア命令がＬＤＳＴＱ１６１に格納可能な場合、フリップフロップ２０５を介してアドレス生成演算部１５３へロードストア命令の命令コードを出力する。この場合、ＬＤＳＴＱ管理部１５０は、ロードストア命令の処理をアドレス生成演算部１５３に行わせる。
【０１２７】
これに対して、取得したロードストア命令の格納場所がＬＤＳＴＱ１６１に無い場合、ＬＤＳＴＱ管理部１５０は、フリップフロップ２０５を介してアドレス生成演算部１５３へロードストア命令の命令コードを出力する。そして、ＬＤＳＴＱ管理部１５０は、プリフェッチとしてロードストア命令をアドレス生成演算部１５３に処理させる。さらに、ＬＤＳＴＱ管理部１５０は、ＲＳＡ１４２にロードストア命令の命令コードを戻すとともに、インターロック信号をＲＳＡ１４２へ送信する。
【０１２８】
アドレス生成演算部１５３は、ロードストア命令がＬＤＳＴＱ１６１に格納可能な場合、命令コードの入力をＬＤＳＴＱ管理部１５０から受ける。そして、アドレス生成演算部１５３は、取得した命令コード及びＧＰＲ１５２から取得した情報を用いてアドレスを生成する。そして、アドレス生成演算部１５３は、命令コード及び生成したアドレスをＬＤＳＴＱ１６１に送信して格納させ、ロードストア命令をＬＤＳＴＱ１６１に処理させる。
【０１２９】
これに対して、ロードストア命令の格納場所がＬＤＳＴＱ１６１に無い場合、アドレス生成演算部１５３は、命令コードの入力をＬＤＳＴＱ管理部１５０から受ける。さらに、アドレス生成演算部１５３は、プリフェッチとしてのロードストア命令の処理要求をＬＤＳＴＱ管理部１５０から受ける。そして、アドレス生成演算部１５３は、取得した命令コード及びＧＰＲ１５２から取得した情報を用いてアドレスを生成する。その後、アドレス生成演算部１５３は、フリップフロップ２０６を介して、メインメモリ２上の生成したアドレスをデータ伽種に送り、生成したアドレスに格納されたデータに対するプリフェッチをデータキャッシュ１６２に実行させる。例えば、アドレス生成演算部１５３は、メインメモリ２上の生成したアドレスのデータがデータキャッシュ１６２に格納されていない場合、メインメモリ２上の生成したアドレスから読み出したデータをデータキャッシュ１６２に格納させる。
【０１３０】
次に、図１０を参照して、本実施例に係るＬＤＳＴＱ管理部１５０におけるリクエスト発行処理の流れについて説明する。図１０は、実施例２に係るＬＤＳＴＱ管理部におけるリクエスト発行処理のフローチャートである。
【０１３１】
ＬＤＳＴＱ管理部１５０は、入力ＬＤＳＴＱ番号が先頭ＬＤＳＴＱ番号未満か否かを判定する（ステップＳ２１）。
【０１３２】
入力ＬＤＳＴＱ番号が先頭ＬＤＳＴＱ番号未満の場合（ステップＳ２１：肯定）、ＬＤＳＴＱ管理部１５０は、入力グループ番号が先頭グループ番号に１を加算した番号と一致するかを判定する（ステップＳ２２）。
【０１３３】
また、入力ＬＤＳＴＱ番号が先頭ＬＤＳＴＱ番号以上の場合（ステップＳ２１：否定）、ＬＤＳＴＱ管理部１５０は、入力グループ番号が先頭グループ番号と一致するかを判定する（ステップＳ２３）。
【０１３４】
入力グループ番号が先頭グループ番号に１を加算した番号と一致しない場合（ステップＳ２２：否定）又は入力グループ番号が先頭グループ番号と一致しない場合（ステップＳ２３：否定）、ＬＤＳＴＱ管理部１５０は、ＬＤＳＴＱ１６１への格納不能と判定する。そして、ＬＤＳＴＱ管理部１５０は、命令コードとともにプリフェッチのリクエストをアドレス生成演算部１５３へ送信する（ステップＳ２４）。アドレス生成演算部１５３は、命令コード及びＲＳＡ１４２からの情報を用いてアドレスを生成し、生成したアドレスを用いてデータキャッシュ１６２にプリフェッチを行わせる。
【０１３５】
また、ＬＤＳＴＱ管理部１５０は、命令コードをＲＳＡ１４２へ戻し、さらに、インターロック信号をＲＳＡ１４２へ送信する（ステップＳ２５）。
【０１３６】
一方、入力グループ番号が先頭グループ番号に１を加算した番号と一致する場合（ステップＳ２２：肯定）又は入力グループ番号が先頭グループ番号と一致する場合（ステップＳ２３：肯定）、ＬＤＳＴＱ管理部１５０は、ＬＤＳＴＱ１６１への格納可能と判定する。そして、ＬＤＳＴＱ管理部１５０は、ロードストア命令に対して実際のＬＤＳＴＱ１６１のエントリに対応するＬＤＳＴＱ番号を割り当てる。そして、ＬＤＳＴＱ管理部１５０は、命令コードをＬＤＳＴＱ１６１のＬＤＳＴＱ番号で表される位置に格納し、ロードストア命令の実行要求をＬＤＳＴＱ１６１へ出力する（ステップＳ２６）。
【０１３７】
その後、ＬＤＳＴＱ管理部１５０はインターロック解除信号を出力してＲＳＡ１４２のインターロックを解除する。また、ＬＤＳＴＱ１６１は、ロードストア命令の処理完了後にＬＤＳＴＱ解放信号を出力する（ステップＳ２７）。
【０１３８】
以上に説明したように、本実施例に係るＬＤＳＴＱ管理部は、特定のロードストア命令のＬＤＳＴＱにおける格納場所が無い場合にも、その特定のロードストア命令で指定されたデータのプリフェッチを行い、データキャッシュに予め使用するデータを格納しておく。これにより、その特定のロードストア命令がＬＤＳＴＱに格納可能なり、その後ＬＤＳＴＱに格納された特定のロードストア命令が実行される場合に、データキャッシュに使用するデータが確実に存在する。そのため、キャッシュミスを減らすことができ、演算処理装置であるコアの処理性能を向上させることができる。
【符号の説明】
【０１３９】
１  ＣＰＵ
２  メインメモリ
３  ハードディスク
１０  コア
１１  命令キャッシュ
１２  命令バッファ
１３  デコード部
１４  リザベーションステーション
１５  演算実行部
１６  ロードストアユニット
１７  フリップフロップ
１３１  仮ＬＤＳＴＱ管理部
１４１  ＲＳＥ
１４２  ＲＳＡ
１５０  ＬＤＳＴＱ管理部
１５１  固定小数点演算器
１５２  ＧＰＲ
１５３  アドレス生成演算部
１６１  ＬＤＳＴＱ
１６２  データキャッシュ
２００  ロードストアパイプライン
２０１  エントリ選択部
２０２〜２０６  フリップフロップ
３００  演算パイプライン
３０１  エントリ選択部
３０２〜３０５  フリップフロップ
４０１  仮ＬＤＳＴＱ番号発行数カウンタ
４０２  Ｆｕｌｌ判定回路
４０３  命令解釈回路
４０４  ＮＡＮＤゲート
４０５，４０６  ＡＮＤゲート
４０８  減算器
４０９  加算器
４１１  ＬＤＳＴＱ番号発行回路
４１２  グループ番号発行回路
４１３，４１４  加算器
５０１，５０２，５０５  加算器
５０３  先頭ＬＤＳＴＱ番号保持回路
５０４  先頭グループ番号保持回路
５０６〜５０９  比較器
５１０，５１１  ＡＮＤゲート
５１２  ＯＲゲート
５２１，５２２，５２５，５２６  レジスタ番号転送部
５２３，５２７  リードポート
５２４，５２８  データ転送部
【図１】
2018205918.tif 000003
【図２】
2018205918.tif 000004
【図３】
2018205918.tif 000005
【図４】
2018205918.tif 000006
【図５】
2018205918.tif 000007
【図６】
2018205918.tif 000008
【図７】
2018205918.tif 000009
【図８】
2018205918.tif 000010
【図９】
2018205918.tif 000011
【図１０】
2018205918.tif 000012