(57)【要約】【課題】演算処理能力を向上させた演算処理装置及び演算処理装置の制御方法を提供する。【解決手段】命令制御部１１は、複数のキャッシュアクセス要求を含む演算処理命令を取得し、演算処理命令に含まれるキャッシュアクセス要求を順次送信する。キャッシュ制御部１３は、命令制御部１１から送信されたキャッシュアクセス要求を受信し、各前記キャッシュアクセス要求により指示されたキャッシュへのアクセス処理を順次実行する。演算制御部１２は、キャッシュ制御部１３によるアクセス処理の処理結果を基に演算処理を行う。【選択図】図２
2015210655.tif 000002
【特許請求の範囲】
【請求項１】
複数のキャッシュアクセス要求を含む演算処理命令を取得し、前記演算処理命令に含まれる前記キャッシュアクセス要求を順次送信する命令制御部と、
前記命令制御部から送信された前記キャッシュアクセス要求を受信し、各前記キャッシュアクセス要求により指示されたキャッシュへのアクセス処理を順次実行するキャッシュ制御部と、
前記キャッシュ制御部による前記アクセス処理の処理結果を基に演算処理を行う演算制御部と
を備えたことを特徴とする演算処理装置。
【請求項２】
前記キャッシュ制御部は、前記命令制御部から送信された前記演算処理命令に含まれる全ての前記キャッシュアクセス要求の処理が完了すると、前記命令制御部へ処理完了を通知し、
前記命令制御部は、前記キャッシュ制御部から処理完了の通知を受信すると前記演算処理命令におけるキャッシュアクセス要求の完了を確定する
ことを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記演算処理命令に含まれる前記キャッシュアクセス要求は連番で番号が振られており、
前記キャッシュ制御部は、番号が小さい順に前記キャッシュアクセス要求を処理し、最後の番号を有する前記キャッシュアクセス要求の処理が完了すると、前記命令制御部へ処理完了を通知する
ことを特徴とする請求項２に記載の演算処理装置。
【請求項４】
前記キャッシュ制御部は、キャッシュアクセス要求の処理経路を複数有しており、
前記命令制御部は、前記処理経路の数の前記キャッシュアクセス要求を同時に前記キャッシュ制御部に送信する
ことを特徴とする請求項１又は２に記載の演算処理装置。
【請求項５】
前記命令制御部は、前記演算処理命令の識別情報及び前記キャッシュアクセス要求の識別情報を前記キャッシュアクセス要求に付加して送信し、
前記キャッシュ制御部は、前記演算処理命令の識別情報及び前記キャッシュアクセス要求の識別情報を基に、前記キャッシュアクセス要求の処理順を決定する
ことを特徴とする請求項１〜４のいずれか一つに記載の演算処理装置。
【請求項６】
前記キャッシュ制御部は、各前記キャッシュアクセス要求に付加された前記演算処理命令の識別情報が異なる場合、前記演算処理命令の識別情報を基に前記キャッシュアクセス要求間の処理順を決定し、前記キャッシュアクセス要求に付加された前記演算処理命令の識別情報が同じ場合、前記キャッシュアクセス要求の識別情報を基に前記キャッシュアクセス要求間の処理順を決定することを特徴とする請求項１〜５のいずれか一つに記載の演算処理装置。
【請求項７】
複数のキャッシュアクセス要求を含む演算処理命令を取得し、
前記演算処理命令に含まれる前記キャッシュアクセス要求を順次取得し、
取得した前記キャッシュアクセス要求により指示されたキャッシュへのアクセス処理を順次実行し、
前記アクセス処理の処理結果を基に演算処理を行う
ことを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
近年、演算性能向上のために、演算処理装置は、ＳＩＭＤ（Single  Instruction  Multiple  Data）と呼ばれる処理を行うことがある。ＳＩＭＤは、複数のデータに対する演算を１つの命令でまとめて処理する手法である。また、ＳＩＭＤを用いた演算処理の性能向上のために、ロード・ストア処理も、ＳＩＭＤに応じた拡張がなされることが好ましい。
【０００３】
一般的なロード・ストア命令によるキャッシュアクセスリクエストは、１つのリクエストにつき１つのアドレスが指定される。演算処理装置に備えるキャッシュ制御部では、キャッシュアクセスリクエストで指定されたアドレスのデータに対して、ロード・ストア処理を行う。
【０００４】
これに対して、ＳＩＭＤ拡張したロード・ストア命令によるキャッシュアクセスリクエストでは、１つのリクエストにつき１つのアドレスと演算の対象となるデータの数を表す要素数とが指定される。そして、キャッシュ制御部では、指定されたアドレスから要素数分の連続したデータに対して、まとめてロード・ストア処理を行う。
【０００５】
そして、一般的なロード・ストア命令又はＳＩＭＤ拡張したロード・ストア命令のいずれであっても、１つのリクエストをキャッシュ制御部が備える１つの制御ポートに割り当て、その命令種、アドレス及びＳＩＭＤの要素数など各種制御信号を保持して処理を行っていた。
【０００６】
また、キャッシュアクセスリクエストには、プログラム上の命令順を示す情報であるＩＩＤ（Instruction  Identification）が付属する。キャッシュ制御部には、キャッシュヒットの判定を行う経路であるキャッシュ制御パイプラインを複数有する場合がある。キャッシュ制御パイプラインを複数有する演算処理装置では、異なるキャッシュ制御パイプラインを同時に複数のキャッシュアクセスリクエストが流れることが考えられる。この場合、キャッシュ制御部では、それぞれのキャッシュアクセスリクエストに付属したＩＩＤの大小判定を行うことで、それらのリクエストの順序関係を判定する。キャッシュ制御部は、例えば、異なるキャッシュ制御パイプライン間で共有する単一資源獲得時に、リクエスト順序の判定結果を用いてより古いリクエストに獲得優先権を与えるなどの処理を行う。
【０００７】
さらに、ＳＩＭＤによる演算処理の性能向上のために、インダイレクトロード・インダイレクトストア処理への対応が挙げられる。従来のＳＩＭＤを用いたロード・ストア処理では、処理対象となるデータは、メモリ上に連続して配置されていた。これに対して、インダイレクトロード・インダイレクトストア処理は、データが非連続に配置されていてもまとめてロード・ストア処理を行うことを可能とする技術である。
【０００８】
例えば、それぞれの要素に対して、ロード・ストア命令を要素数分発行する従来技術がある。また、例えば、新たにインダイレクトロード・インダイレクトストア命令を定義し、１つの命令で複数要素のアドレスをそれぞれ並行して同時に複数のキャッシュアクセスリクエストを送信する従来技術がある。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００９−１６３４４２号公報
【特許文献２】特公平０４−７９０２６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、ロード・ストア命令を要素数分発行する従来技術では、要素数が増えるにしたがい使用するロード・ストア命令が増大し、演算処理装置の各資源を占有することとなり、性能向上が妨げられるおそれがある。
【００１１】
また、並行して同時に複数のキャッシュアクセスリクエストを送信する従来技術では、制御ポートへリクエストを送信するためのアドレスバスやデータバスの幅を要素数分そなえる必要があり、演算処理装置内の回路量が増大する。そのため、演算処理装置の使用可能な回路量により同時に処理する要素数が制限されてしまい、性能向上が妨げられるおそれがある。
【００１２】
開示の技術は、上記に鑑みてなされたものであって、演算処理能力を向上させた演算処理装置及び演算処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
本願の開示する演算処理装置及び演算処理装置の制御方法は、複数のキャッシュアクセス要求を含む演算処理命令を取得し、前記演算処理命令に含まれる前記キャッシュアクセス要求を順次送信する命令制御部と、前記命令制御部から送信された前記キャッシュアクセス要求を受信し、各前記キャッシュアクセス要求により指示されたキャッシュへのアクセス処理を順次実行するキャッシュ制御部と、前記キャッシュ制御部による前記アクセス処理の処理結果を基に演算処理を行う演算制御部とを備える。
【発明の効果】
【００１４】
本願の開示する演算処理装置及び演算処理装置の制御方法の一つの態様によれば、演算処理能力を向上させることができるという効果を奏する。
【図面の簡単な説明】
【００１５】
【図１】図１は、演算処理装置のブロック図である。
【図２】図２は、キャッシュ制御部の詳細を表すブロック図である。
【図３】図３は、命令制御部から送出されるリクエストのフォーマットの一例の図である。
【図４】図４は、制御ポートが有するエントリの一例の図である。
【図５】図５は、リクエスト間の調停処理を説明するための図である。
【図６】図６は、パイプライン間のデータ転送要求の調停のタイムチャートである。
【図７】図７は、実施例１に係る演算処理装置による命令処理のフローチャートである。
【図８】図８は、大小比較器による比較処理のフローチャートである。
【図９】図９は、パイプライン間のデータ転送調停処理のフローチャートである。
【図１０】図１０は、実施例２に係る演算処理装置による命令処理のフローチャートである。
【発明を実施するための形態】
【００１６】
以下に、本願の開示する演算処理装置及び演算処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する演算処理装置及び演算処理装置の制御方法が限定されるものではない。
【実施例１】
【００１７】
図１は、演算処理装置のブロック図である。また、図２は、キャッシュ制御部の詳細を表すブロック図である。本実施例では、演算処理装置としてＣＰＵ（Central  Processing  Unit）を例に説明する。
【００１８】
ＣＰＵ１は、命令制御部１１、演算制御部１２、キャッシュ制御部１３、二次キャッシュ制御部１４及びメモリ制御部１５を有する。そして、メモリ制御部１５は、メモリ２と接続する。
【００１９】
命令制御部１１は、プログラムから命令を取得する。そして、命令制御部１１は、取得した命令にキャッシュアクセスリクエストであるか否かを判定する。キャッシュアクセスリクエストとは、例えば、メモリからキャッシュを介して演算制御部１２へのデータの読み出しや演算制御部１２からキャッシュを介してのデータの更新を要求するロード・ストアリクエストなどである。ここで、本実施例に係る命令は、複数のキャッシュアクセスリクエストを含ませることが可能であるように定義されている。
【００２０】
キャッシュアクセスリクエストである場合、命令制御部１１は、そのキャッシュアクセスリクエストをキャッシュ制御部１３へ送信する。以下では、キャッシュアクセスリクエストを、単に「リクエスト」と呼ぶ。
【００２１】
ここで、命令制御部１１は、後述するキャッシュ制御部１３が有する２本のパイプライン１３２及び１３３に同時にリクエストを発行可能である。例えば、１つの命令に４つのリクエストが含まれている場合、命令制御部１１は、２つのリクエストのそれぞれを各パイプライン１３２及び１３３に向けて送出し、続いて、残りの２つのリクエストそれぞれを各パイプライン１３２及び１３３に向けて送出する。
【００２２】
このように、本実施例に係る命令制御部１１は、１つのインダイレクト命令によるリクエストを順次キャッシュ制御部１３へ送出する。すなわち、本実施例における命令制御部１１は、１つのインダイレクト命令により複数のリクエストを処理できるので、インダイレクトロード・インダイレクトストア処理による命令数の増大を抑えることができ、性能の低下を回避できる。また、本実施例における命令制御部１１とキャッシュ制御部１３との間のバスは、従来のＳＩＭＤ処理に用いていたバス数や幅が同じであり、回路量の増大を抑えることができる。
【００２３】
その後、命令制御部１１は、リクエスト完了応答通知をキャッシュ制御部１３から受信する。そして、リクエスト完了応答通知を受けて、命令制御部１１は、キャッシュアクセスリクエストの完了を確定する。
【００２４】
また、命令制御部１１は、演算命令の実行要求などを演算制御部１２へ送出する。
【００２５】
次に、図２を参照して、キャッシュ制御部１３について説明する。キャッシュ制御部１３は、制御ポート管理部１３１、パイプライン１３２及び１３３、キャッシュＲＡＭ（Random  Access  Memory）１３４、ヒット判定回路１３５及び１３６、大小比較器１３７、並びに、メモリアクセス制御部１３８を有する。
【００２６】
制御ポート管理部１３１は、複数の制御ポート３０を有する。各制御ポート３０は、パイプライン１３２及びパ１３３のそれぞれを介してキャッシュＲＡＭ１３４に接続する。以下では、パイプライン１３２及び１３３のそれぞれを区別しない場合、「パイプライン１３０」という。ここで、本実施例では、パイプライン１３０は、２本であるがこれは１本でもよい。また、可能であれば、ＣＰＵ１は、３本以上のパイプライン１３０を有してもよい。
【００２７】
制御ポート３０は、命令制御部１１から送出されたリクエストを受信する。そして、制御ポート３０は、命令制御部１１により指定されたパイプライン１３０にリクエストを投入する。ここで、投入先のパイプライン１３０に既に他のリクエストが投入され、その処理が終わっていない場合には、制御ポート３０は、投入先のパイプライン１３０が処理を完了しリクエストが投入可能な状態となるまで、リクエストを保持しておく。例えば、制御ポート３０は、キューなどを用いてリクエストを蓄積する。
【００２８】
ここで、図３を参照して、制御ポート３０が受信するリクエストのフォーマットについて説明する。図３は、命令制御部から送出されるリクエストのフォーマットの一例の図である。図３に示すように、リクエスト２００は、ｒｅｑｕｅｓｔ、ａｄｄｒｅｓｓ、ＩＩＤ、ＳＩＭＤ、ｉｎｄｉｒｅｃｔ及びｅｌｅｍｅｎｔの各項目を有する。ｒｅｑｕｅｓｔは、ロードやストアなどのアクセスの種類を表す。ａｄｄｒｅｓｓは、アクセス先のアドレスを表す。ＩＩＤは、そのリクエストが含まれる命令の識別子である。本実施例では、ＩＩＤは、命令に昇順に番号が連番で割り当てられ、命令順を示す。ＳＩＭＤは、ＳＩＭＤの要素数を表す。ｉｎｄｉｒｅｃｔは、インダイレクトアクセスか否かを示すフラグである。本実施例では、ｉｎｄｉｒｅｃｔが「０」であれば、インダイレクトロード処理又はインダイレクトストア処理の対象となっていないことを表す。また、ｉｎｄｉｒｅｃｔが「１」であれば、インダイレクトロード処理又はインダイレクトストア処理の対象となっているリクエストであることを表す。ｅｌｅｍｅｎｔは、そのリクエストのＳＩＭＤの要素番号を表す。本実施例では、要素番号は、昇順に番号が連番で割り当てられている。
【００２９】
さらに、制御ポート３０は、図４に示すように、各リクエストに対応させてリクエストで指示されたロードやストアなどのキャッシュアクセスの現在の状態を表すステータスフラグを備えるエントリを記憶する。図４は、制御ポートが有するエントリの一例の図である。図４のリクエストの欄には、図３に示すフォーマットを有するリクエストが格納されている。また、ｓｔａｔｕｓの欄には、ステータスフラグがセットされている。ステータスフラグが「１」であれば、そのリクエストを受信し且つ未処理の状態を表す。ステータスフラグが「２」であれば、そのリクエストの処理が完了したことを表す。ステータスフラグが「０」であれば、そのリクエストに関するリクエスト完了応答通知が命令制御部１１へ既に送られ、そのリクエストのエントリが解放された状態であることを表す。
【００３０】
すなわち、ＩＮＤＩＲＥＣＴ＝０のリクエストを処理する場合は、制御ポート３０は、リクエストを命令制御部１３１から受信すると、受信したリクエストに対応させて、値が「１」のステータスフラグを立てたエントリを１つ作成する。
【００３１】
次に、制御ポート３０は、リクエストをパイプライン１３０へ投入し、ヒット判定回路１３５又は１３６から処理完了の通知を受けると、そのリクエストに対応するエントリのステータスフラグを「２」に変更する。これに対して、リクエストをパイプライン１３０へ投入後、ヒット判定回路１３５又は１３６から再投入の通知を受けた場合、制御ポート３０は、リクエストをパイプライン１３０へ再投入し、ステータスフラグは「１」のまま維持する。
【００３２】
その後、制御ポート管理部１３１からリクエスト完了応答が命令制御部１１へ送信されると、制御ポート３０は、リクエスト完了応答に対応するリクエストのエントリを解放し、ステータスを「０」に変更する。
【００３３】
ＩＮＤＩＲＥＣＴ＝１のリクエストを処理する場合は、命令制御部１３１からキャッシュ制御部１３に対して、ＳＩＭＤの値の数のリクエストが同一ＩＩＤで発行され、制御ポート３０は、受信したリクエストに対応させて、値が「１」のステータスフラグを立てたエントリをＳＩＭＤの値の数だけ作成する。制御ポート管理部１３１は、各制御ポート３０における各リクエストのエントリを監視する。そして、いずれかのエントリのステータスフラグが２になると、制御ポート管理部１３１は、そのエントリに格納されているリクエストのＩＩＤを取得する。次に、制御ポート管理部１３１は、取得したＩＩＤを有する命令の要素数を取得する。その後、制御ポート管理部１３１は、同じＩＩＤを有するリクエストを各制御ポート３０が有するエントリから抽出する。そして、制御ポート管理部１３１は、抽出した各エントリのステータスフラグを確認する。
【００３４】
抽出した各エントリのステータスフラグが全て「２」の場合、制御ポート管理部１３１は、リクエスト完了応答を命令制御部１１へ送信する。これに対して、抽出した各エントリの中にステータスフラグが「１」のエントリが含まれている場合、制御ポート管理部１３１は、次にステータスフラグが「２」に変更されるまで待機する。
【００３５】
ここで、本実施例では、制御ポート管理部１３１は、ＩＩＤが同じエントリのステータスフラグが全て「２」であればリクエスト完了応答を送信したが、各命令に含まれるリクエストの数、すなわち要素数を用いて確認を行ってもよい。例えば、以下のような処理で実現できる。制御ポート管理部１３１は、リクエストがインダイレクトアクセスである場合、リクエストを受信するとともに、そのリクエストを含む命令の要素数を命令制御部１１から受信する。そして、制御ポート１３１は、ＩＩＤに対応させて要素数を記憶する。その後、制御ポート１３１は、ＩＩＤが同じエントリを抽出した際に、そのＩＩＤに対応する要素数を取得し、抽出したエントリの数と取得した要素数とが一致するか否かを判定してもよい。
【００３６】
そして、制御ポート管理部１３１は、リクエスト完了応答を送信後、ステータスフラグの判定のために抽出した各エントリのステータスフラグを「０」に変更するように各制御ポート３０に指示する。
【００３７】
パイプライン１３２及び１３３は、リクエストの投入を制御ポート３０から受ける。そして、パイプライン１３２及び１３３は、キャッシュＲＡＭ１３４にリクエストを送る。また、パイプライン１３２は、リクエストをヒット判定回路１３５へ送る。また、パイプライン１３３は、リクエストをヒット判定回路１３６へ送る。さらに、パイプライン１３２及び１３３は、リクエストを大小比較器１３７へ送る。
【００３８】
キャッシュＲＡＭ１３４は、パイプライン１３２から受信したリクエストで指定されているアドレスにデータがある場合、指定されたアドレスからデータを取り出し、ヒット判定回路１３５へ出力する。また、キャッシュＲＡＭ１３４は、パイプライン１３３から受信したリクエストで指定されているアドレスからデータを取り出し、ヒット判定回路１３６へ出力する。
【００３９】
ヒット判定回路１３５は、制御ポート３０から投入されたリクエストの入力をパイプライン１３２から受ける。また、ヒット判定回路１３５は、リクエストで指定されたアドレスにデータがある場合、キャッシュＲＡＭ１３４からデータを取得する。さらに、ヒット判定回路１３５は、パイプライン１３２及び１３３に投入されたリクエストの比較結果を大小比較器１３７から受ける。
【００４０】
次に、ヒット判定回路１３５は、パイプライン１３２から受信したリクエストのタグを用いて、キャッシュＲＡＭ１３４から取得したデータの中にヒットするデータがあるか否かを判定する。
【００４１】
ヒットしたデータがある場合、ヒット判定回路１３５は、ヒットしたデータを演算制御部１２へ送信する。以下では、ヒット判定回路１３５又は１３６によりデータがヒットしたと判定された場合を、「キャッシュヒット」という。また、ヒット判定回路１３５は、処理完了の通知をリクエストの投入元の制御ポート３０へ送信する。
【００４２】
一方、キャッシュヒットするデータがない場合、すなわち、キャッシュＲＡＭ１３４からデータが送出されない場合又はタグを用いた判定でデータがヒットしない場合、ヒット判定回路１３５は、以下の処理を行う。
【００４３】
ヒット判定回路１３５は、大小比較器１３７から入力された比較結果を参照する。比較結果がパイプライン１３２に投入されたリクエストの処理の実行を表す結果の場合、ヒット判定回路１３５は、リクエストに対応するデータ転送をメモリアクセス制御部１３８へ要求する。その後、ヒット判定回路１３５は、応答データのキャッシュＲＡＭ１３４への格納の通知をメモリアクセス制御部１３８から受信する。そして、ヒット判定回路１３５は、リクエストの再投入を制御ポート３０に通知する。
【００４４】
逆に、比較結果がパイプライン１３３に投入されたリクエストの処理の実行を表す結果の場合、ヒット判定回路１３５は、リクエストの再投入の通知をリクエストの送信元である制御ポート３０へ送信する。
【００４５】
ヒット判定回路１３６は、ヒット判定回路１３５と同様の動作を行うので、説明を省略する。ただし、ヒット判定回路１３６では、パイプライン１３２とパイプライン１３３との関係が逆になる。
【００４６】
大小比較器１３７は、リクエストの入力をパイプライン１３２及び１３３のそれぞれから受ける。そして、大小比較器１３７は、受信した各リクエストの要素番号を取得する。次に、大小比較器１３７は、取得した要素番号の大小を比較する。そして、大小比較器１３７は、要素番号が大きい方のリクエストの処理の実行を表す比較結果をヒット判定回路１３５及び１３６へ送信する。例えば、パイプライン１３２から入力されたリクエストの要素番号が、パイプライン１３３から入力されたリクエストの要素番号よりも大きい場合、大小比較器１３７は、パイプライン１３２から入力されたリクエストの処理の実行を表す比較結果を出力する。
【００４７】
メモリアクセス制御部１３８は、キャッシュミスが発生した場合、データの転送要求をヒット判定回路１３５又は１３６から受ける。そして、メモリアクセス制御部１３８は、データの転送要求の送信元でヒット判定が行われたリクエストについてのデータ転送要求を二次キャッシュ制御部１４へ送信する。
【００４８】
その後、メモリアクセス制御部１３８は、二次キャッシュ制御部１４からデータ転送要求に対する応答データを受信する。そして、メモリアクセス制御部１３８は、受信した応答データをキャッシュＲＡＭ１３４に格納する。その後、メモリアクセス制御部１３８は、ヒット判定回路１３５及び１３６の内のデータ転送要求の送信元に対して応答データの格納を通知する。
【００４９】
ここで、図５を参照して、パイプライン１３２及び１３３から入力されたリクエストのいずれもヒットしなかった場合の、ヒット判定回路１３５及び１３６、並びに、大小比較器１３７によるリクエスト間の調停処理について具体的に説明する。図５は、リクエスト間の調停処理を説明するための図である。図５に記載したヒット判定回路１３５及び１３６は、ヒット判定回路１３５及び１３６の詳細の一例である。この場合、ヒット判定回路１３５は、ヒット判定部３５１、ＡＮＤ回路３５２及び３５３を有する。また、ヒット判定回路１３６は、ヒット判定部３６１、ＡＮＤ回路３６２及び３６３を有する。また、ＡＮＤ回路３５２及び３６２における入力側の丸印は、入力の反転を示す。また、以下の説明では、キャッシュＲＡＭ１３４へのリクエストの送信などリクエスト間の調停処理に直接関係ない処理は説明を省略する。
【００５０】
命令制御部１１は、ＩＩＤが「０」である命令ＸＸＸからリクエストＡ及びリクエストＢを抽出する。そして、命令制御部１１は、リクエストＡに要素番号として「０」を割り当て、リクエストＢに要素番号として「１」を割り当てる。図５では、「ｅｌｅｍｅｎｔ＃」に続く番号が要素番号を表す。
【００５１】
命令制御部１１は、要素番号「０」のリクエストＡを制御ポート３１へ送出する。また、命令制御部１１は、要素番号「１」のリクエストＢを制御ポート３２へ送出する。ここで、制御ポート３１及び３２は、図２の制御ポート３０のいずれかである。
【００５２】
制御ポート３１は、リクエストＡをヒット判定部３５１及び大小比較器１３７へ送信する。また、制御ポート３２は、リクエストＢをヒット判定部３６１及び大小比較器１３７へ送信する。
【００５３】
ヒット判定部３５１は、リクエストＡのヒット判定を行う。リクエストがヒットした場合、ヒット判定部３５１は、「０」をＡＮＤ回路３５２及び３５３へ出力する。リクエストがヒットしない場合、ヒット判定部３５１は、「１」をＡＮＤ回路３５２及び３５３へ出力する。ここでは、リクエストＡがヒットしない場合であるので、ヒット判定部３５１は、「１」をＡＮＤ回路３５２及び３５３へ出力する。
【００５４】
ヒット判定部３６１は、リクエストＢのヒット判定を行う。リクエストがヒットした場合、ヒット判定部３６１は、「０」をＡＮＤ回路３６２及び３６３へ出力する。リクエストがヒットしない場合、ヒット判定部３６１は、「１」をＡＮＤ回路３６２及び３６３へ出力する。ここでは、リクエストＢがヒットしない場合であるので、ヒット判定部３６１は、「０」をＡＮＤ回路３６２及び３６３へ出力する。
【００５５】
大小比較器１３７は、リクエストＡ及びＢを制御ポート３１及び３２から受信する。そして、大小比較器１３７は、リクエストＡから要素番号「０」を取得する。また、大小比較器１３７は、リクエストＢから要素番号「１」を取得する。次に、大小比較器１３７は、リクエストＡの要素番号「０」とリクエストＢの要素番号「１」を比較する。この場合、大小比較器１３７は、リクエストＡの要素番号がリクエストＢの要素番号より小さいと判定する。
【００５６】
そして、大小比較器１３７は、要素番号が小さい方のリクエストを、データ転送要求を実行するリクエストとする。さらに、大小比較器１３７は、ヒット判定回路１３５及び１３６のうち、データ転送要求を実行しないリクエストのヒット判定を行った方に「０」を出力し、他方に「１」を出力する。ここでは、大小比較器１３７は、リクエストＡについてのデータ転送要求の実行を表す判定結果として「１」をＡＮＤ回路３５２及び３５３へ出力する。また、大小比較器１３７は、リクエストＡについてのデータ転送要求の実行を表す判定結果、すなわちリクエストＢについてはデータ転送要求を実行しないことを表す判定結果として「０」をＡＮＤ回路３６２及び３６３へ出力する。
【００５７】
ＡＮＤ回路３５２は、ヒット判定部３５１からの入力と大小比較器１３７からの入力を反転させた値との論理積を制御ポート３１へ出力する。ここでは、ＡＮＤ回路３５２は、ヒット判定部３５１から入力された「１」と、大小比較器１３７からの入力を反転させた値である「０」の論理積である「０」を制御ポート３１へ出力する。ここで、制御ポート３１又は３２への「０」の出力は、リクエストの処理継続を表す。
【００５８】
ＡＮＤ回路３５３は、ヒット判定部３５１からの入力と大小比較器１３７からの入力との論理積をメモリアクセス制御部１３８へ出力する。ここでは、ヒット判定部３５１及び大小比較器１３７のいずれからも「１」が入力されるので、ＡＮＤ回路３５２は、「１」をメモリアクセス制御部１３８へ出力する。
【００５９】
ＡＮＤ回路３６２は、ヒット判定部３５１からの入力と大小比較器１３７からの入力を反転させた値との論理積を制御ポート３２へ出力する。ここでは、ＡＮＤ回路３６２は、ヒット判定部３６１から入力された「１」と、大小比較器１３７からの入力を反転させた値である「１」の論理積である「１」を制御ポート３１へ出力する。制御ポート３１又は３２への「１」の出力は、リクエストの再投入を表す。
【００６０】
ＡＮＤ回路３６３は、ヒット判定部３６１からの入力と大小比較器１３７からの入力との論理積をメモリアクセス制御部１３８へ出力する。ここでは、ヒット判定部３５１から「１」の入力を受け、大小比較器１３７から「０」が入力されるので、ＡＮＤ回路３５２は、「０」をメモリアクセス制御部１３８へ出力する。
【００６１】
制御ポート３１は、ＡＮＤ回路３５２から「０」の入力を受けると、リクエストＡの処理が継続されていることを確認する。また、制御ポート３２は、ＡＮＤ回路３６２から「１」の入力を受けると、リクエストＢをパイプライン１３３へ再投入する。
【００６２】
ここでは、双方がキャッシュミスした場合の調停処理についての説明であり、ヒット判定回路１３５及び１３６による調停結果を制御ポート３０へ通知するまでの説明である。ただし、最終的には、ヒット判定回路１３５及び１３６は、以下の処理を行う。すなわち、リクエストの処理が継続する状態で、キャッシュにリクエストが指定するデータが登録された場合に、ヒット判定回路１３５及び１３６は、リクエストの送出元の制御ポート３０にリクエストの再投入を指示する。また、リクエストがキャッシュヒットした場合、ヒット判定回路１３５及び１３６は、リクエストの送出元の制御ポート３０にリクエストの処理完了の通知を行う。
【００６３】
メモリアクセス制御部１３８は、ＡＮＤ回路３５３及び３６３から論理積の入力を受ける。そして、メモリアクセス制御部１３８は、「１」の値を入力した側のリクエストについてのデータ転送要求を二次キャッシュ制御部１４へ出力する。ここでは、ＡＮＤ回路３５３から「１」の入力を受け、ＡＮＤ回路３６３から「０」の入力を受けるので、メモリアクセス制御部１３８は、リクエストＡについてのデータ転送要求を二次キャッシュ制御部１４へ出力する。
【００６４】
次に、図６を参照して、パイプライン１３２と１３３との間のデータ転送要求の調停における各処理のタイミングについて説明する。図６は、パイプライン間のデータ転送要求の調停のタイムチャートである。
【００６５】
図６は、左端に処理対象を記載する。一番下の欄はリクエストＡ及びＢの双方を用いた大小比較を表す。また、図６は、左に進むにしたがい時間が時刻Ｔ１〜Ｔ９へ経過することを表す。また、ここでは、各パイプライン１３２及び１３３に投入されたリクエストに対して、Ｐ１〜Ｐ３の３サイクルでヒット判定の処理が行われる場合で説明する。
【００６６】
時刻Ｔ１で、リクエストＡがパイプライン１３２に投入され、リクエストＢがパイプライン１３３に投入される。
【００６７】
そして、時刻Ｔ３にあたるサイクルＰ２でリクエストＡ及びリクエストＢのキャッシュヒットの判定が行われる。
【００６８】
その後、時刻Ｔ５で、リクエストＡとリクエストＢとの大小判定がなされる。ここでは、リクエストＡがリクエストＢより小さいと判定された場合で説明する。そこで、リクエストＡについて、データ転送要求により二次キャッシュ又はメモリ２からのデータ取得であるメモリリクエストが行われる。また、リクエストＢは、パイプライン１３３へ再投入される。
【００６９】
その後、時刻Ｔ７における次のタイミングのサイクルＰ２でリクエストＢのキャッシュミスが再度発生する。ここでは、リクエストＡ及びＢ以外のリクエストはない場合であるので、時刻Ｔ９で、リクエストＢについて、データ転送要求により二次キャッシュ又はメモリ２からのデータ取得であるメモリリクエストが行われる。
【００７０】
このように、パイプライン１３２及び１３３間でキャッシュミスが競合した場合でも、若い番号が与えられたリクエストから順次データ転送要求が実行されることで、最終的に全てのリクエストのデータ転送が実行される。
【００７１】
図１に戻って説明を続ける。二次キャッシュ制御部１４は、二次キャッシュを有する。二次キャッシュ制御部１４は、データ転送要求をメモリアクセス制御部１３８から受信する。そして、二次キャッシュ制御部１４は、自己が有する二次キャッシュにデータ転送要求で指定されたデータが格納されているか否かを判定する。格納されている場合、二次キャッシュ制御部１４は、データ転送要求で指定されたデータを二次キャッシュから取得し、取得したデータを応答データとしてメモリアクセス制御部１３８へ送信する。
【００７２】
これに対して、データ転送要求で指定されたデータが二次キャッシュに格納されていない場合、二次キャッシュ制御部１４は、データ転送要求をメモリ制御部１５に送信する。その後、二次キャッシュ制御部１４は、応答データをメモリ制御部１５から受信する。そして、二次キャッシュ制御部１４は、受信した応答データをメモリアクセス制御部１３８へ送信する。
【００７３】
メモリ制御部１５は、データ転送要求を二次キャッシュ制御部１４から受ける。そして、メモリ制御部１５は、データ転送要求で指定されたデータをメモリ２から取得する。そして、メモリ制御部１５は、取得したデータを二次キャッシュ制御部１４へ送信する。
【００７４】
演算制御部１２は、演算処理の実行要求などを命令制御部１１から受信する。また、演算処理１２は、データをキャッシュ制御部１３から受信する。そして、演算制御部１２は、キャッシュ制御部１３から受信したデータを用いて演算処理などを実行する。ただし、実行する処理にキャッシュデータを用いない場合など、演算制御部１２は、キャッシュ制御部１３からのデータの受信を行わずに、処理を実行する場合もある。
【００７５】
次に、図７を参照して、本実施例に係る演算処理装置による命令処理の流れを説明する。図７は、実施例１に係る演算処理装置による命令処理のフローチャートである。以下では、ヒット判定回路１３５とヒット判定回路１３６とを区別せずに、「ヒット判定回路１４０」という。
【００７６】
命令制御部１１は、命令からリクエストを取得し、取得したリクエストを制御ポート３０に発行する（ステップＳ１０１）。
【００７７】
制御ポート３０は、リクエストを受信する（ステップＳ１０２）。そして、制御ポート３０は、受信したリクエストのエントリのステータスフラグを「１」にする（ｓｔａｔｕｓ＝１）（ステップＳ１０３）。
【００７８】
次に、制御ポート３０は、リクエストをパイプライン１３０に投入する（ステップＳ１０４）。
【００７９】
ヒット判定回路１４０は、リクエストがキャッシュヒットしたか否かを判定する（ステップＳ１０５）。キャッシュヒットしない場合（ステップＳ１０５：否定）、メモリアクセス制御部１３８は、データ転送要求を二次キャッシュ制御部１４へ送信する（ステップＳ１０６）。そして、メモリアクセス制御部１３８は、二次キャッシュ制御部１４から応答データを受信し、受信した応答データをキャッシュＲＡＭ１３４に登録する（ステップＳ１０７）。その後、ヒット判定回路１４０は、リクエストの再投入を制御ポート３０へ通知する。制御ポート３０は、ステップＳ１０４へ戻る。
【００８０】
これに対して、キャッシュヒットした場合（ステップＳ１０５：肯定）、ヒット判定回路１４０は、ロード・ストア処理を実行する（ステップＳ１０８）。
【００８１】
そして、ヒット判定回路１４０は、リクエストの処理完了を制御ポート３０へ通知する。制御ポート３０は、リクエストの処理完了の通知を受けて、該当するリクエストのエントリのステータスフラグを「２」に変更する（ｓｔａｔｕｓ＝２）（ステップＳ１０９）。
【００８２】
制御ポート管理部１３１は、ステータスフラグが「２」に変更されると、そのリクエストがインダイレクトアクセスでないか否か、すなわち、インダイレクトアクセスか否かを示すフラグが「０」（ｉｎｄｉｒｅｃｔ＝０）か否かを判定する（ステップＳ１１０）。リクエストがインダイレクトアクセスでない場合（ステップＳ１１０：肯定）、制御ポート管理部１３１は、ステップＳ１１３へ進む。
【００８３】
これに対して、リクエストがインダイレクトアクセスである場合（ステップＳ１１０：否定）、制御ポート管理部１３１は、そのリクエストを含む命令のＩＩＤを取得する。次に、制御ポート管理部１３１は、全エントリを検索する（ステップＳ１１１）。そして、制御ポート管理部１３１は、取得したＩＩＤと同じＩＩＤを有する命令に含まれるリクエストの全エントリのステータスフラグが「２」（ｓｔａｔｕｓ＝２）か否かを判定する（ステップＳ１１２）。
【００８４】
ステータスフラグが「２」以外のエントリが含まれていた場合（ステップＳ１１２：否定）、制御ポート管理部１３１は、ステップＳ１１１に戻る。ここで、並行して他のリクエストについてもステップＳ１０１〜Ｓ１０９の処理が行われるため、ステップＳ１１１及び１１２を繰り返す間に、全エントリのステータスフラグが「２」に変わる。一方、全てのエントリのステータスフラグが「２」の場合（ステップＳ１１２：肯定）、制御ポート管理部１３１は、ステップＳ１１３へ進む。
【００８５】
そして、制御ポート管理部１３１は、リクエスト完了応答を命令制御部１１へ送信する（ステップＳ１１３）。
【００８６】
そして、制御ポート３０は、リクエスト完了応答が送信されたリクエストのエントリのステータスフラグを「０」に変える（ｓｔａｔｕｓ＝０）（ステップＳ１１４）。
【００８７】
次に、図８を参照して、大小比較器による比較処理の流れを説明する。図８は、大小比較器による比較処理のフローチャートである。ここでは、リクエストＡがパイプライン１３２に投入され、リクエストＢがパイプライン１３３に投入された場合で説明する。図８では、リクエストＡを単に「Ａ」と表し、リクエストＢを単に「Ｂ」と表す。
【００８８】
大小比較器１３７は、リクエストＡを含む命令のＩＩＤ（以下では、「ＡのＩＩＤ」という。）とリクエストＢを含む命令のＩＩＤ（以下では、「ＢのＩＩＤ」という。）とが異なるか否かを判定する（ステップＳ２０１）。
【００８９】
ＩＩＤが異なる場合（ステップＳ２０１：肯定）、大小比較器１３７は、リクエストＡのＩＩＤがリクエストＢのＩＩＤよりも小さいか否かを判定する（ステップＳ２０２）。
【００９０】
ＡのＩＩＤがＢのＩＩＤよりも小さい場合（ステップＳ２０２：肯定）、大小比較器１３７は、リクエストデータ転送要求をヒット判定回路１３５へ指示する（ステップＳ２０４）。例えば、図５のような構成の場合、大小比較器１３７は、ＡＮＤ回路３５２及び３５３に「１」を出力する。この場合、大小比較器１３７は、ＡＮＤ回路３６２及び３６３に「０」を出力する。
【００９１】
これに対して、ＢのＩＩＤがＡのＩＩＤよりも小さい場合（ステップＳ２０２：否定）、大小比較器１３７は、リクエストデータ転送要求をヒット判定回路１３６へ指示する（ステップＳ２０５）。例えば、図５のような構成の場合、大小比較器１３７は、ＡＮＤ回路３６２及び３６３に「１」を出力する。この場合、大小比較器１３７は、ＡＮＤ回路３５２及び３５３に「０」を出力する。
【００９２】
一方、ＩＩＤが同じ場合（ステップＳ２０１：否定）、大小比較器１３７は、リクエストＡの要素番号がリクエストＢの要素番号より小さいか否かを判定する（ステップＳ２０３）。
【００９３】
リクエストＡの要素番号がリクエストＢの要素番号より小さい場合（ステップＳ２０３：肯定）、大小比較器１３７は、リクエストデータ転送要求をヒット判定回路１３５へ指示する（ステップＳ２０４）。例えば、図５のような構成の場合、大小比較器１３７は、ＡＮＤ回路３５２及び３５３に「１」を出力する。この場合、大小比較器１３７は、ＡＮＤ回路３６２及び３６３に「０」を出力する。
【００９４】
これに対して、リクエストＢの要素番号がリクエストＡの要素番号より小さい場合（ステップＳ２０３：否定）、大小比較器１３７は、リクエストデータ転送要求をヒット判定回路１３６へ指示する（ステップＳ２０５）。例えば、図５のような構成の場合、大小比較器１３７は、ＡＮＤ回路３６２及び３６３に「１」を出力する。この場合、大小比較器１３７は、ＡＮＤ回路３５２及び３５３に「０」を出力する。
【００９５】
次に、図９を参照して、パイプライン間のデータ転送調停処理の流れについて説明する。図９は、パイプライン間のデータ転送調停処理のフローチャートである。ここでは、リクエストＡ及びＢという２つのリクエストがあり、且つ、制御ポート３０として、制御ポート＃ａ及び＃ｂという２つの制御ポートがある場合で説明する。
【００９６】
命令制御部１１は、リクエストＡを制御ポート＃ａに投入し、リクエストＢを制御ポート＃ｂに投入する（ステップＳ３０１）。
【００９７】
制御ポート＃ａは、リクエストＡのエントリのステータスフラグを「１」にする（ｓｔａｔｕｓ＝１）。また、制御ポート＃ｂは、リクエストＢのエントリのステータスフラグを「１」にする（ｓｔａｔｕｓ＝１）（ステップＳ３０２）。
【００９８】
制御ポート＃ａは、リクエストＡをパイプライン１３２に投入し、制御ポート＃ｂは、リクエストＢをパイプライン１３３に投入する（ステップＳ３０３）。
【００９９】
ヒット判定回路１３５は、リクエストＡがキャッシュヒットしたか否かを判定する（ステップＳ３０４）。リクエストＡがキャッシュヒットしない場合（ステップＳ３０４：否定）、ヒット判定回路１３６は、リクエストＢがキャッシュヒットしたか否かを判定する（ステップＳ３０５）。リクエストＢがキャッシュヒットした場合（ステップＳ３０５：肯定）、制御ポート＃ｂは、リクエストＢのエントリのステータスフラグを「２」にする（ｓｔａｔｕｓ＝２）（ステップＳ３０６）。
【０１００】
メモリアクセス制御回路１３８は、リクエストＡについてデータ転送要求を二次キャッシュ制御部１４へ送信する（ステップＳ３０７）。
【０１０１】
その後、メモリアクセス制御回路１３８は、リクエストＡについてのデータ転送要求に対する応答データをキャッシュＲＡＭ１３４に登録する（ステップＳ３０８）。その後、処理は、ステップＳ３０３に戻る。
【０１０２】
これに対して、リクエストＢがキャッシュヒットしない場合（ステップＳ３０５：否定）、大小比較器１３７は、リクエストＡの要素番号がリクエストＢの要素番号より小さいか否か判定する（ステップＳ３０９）。
【０１０３】
リクエストＡの要素番号がリクエストＢの要素番号よりも小さい場合（ステップＳ３０９：肯定）、メモリアクセス制御回路１３８は、リクエストＡについてデータ転送要求を二次キャッシュ制御部１４へ送信する（ステップＳ３１０）。
【０１０４】
その後、メモリアクセス制御回路１３８は、リクエストＡについてのデータ転送要求に対する応答データをキャッシュＲＡＭ１３４に登録する（ステップＳ３１１）。その後、処理は、ステップＳ３０３に戻る。
【０１０５】
これに対して、リクエストＢの要素番号がリクエストＡの要素番号よりも小さい場合（ステップＳ３０９：否定）、メモリアクセス制御回路１３８は、リクエストＢについてデータ転送要求を二次キャッシュ制御部１４へ送信する（ステップＳ３１２）。
【０１０６】
その後、メモリアクセス制御回路１３８は、リクエストＢについてのデータ転送要求に対する応答データをキャッシュＲＡＭ１３４に登録する（ステップＳ３１３）。その後、処理は、ステップＳ３０３に戻る。
【０１０７】
一方、リクエストＡがキャッシュヒットした場合（ステップＳ３０４：肯定）、ヒット判定回路１３６は、リクエストＢがキャッシュヒットしたか否かを判定する（ステップＳ３１４）。リクエストＢがキャッシュヒットしない場合（ステップＳ３１４：否定）、制御ポート＃ａは、リクエストＡのエントリのステータスフラグを「２」にする（ｓｔａｔｕｓ＝２）（ステップＳ３１５）。
【０１０８】
メモリアクセス制御回路１３８は、リクエストＢについてデータ転送要求を二次キャッシュ制御部１４へ送信する（ステップＳ３１６）。
【０１０９】
その後、メモリアクセス制御回路１３８は、リクエストＢについてのデータ転送要求に対する応答データをキャッシュＲＡＭ１３４に登録する（ステップＳ３１７）。その後、処理は、ステップＳ３０３に戻る。
【０１１０】
これに対して、リクエストＢがキャッシュヒットした場合（ステップＳ３１４：肯定）、制御ポート＃ａは、リクエストＡのエントリのステータスフラグを「２」にする（ｓｔａｔｕｓ＝２）。また、制御ポート＃ｂは、リクエストＢのエントリのステータスフラグを「２」にする（ｓｔａｔｕｓ＝２）（ステップＳ３１８）。
【０１１１】
以上に説明したように、本実施例に係る演算処理装置は、インダイレクトアクセス処理において、１つの命令から複数のキャッシュアクセスリクエストを取り出し、パイプライン数ずつ順に取り出したキャッシュ命令アクセスリクエストを制御ポートに送る。これにより、インダイレクトアクセスを行う場合の命令数を抑えることができ、命令制御部の処理負荷を軽減することができる。
【０１１２】
また、命令制御部とキャッシュ制御部との間のバスなどの増加を抑えることができ、回路規模を小さく抑えることができる。また、回路規模の制限による並列に処理するキャッシュアクセスリクエストの数の制限を回避することができる。
【０１１３】
さらに、各リクエスト番号の要素番号の大小によりデータ転送要求の処理順の調停を行うので、命令番号が同じでも、適切にキャッシュアクセスリクエストを処理していくことができる。また、１つの命令に含まれるキャッシュアクセスリクエストの全ての処理が完了した後に、キャッシュ制御部から命令制御部へとリクエスト完了通知が送られるので、１つの命令についてのキャッシュアクセス処理の完了を適切に通知することができる。
【実施例２】
【０１１４】
次に、実施例２について説明する。本実施例に係る演算処理装置は、キャッシュアクセスリクエストを要素番号の若い順に処理していくことが実施例１と異なる。本実施例に係る演算処理装置及びキャッシュ制御部も図１及び図２で表される。以下では、実施例１と同様の各部の機能については説明を省略する。
【０１１５】
まず、ヒット判定回路１３５及び１３６について説明するが、いずれも同じ機能を有するので、ここでは、ヒット判定回路１３５を例に説明する。
【０１１６】
ヒット判定回路１３５は、パイプライン１３２に投入されたリクエストについてキャッシュヒットの判定を行う。ヒットしない場合、ヒット判定回路１３５は、実施例１と同様のデータ転送要求の調停処理の下にデータ転送要求を行う。そして、メモリアクセス制御部１３８により応答データがキャッシュＲＡＭ１３４に登録されると、ヒット判定回路１３５は、リクエストの再投入をリクエストの投入元の制御ポート３０に指示する。
【０１１７】
一方、キャッシュヒットした場合、ヒット判定回路１３５は、キャッシュヒットしたリクエストに対応する制御ポート３０が有するエントリから、そのリクエストがインダイレクトアクセスか否かを判定する。インダイレクトアクセスでなければ、ヒット判定回路１３５は、そのままキャッシュヒットしたリクエストのロード・ストア処理を行う。そして、ヒット判定回路１３５は、処理したリクエストの処理完了をリクエストの投入元の制御ポート３０に通知する。
【０１１８】
これに対して、インダイレクトアクセスの場合、ヒット判定回路１３５は、キャッシュヒットしたリクエストに対応する制御ポート３０が有するエントリから、そのリクエストの要素番号が「０」か否かを判定する。要素番号が「０」の場合、ヒット判定回路１３５は、そのリクエストの要素番号から１つ前の番号のリクエストのステータスフラグを参照する。
【０１１９】
ステータスフラグが「２」の場合、１つ前の番号のリクエストの処理が完了済みであるので、ヒット判定回路１３５は、キャッシュヒットしたリクエストのロード・ストア処理を行う。そして、ヒット判定回路１３５は、処理したリクエストの処理完了をリクエストの投入元の制御ポート３０に通知する。
【０１２０】
ステータスフラグが「２」でない場合、１つ前の番号のリクエストの処理が完了していないので、ヒット判定回路１３５は、キャッシュヒットしたリクエストのロード・ストア処理は行わずにそのリクエストの再投入をリクエストの投入元の制御ポート３０へ指示する。
【０１２１】
制御ポート管理部１３１は、リクエストの処理完了の通知をヒット判定回路１３５又は１３６から受けると、通知されたリクエストのエントリからインダイレクトアクセスか否かを判定する。そのリクエストがインダイレクトアクセスでなければ、そのまま、リクエスト完了応答を命令制御部１１に通知する。その後、制御ポート管理部１３１は、そのクエストのエントリのステータスフラグを「０」に変更させる。
【０１２２】
一方、そのリクエストがインダイレクトアクセスの場合、制御ポート管理部１３１は、そのリクエストの要素番号が、そのリクエストが含まれる命令に含まれるキャッシュアクセスリクエストの要素数と同じか否かを判定する。以下では、リクエストが含まれる命令を、単に「命令」という。要素数と同じ、すなわち、そのリクエストの要素番号が命令が有するリクエストの要素番号の中で一番大きい番号の場合、制御ポート管理部１３１は、リクエスト完了応答を命令制御部１１に通知する。
【０１２３】
これに対して、そのリクエストの要素番号が命令の要素数と異なる場合、制御ポート管理部１３１は、その命令に含まれるリクエストで要素番号が要素数と同じリクエストの処理が完了するまで、そのリクエストについての処理を一時停止する。そして、要素番号が要素数と同じリクエストの処理の完了通知をヒット判定回路１３５又は１３６から受信すると、制御ポート管理部１３１は、リクエスト完了通知を命令制御部１１へ送信する。その後、制御ポート管理部１３１は、その命令に含まれる全リクエストのエントリのステータスフラグを「０」に変更させる。
【０１２４】
次に、図１０を参照して、本実施例に係る演算処理装置による命令処理の流れを説明する。図１０は、実施例２に係る演算処理装置による命令処理のフローチャートである。以下では、ヒット判定回路１３５とヒット判定回路１３６とを区別せずに、「ヒット判定回路１４０」という。
【０１２５】
命令制御部１１は、命令からリクエストを取得し、取得したリクエストを制御ポート３０に発行する（ステップＳ４０１）。
【０１２６】
制御ポート３０は、リクエストを受信する（ステップＳ４０２）。そして、制御ポート３０は、受信したリクエストのエントリのステータスフラグを「１」にする（ｓｔａｔｕｓ＝１）（ステップＳ４０３）。
【０１２７】
次に、制御ポート３０は、リクエストをパイプライン１３０に投入する（ステップＳ４０４）。
【０１２８】
ヒット判定回路１４０は、リクエストがキャッシュヒットしたか否かを判定する（ステップＳ４０５）。キャッシュヒットしない場合（ステップＳ４０５：否定）、メモリアクセス制御部１３８は、データ転送要求を二次キャッシュ制御部１４へ送信する（ステップＳ４０６）。そして、メモリアクセス制御部１３８は、二次キャッシュ制御部１４から応答データを受信し、受信した応答データをキャッシュＲＡＭ１３４に登録する（ステップＳ４０７）。その後、ヒット判定回路１４０は、リクエストの再投入を制御ポート３０へ通知する。制御ポート３０は、ステップＳ４０４へ戻る。
【０１２９】
これに対して、キャッシュヒットした場合（ステップＳ４０５：肯定）、ヒット判定回路１４０は、リクエストがインダイレクトアクセスでない（ｉｎｄｉｒｅｃｔ＝０）か否かを判定する（ステップＳ４０８）。インダイレクトアクセスでない場合（ステップＳ４０８：肯定）、ヒット判定回路１４０は、ステップＳ４１２へ進む。
【０１３０】
一方、インダイレクトアクセスの場合（ステップＳ４０８：否定）、ヒット判定回路１４０は、リクエストの要素番号が「０」か否かを判定する（ステップＳ４０９）。リクエストの要素番号が「０」の場合（ステップＳ４０９：肯定）、ヒット判定回路１４０は、ステップＳ４１２へ進む。
【０１３１】
これに対して、リクエストの要素番号が「０」でない場合（ステップＳ４０９：否定）、ヒット判定回路１４０は、リクエストの要素番号から１を減算した値（要素番号−１）を有する要素番号のステータスフラグを参照する（ステップＳ４１０）。そして、ヒット判定回路１４０は、ステータスフラグが「２」（ｓｔａｔｕｓ＝２）か否かを判定する（ステップＳ４１１）。ステータスフラグが「２」の場合（ステップＳ４１１：肯定）、ヒット判定回路１４０は、ステップＳ４１２に進む。一方、ステータスフラグが「１」の場合（ステップＳ４１１：否定）、ヒット判定回路１４０は、リクエストの再投入を制御ポート３０へ通知する。制御ポート３０は、ステップＳ４０４へ戻る。
【０１３２】
そして、ヒット判定回路１４０は、ロード・ストア処理を実行する（ステップＳ４１２）。
【０１３３】
そして、ヒット判定回路１４０は、リクエストの処理完了を制御ポート３０へ通知する。制御ポート３０は、リクエストの処理完了の通知を受けて、該当するリクエストのエントリのステータスフラグを「２」に変更する（ｓｔａｔｕｓ＝２）（ステップＳ４１３）。
【０１３４】
制御ポート管理部１３１は、ステータスフラグが「２」に変更されると、そのリクエストがインダイレクトアクセスでないか否か、すなわち、インダイレクトアクセスか否かを示すフラグが「０」（ｉｎｄｉｒｅｃｔ＝０）か否かを判定する（ステップＳ４１４）。リクエストがインダイレクトアクセスでない場合（ステップＳ４１４：肯定）、制御ポート管理部１３１は、ステップＳ４１７へ進む。
【０１３５】
これに対して、リクエストがインダイレクトアクセスである場合（ステップＳ４１４：否定）、制御ポート管理部１３１は、そのリクエストの要素番号が、そのリクエストを含む命令のキャッシュアクセスリクエストの要素数と同じか否かを判定する（ステップＳ４１５）。リクエストの要素番号が要素数と同じ場合（ステップＳ４１５：肯定）、制御ポート管理部１３１は、そのリクエストに関するリクエスト完了応答を命令制御部１１へ送信する（ステップＳ４１７）。
【０１３６】
一方、リクエストの要素番号が要素数と異なる場合（ステップＳ４１５：否定）、制御ポート管理部１３１は、要素数が要素番号と一致するリクエスト、すなわち、最も要素番号が大きいリクエストについてのリクエスト完了応答を出力するまで待機する（ステップＳ４１６）。
【０１３７】
その後、制御ポート管理部１３１は、リクエスト完了応答に対応するリクエストのエントリのステータスフラグを「０」にする指示を制御ポート３０へ送信する。制御ポート３０は、制御ポート管理部１３１からの指示を受けて、指示されたリクエストのステータスフラグを「０」にする（ｓｔａｔｕｓ＝０）（ステップＳ４１８）。
【０１３８】
以上に説明したように、本実施例に係る演算処理装置は、要素番号が若いリクエストから処理していく。これにより、要素番号が命令の要素数と一致するリクエストの処理が完了した時点で、その命令に含まれる全てのリクエストの処理が完了したことが確定される。そのため、演算処理装置は、命令に含まれる全てのリクエストのステータスを確認を行わずにリクエスト完了応答を送信するか否かを判定でき、処理の簡略化及び回路の簡素化を実現できる。
【符号の説明】
【０１３９】
１  ＣＰＵ
２  メモリ
１１  命令制御部
１２  演算制御部
１３  キャッシュ制御部
１４  二次キャッシュ制御部
１５  メモリ制御部
３０  制御ポート
１３０，１３２，１３３  パイプライン
１３１  制御ポート管理部
１３４  キャッシュＲＡＭ
１３５，１３６，１４０  ヒット判定回路
１３７  大小比較器
１３８  メモリアクセス制御回路
【図１】
2015210655.tif 000003
【図２】
2015210655.tif 000004
【図３】
2015210655.tif 000005
【図４】
2015210655.tif 000006
【図５】
2015210655.tif 000007
【図６】
2015210655.tif 000008
【図７】
2015210655.tif 000009
【図８】
2015210655.tif 000010
【図９】
2015210655.tif 000011
【図１０】
2015210655.tif 000012