(57)【要約】      （修正有）【課題】処理性能を向上させる演算処理装置、情報処理装置及び演算処理装置の制御方法を提供する。【解決手段】シフトレジスタ１２１は、１つ以上の宛先を有するトランザクションを複数蓄積する。第１段階候補選出部２０１は、各トランザクションの宛先の状態を基に、シフトレジスタに蓄積されたトランザクションの中から第１トランザクションを選択する。第１段階発行許可部２０２は、第１段階候補選出部により選択された第１トランザクションが発行可能であるか否かを判定する。第２段階発行管理部２０３は、第１段階発行許可部により第１トランザクションが発行可能でないと判定された場合、第１トランザクションの宛先を基に第２トランザクションを選択する。セレクタ２０４は、第１トランザクションが発行可能の場合、第１トランザクションを発行し、第１トランザクションが発行可能でない場合、第２トランザクションを発行する。【選択図】図５
2019215763.tif 000002
【特許請求の範囲】
【請求項１】
１つ以上の宛先を有するトランザクションを複数蓄積する蓄積部と、
各前記トランザクションの前記宛先の状態を基に、前記蓄積部に蓄積された前記トランザクションの中から第１トランザクションを選択する第１選択部と、
前記第１選択部により選択された前記第１トランザクションが発行可能であるか否かを判定する判定部と、
前記判定部により前記第１トランザクションが発行可能でないと判定された場合、前記第１トランザクションの前記宛先を基に第２トランザクションを選択する第２選択部と、
前記第１トランザクションが発行可能の場合、前記第１トランザクションを発行し、前記第１トランザクションが発行可能でない場合、前記第２トランザクションを発行する発行部と
を備えたことを特徴とする演算処理装置。
【請求項２】
前記蓄積部は、取得した順番を維持して前記トランザクションを蓄積し、
前記第１選択部は、前記蓄積部に蓄積された前記トランザクションのうち、少なくとも１つの前記宛先が受信可能状態であり、且つ、最も取得した順の若番の前記第１トランザクションを選択し、
前記判定部は、前記第１トランザクションの前記宛先の全てが前記受信可能状態であれば前記第１トランザクションが発行可能であると判定し、
前記第２選択部は、前記第１トランザクションよりも取得した順の老番であり、前記宛先が全て前記受信可能状態であり、且つ、前記宛先が前記第１トランザクションと重ならない第２トランザクションを選択する
ことを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記蓄積部は、取得した順番を維持して一端から他端へ向けて前記トランザクションを並べて蓄積し、
前記第１選択部は、前記蓄積部に蓄積された前記トランザクションのうち、少なくとも１つの前記宛先が受信可能状態であり、且つ、最も前記一端側に存在する前記第１トランザクションを選択し、
前記第２選択部は、前記第１トランザクションよりも前記他端側に存在し、前記宛先が全て前記受信可能状態であり、且つ、前記宛先が前記第１トランザクションと重ならない第２トランザクションを選択する
ことを特徴とする請求項２に記載の演算処理装置。
【請求項４】
前記第１選択部、前記判定部及び前記第２選択部は、前記宛先が前記トランザクションの処理を行っていなければ受信可能状態であると判定することを特徴とする請求項２に記載の演算処理装置。
【請求項５】
前記第１選択部、前記判定部及び前記第２選択部は、前記宛先が有するキューが備えるエントリの全てにデータが保存されていない場合、受信可能であると判定することを特徴とする請求項２に記載の演算処理装置。
【請求項６】
前記第２選択部は、前記蓄積部に格納された各前記トランザクションを前記第１トランザクションとした場合のそれぞれについて、先行トランザクションの選択を行っておき、前記第１選択部により選択された前記第１トランザクションに応じた前記先行トランザクションを前記第２トランザクションとして選択することを特徴とする請求項１〜３のいずれか一つに記載の演算処理装置。
【請求項７】
前記トランザクションは、記憶装置に対してアクセスを行うアクセス部を宛先とするメモリアクセス命令であることを特徴とする請求項１又は２に記載の演算処理装置。
【請求項８】
記憶装置と、
複数の演算処理部と、
前記記憶装置に接続される制御部と、
前記制御部を介して前記記憶装置に対してアクセスを行い、各前記演算処理部とデータを送受信する複数のアクセス部と、
１つ以上の前記アクセス部を宛先とするトランザクションを発行する命令発行部とを有する情報処理装置であって、
前記命令発行部は、
１つ以上の宛先を有するトランザクションを複数蓄積する蓄積部と、
各前記トランザクションの前記宛先の状態を基に、前記蓄積部に蓄積された前記トランザクションの中から第１トランザクションを選択する第１選択部と、
前記第１選択部により選択された前記第１トランザクションが発行可能であるか否かを判定する判定部と、
前記判定部により前記第１トランザクションが発行可能でないと判定された場合、前記第１トランザクションの前記宛先を基に第２トランザクションを選択する第２選択部と、
前記第１トランザクションが発行可能の場合、前記第１トランザクションを発行し、前記第１トランザクションが発行可能でない場合、前記第２トランザクションを発行する発行部とを備えた
ことを特徴とする情報処理装置。
【請求項９】
１つ以上の宛先を有するトランザクションを複数蓄積し、
各前記トランザクションの前記宛先の状態を基に、蓄積された前記トランザクションの中から第１トランザクションを選択し、
選択した前記第１トランザクションが発行可能であるか否かを判定し、
前記第１トランザクションが発行可能でないと判定された場合、前記第１トランザクションの前記宛先を基に第２トランザクションを選択を選択し、
前記第１トランザクションが発行可能の場合、前記第１トランザクションを発行し、前記第１トランザクションが発行可能でない場合、前記第２トランザクションを発行する
ことを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、情報処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
主記憶装置であるメモリ及びメモリアクセスコントローラ（ＭＡＣ：Memory  Access  Controller）ユニットと各々が演算処理部である複数のコアとが１対多結合されたマルチコア演算装置がある。各コアは、レジスタファイル及び演算実行部（ＥＵ：Execution  Unit）を有する。さらに、各コアは、それぞれに対応するロードストアユニット（ＬＳＵ：Load  Store  Unit）に接続される。各ロードストアユニットは、１つの命令発行ユニット（ＩＵ：Instruction  Unit）に接続される。そして、搭載されたコア数が多い場合、回路実装上の都合から主記憶へのアクセスバスを複数コア間で共有することが一般的に行われる。
【０００３】
命令発行ユニットは、上位層からメモリに対するデータの読み出し又は書き込み命令であるメモリアクセス命令を受け取る。そして、命令発行ユニットは、取得したメモリアクセス命令をデコードして、メモリアクセス命令をリクエストとしてロードストアユニットに発行する。ロードストアユニットは、発行されたメモリアクセス命令に応じてメモリとコアが有するレジスタファイルとの間におけるデータの読み出し又は書き込みを行う。レジスタファイルは、ロードストアユニットから取得したデータを格納する。演算実行部は、レジスタファイルに格納されたデータを用いて演算を行う。
【０００４】
メモリアクセス命令は１つの命令で複数のロードストアユニットにもリクエストを発行することができる。また、メモリアクセスを行っているロードストアユニットはビジー状態となり、そのロードストアユニットは、新たなリクエストを受け取ることができない。
【０００５】
このようなマルチコア演算装置において、全てのロードストアユニットを効率よく利用するために、メモリアクセス命令はプログラムにおける命令の出現順序とは異なるアウトオブオーダーで実行される。具体的には、命令発行ユニットが、全てのロードストアユニットからのビジー信号を監視しつつ、メモリアクセス命令のリクエストを適切な順番に入れ替えてロードストアユニットに発行する。
【０００６】
このアウトオブオーダーによるメモリアクセス命令の実行の実装には、追越付命令キューが用いられる。追越付命令キューとは以下のようなキューである。追越付命令キューは、命令発行ユニット内の命令デコーダから取得したメモリアクセス命令をリクエストとしてシフトレジスタに保持する。そして、追越付命令キューは、全てのロードストアユニットのビジー信号を基にシフトレジスタに蓄えたリクエストから適切なリクエストを選択してロードストアユニットに発行する。追越付命令キューでは単純なキューとは異なり、後から到着したリクエストが、先に到着したリクエストを追い越すことができる。追越付命令キューは、例えば、Ｋ段のシフトレジスタ、追越回路及び２つのＫ入力のセレクタを有する。
【０００７】
Ｋ段のシフトレジスタには、先頭から順にリクエストが隙間なく並べられる。追越回路は、Ｋ段のシフトレジスタに格納されたリクエストのうち、宛先のロードストアユニットが全てビジー状態でないという発行許可条件を満たすリクエストの中で最も先頭のリクエストを発行リクエストとして選んで発行する。Ｋ段のシフトレジスタは、発行されたリクエストを削除し、先頭からエントリとしてのレジスタが空かないようにリクエストを先頭側に詰める。
【０００８】
ここで、キューの制御技術として、選択可能なコマンドの範囲を示す情報を付加してコマンドをキューに格納し、選択可能なコマンドの範囲を示す情報を基に、性能保証期間内に発行すべきコマンドを優先して選択して発行する従来技術がある。また、メモリアクセス要求を分割し、分割されたメモリアクセス要求のうち発行可能フラグが設定されたものを優先的に処理し、分割されたメモリアクセス要求の一方が処理されると他方に発行可能フラグを設定する従来技術がある。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１４−２１９５２号公報
【特許文献２】特開２０１１−１３８３５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、従来の追越回路を用いた場合、あるリクエストが長時間又は永久に発行されない状態となるライブロックという問題が発生する。例えば、ロードストアユニット００〜０３がある場合で説明する。シフトレジスタの先頭にロードストアユニット０２及び０３を宛先とする第１リクエストが格納されている。この時、ロードストアユニット０３がビジーであれば、第１リクエストは発行されない。そして第１リクエストの後ろにあるロードストアユニット０３を宛先としないリクエストの中からもっとも先頭側にあるリクエストが選択される。このとき、宛先がロードストアユニット０１及び０２であるリクエストが選択されたとする。その後、ロードストアユニット０１及び０２がリクエスト処理中に、ロードストアユニット０３のメモリアクセスが完了してビジー状態が解除されると、新たにリクエストが選択される。しかし、この場合、ロードストアユニット０２がビジー状態であるので、第１リクエストは発行されず、第１リクエストの後ろにあるロードストアユニット０３を宛先としないリクエストの中からもっとも先頭側にあるリクエストが選択される。このように、第１リクエストが発行されない状態が長時間続くおそれがある。この状態がライブロックである。特に、宛先として全てのロードストアユニットが指定されているブロードキャストリクエストは容易にライブロックを発生させる。ライブロックが発生した場合、特定のメモリアクセス要求が処理されなくなり、そのメモリアクセス要求に関する処理が停滞してしまい、演算処理装置の処理性能が全体的に見て低下するおそれがある。
【００１１】
この点、選択可能なコマンドの範囲を示す情報を用いて発行するコマンドを選択する従来技術を用いても、性能保証期間内に発行すべきコマンドでなければ、そのコマンドは次々に後回しにされてしまい、ライブロックが発生するおそれがある。また、発行可能フラグが設定されたメモリアクセス要求を優先的に処理する従来技術であっても、発行可能フラグが設定されていない要求が次々に後回しにされてライブロックが発生するおそれがある。
【００１２】
開示の技術は、上記に鑑みてなされたものであって、処理性能を向上させる演算処理装置、情報処理装置及び演算処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
本願の開示する演算処理装置、情報処理装置及び演算処理装置の制御方法の一つの態様において、蓄積部は、１つ以上の宛先を有するトランザクションを複数蓄積する。第１選択部は、各前記トランザクションの前記宛先の状態を基に、前記蓄積部に蓄積された前記トランザクションの中から第１トランザクションを選択する。判定部は、前記第１選択部により選択された前記第１トランザクションが発行可能であるか否かを判定する。第２選択部は、前記判定部により前記第１トランザクションが発行可能でないと判定された場合、前記第１トランザクションの前記宛先を基に第２トランザクションを選択する。発行部は、前記第１トランザクションが発行可能の場合、前記第１トランザクションを発行し、前記第１トランザクションが発行可能でない場合、前記第２トランザクションを発行する。
【発明の効果】
【００１４】
１つの側面では、本発明は、処理性能を向上させることができる。
【図面の簡単な説明】
【００１５】
【図１】図１は、実施例に係る情報処理装置のハードウェア構成の一例を表す図である。
【図２】図２は、マルチコア演算装置のブロック図である。
【図３】図３は、命令発行ユニットのブロック図である。
【図４】図４は、追越付命令キューの詳細を表す図である。
【図５】図５は、追越回路のブロック図である。
【図６】図６は、選択される発行リクエストを説明するための図である。
【図７】図７は、追越回路の回路図である。
【図８】図８は、実施例に係る命令発行ユニットによるリクエストの発行処理の全体のフローチャートである。
【図９】図９は、実施例に係る追越付命令キューによるリクエストの発行処理のフローチャートである。
【図１０】図１０は、８段のシフトレジスタを有する追越付命令キューの回路構成を表す図である。
【図１１】図１１は、リクエストのフォーマットの一例を表す図である。
【図１２】図１２は、ロードリクエストの処理を説明するための図である。
【図１３】図１３は、ストアリクエストの処理を説明するための図である。
【図１４】図１４は、８段のシフトレジスタを有する追越付命令キューにおける追越回路のブロック図である。
【図１５】図１５は、８段のシフトレジスタの場合の第１段階候補選出部の回路図である。
【図１６Ａ】図１６Ａは、第２段階発行選択部２３１Ａの回路図である。
【図１６Ｂ】図１６Ｂは、第２段階発行選択部２３１Ｂの回路図である。
【図１６Ｃ】図１６Ｃは、第２段階発行選択部２３１Ｃの回路図である。
【図１６Ｄ】図１６Ｄは、第２段階発行選択部２３１Ｄの回路図である。
【図１６Ｅ】図１６Ｅは、第２段階発行選択部２３１Ｅの回路図である。
【図１６Ｆ】図１６Ｆは、第２段階発行選択部２３１Ｆの回路図である。
【図１６Ｇ】図１６Ｇは、第２段階発行選択部２３１Ｇの回路図である。
【図１７】図１７は、８段のシフトレジスタに格納されたリクエストの選択処理の一例を説明するための図である。
【発明を実施するための形態】
【００１６】
以下に、本願の開示する演算処理装置、情報処理装置及び演算処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する演算処理装置、情報処理装置及び演算処理装置の制御方法が限定されるものではない。
【実施例】
【００１７】
図１は、実施例に係る情報処理装置のハードウェア構成の一例を表す図である。本実施例に係る情報処理装置１は、図１に示すように、ＣＰＵ（Central  Processing  Unit）１１、メモリ１２、ＩＯコントローラ１３、ハードディスク１４及びＰＣＩ（Peripheral  Component  Interconnect）デバイス１５を有する。
【００１８】
演算処理装置であるＣＰＵ１１は、メモリ１２、ＩＯコントローラ１３とバスで接続される。ＣＰＵ１１は、ＩＯコントローラ１３経由でハードディスク１４に格納された各種プログラムを読み出し、メモリ１２上に展開して実行することで、ＯＳ（Operating  System）や各種アプリケーションを動作させる。
【００１９】
さらに、ＣＰＵ１１は、アプリケーションの実行における特定の処理をアクセラレータであるＰＣＩデバイス１５に行わせる。例えば、ＣＰＵ１１は、アプリケーションを実行する場合の一部の演算処理をＰＣＩデバイス１５に行わせる。具体的には、ＣＰＵ１１により実行されるソフトウェアが、ＩＯコントローラ１３を介して演算に用いるデータとともに演算命令をＰＣＩデバイス１５へ送信する。
【００２０】
ＩＯコントローラ１３は、ハードディスク１４及びＰＣＩデバイス１５に接続される。ＩＯコントローラ１３は、ＣＰＵ１１からの指示を受けて、ハードディスク１４及びＰＣＩデバイス１５を制御する。そして、ＩＯコントローラ１３は、ハードディスク１４及びＰＣＩデバイス１５とＣＰＵ１１との通信を中継する。ここでは、ＩＯデバイスとしてハードディスク１４及びＰＣＩデバイス１５を例に説明するが、ＩＯコントローラ１３には、他のＩＯデバイスが接続されてもよい。
【００２１】
ハードディスク１４は、ＯＳや各種アプリケーションなどの様々なプログラムを格納する。ＰＣＩデバイス１５は、アクセラレータである。ＰＣＩデバイス１５は、例えば、ＣＰＵ１１からの演算処理の実行要求を受けて、指定された演算処理を実行する。ＰＣＩデバイス１５は、マルチコア演算装置１００を有する。
【００２２】
図２は、マルチコア演算装置のブロック図である。図２に示すように、マルチコア演算装置１００は、命令発行ユニット１０１、複数のロードストアユニット１０２、複数のコア１０３、ＭＡＣ（Memory  Access  Controller）１０４及びメモリ１０５を有する。このマルチコア演算装置１００が、「情報処理装置」の一例にあたる。
【００２３】
コア１０３は、演算実行部１３１及びレジスタファイル１３２を有する。また、本実施例では、コア１０３は、ロードストアユニット１０２と１対１で対応する。レジスタファイル１３２は、メモリ１０５から読み出されたメモリリードデータを対応するロードストアユニット１０２から受信して格納する。演算実行部１３１は、レジスタファイル１３２に格納されたメモリリードデータを用いて演算を実行する。このコア１０３が、「演算処理部」の一例にあたる。
【００２４】
ＭＡＣ１０４は、ロードストアユニット１０２に格納されたメモリアクセス命令のリクエストを取得して処理する。例えば、メモリアクセス命令のリクエストがデータを読み出すロードリクエストの場合、ＭＡＣ１０４は、そのロードリクエストで指定されたメモリ１０５のアドレスからメモリリードデータを読み出す。そして、ＭＡＣ１０４は、読み出したメモリリードデータを用いてメモリリードコンプリーションを生成する。その後、ＭＡＣ１０４は、メモリリードコンプリーションをロードストアユニット１０２へ送信する。このＭＡＣ１０４が、「制御部」の一例にあたる。
【００２５】
メモリ１０５は、記憶装置である。メモリ１０５は、ＭＡＣ１０４の制御にしたがって、指定されたアドレスからのデータの読み出し及び指定されたアドレスに対するデータの書き込みを行う。このメモリ１０５が、「記憶装置」の一例にあたる。
【００２６】
ロードストアユニット１０２は、複数のコア１０３のそれぞれに対応させて配置される。そして、ロードストアユニット１０２は、対応する各コア１０３に接続される。さらに、ロードストアユニット１０２は、ＭＡＣ１０４に接続される。このロードストアユニット１０２が、「アクセス部」の一例にあたる。
【００２７】
ロードストアユニット１０２は、メモリアクセス命令のリクエストの入力を命令発行ユニット１０１から受ける。ここで、本実施例では、ロードストアユニット１０２が保持できるリクエストが１つの場合で説明する。ロードストアユニット１０２は、リクエストのメモリアクセスが完了するまでそのリクエストを保持する。このメモリアクセス命令のリクエストが、「トランザクション」の一例にあたる。
【００２８】
ロードストアユニット１０２は、取得したメモリアクセス命令にしたがい、ＭＡＣ１０４を介してメモリ１０５にアクセスを行う。より具体的には、ロードストアユニット１０２は、メモリアクセス命令がロード命令の場合、メモリ１０５からロード命令で指定されたデータを読み出し、レジスタファイル１３２へ出力する。また、メモリアクセス命令がストア命令の場合、ロードストアユニット１０２は、ストア命令で指定されたデータをメモリ１０５に格納する。そして、ロードストアユニット１０２は、リクエストのメモリアクセスが完了すると、そのリクエストを削除する。
【００２９】
また、この場合、ロードストアユニット１０２は、保持できるリクエストが１つであるので、メモリアクセスを行っている場合、ビジー状態となり、新たにリクエストを受け付けることはない。そして、メモリアクセスが完了すると、ロードストアユニット１０２は、ビジー状態が解消されたことを表す信号を命令発行ユニット１０１へ出力する。このロードストアユニット１０２が、「アクセス部」の一例にあたる。
【００３０】
ただし、保持できるリクエストが複数の場合、ロードストアユニット１０２は、保持できる上限のリクエストを保持した状態になるとビジー状態となりリクエストの受信を拒否する状態となる。より具体的には、ロードストアユニット１０２は、リクエストを格納するキューを有する。そして、そのキューが備えるエントリの数でロードストアユニット１０２が保持し得るリクエストの数が決まる。すなわち、ロードストアユニット１０２は、自己が有するキューが備えるエントリの全てにリクエストが保持されていない場合、言い換えれば、キューが備えるエントリのいずれかがリクエストを保持していなければ、ビジー状態ではなくリクエストの受信可能状態である。
【００３１】
命令発行ユニット１０１は、例えば、ＣＰＵ１１により実行されるソフトウェアから発行されたメモリアクセス命令を取得する。そして、命令発行ユニット１０１は、取得したメモリアクセス命令をリクエストとして蓄積する。その後、命令発行ユニット１０１は、各リクエストの宛先のロードストアユニット１０２の状態を確認する。そして、命令発行ユニット１０１は、各リクエストの宛先のロードストアユニット１０２及びその状態を基に、発行するリクエストを選択する。その後、命令発行ユニット１０１は、選択したリクエストを宛先のロードストアユニット１０２へ出力する。この命令発行ユニット１０１が、「命令発行部」の一例にあたる。
【００３２】
次に、図３を参照して命令発行ユニットの詳細について説明する。図３は、命令発行ユニットのブロック図である。図３に示すように、命令発行ユニット１０１は、命令デコーダ１１１、追越付命令キュー１１２及びクレジット管理回路１１３を有する。
【００３３】
命令デコーダ１１１は、受信したメモリアクセス命令をデコードして、メモリアクセスのリクエストを生成する。そして、命令デコーダ１１１は、リクエストを追越付命令キュー１１２へ出力する。
【００３４】
クレジット管理回路１１３は、各ロードストアユニット１０２が受け取れるリクエスト数を表すクレジットを記憶するレジスタをロードストアユニット１０２毎に有する。そして、クレジット管理回路１１３は、いずれのロードストアユニット１０２へもリクエストを発行していない段階で各レジスタを初期化する。本実施例では、ロードストアユニット１０２は１つのリクエストを保持可能であるので、クレジット管理回路１１３は、各ロードストアユニット１０２のクレジットを１にする。クレジットが１のロードストアユニット１０２は、ビジー状態ではなく、リクエストを受け入れ可能な状態である。
【００３５】
その後、クレジット管理回路１１３は、発行したリクエストの宛先の情報を追越付命令キュー１１２から受ける。そして、クレジット管理回路１１３は、発行したリクエストの宛先のロードストアユニット１０２のクレジットを１つデクリメントする。本実施例では、クレジット管理回路１１３は、発行したリクエストの宛先のロードストアユニット１０２のクレジットを０にする。クレジットが０のロードストアユニット１０２は、ビジー状態であり、リクエストの受け入れを拒否する状態である。
【００３６】
また、クレジット管理回路１１３は、ロードストアユニット１０２からビジー状態が解消されたことを表す信号を受信すると、クレジットを１つインクリメントする。このロードストアユニット１０２から送信されるビジー状態が解消されたことを表す信号を、クレジットリリース信号と言う。ここで、クレジットリリース信号は、ロードストアユニット１０２がアクセスを完了したとき、１サイクルＨｉｇｈとなる信号である。
【００３７】
そして、クレジット管理回路１１３は、ロードストアユニット１０２のビジー状態を表す信号を追越付命令キュー１１２へ出力する。具体的には、クレジット管理回路１１３は、レジスタの値が０であるロードストアユニット１０２についてＨｉｇｈの値を表すビジー信号を出力する。また、クレジット管理回路１１３は、レジスタの値が１であるロードストアユニット１０２についてＬｏｗの値を表すビジー信号を出力する。これにより、クレジット管理回路１１３は、各ロードストアユニット１０２のビジー状態を追越付命令キュー１１２へ通知する。
【００３８】
ここで、本実施例では、追越付命令キュー１１２は、クレジット管理回路１１３を用いて各ロードストアユニット１０２のビジー状態を把握した。ただし、追越付命令キュー１１２は、各ロードストアユニット１０２のビジー状態を他の方法で把握してもよい。例えば、追越付命令キュー１１２は、受け入れ可能なリクエストの数を示すレベル通知を各ロードストアユニット１０２から受信して、そのレベル通知を基に各ロードストアユニット１０２のビジー状態を把握してもよい。
【００３９】
次に、図４を参照して、追越付命令キュー１１２について説明する。図４は、追越付命令キューの詳細を表す図である。追越付命令キュー１１２は、シフトレジスタ１２１、追越回路１２２、セレクタ１２３及び１２４、並びに、多段ＡＮＤ回路１２５を有する。この追越付命令キュー１１２が、「演算処理装置」の一例にあたる。
【００４０】
シフトレジスタ１２１は、Ｋ段のシフトレジスタである。すなわち、シフトレジスタ１２１は、Ｋ個のレジスタ２１１を有する。レジスタ２１１は、本実施例では、図４に向かって右端にあるレジスタ２１１を先頭として左に向けて順に並べられる。レジスタ２１１には、命令デコーダ１１１から出力されたリクエストは、リクエストを保持する最後尾のレジスタ２１１の１つ後ろのレジスタ２１１に格納される。すなわち、シフトレジスタ１２１は、リクエストを先頭のレジスタ２１１から古い順に格納する。
【００４１】
シフトレジスタ１２１は、後述する追越回路１２２により発行リクエストとして選択されたリクエストをレジスタ２１１から削除する。そして、シフトレジスタ１２１は、レジスタ２１１に保持されるリクエストが常に先頭のレジスタ２１１から到来順に隙間なく並ぶようにリクエストの格納位置を更新する。すなわち、シフトレジスタ１２１は、リクエストの発行によりリクエストを保持しないレジスタ２１１が発生した場合、リクエストが削除されたレジスタ２１１より後方の各レジスタ２１１が保持するリクエストを１つ先頭側のレジスタ２１１に順次移動する。これにより、レジスタ２１１は、リクエストをレジスタ２１１の先頭側に詰める。
【００４２】
レジスタ２１１は、領域２１２〜２１４を有する。領域２１２には、リクエストが格納されているか否かを表すｖａｌｉｄ信号が格納される。ｖａｌｉｄ信号は、シフトレジスタ１２１がリクエストを保持している場合にＨｉｇｈとなり、リクエストを保持していない場合にＬｏｗとなる。領域２１３には、リクエストのデータが格納される。領域２１４には、リクエストの宛先のロードストアユニット１０２のビットマップ、言い換えれば、リクエストの宛先のロードストアユニット１０２の情報が格納される。このシフトレジスタ１２１が、「蓄積部」の一例にあたる。
【００４３】
追越回路１２２は、各レジスタ２１１に格納されたｖａｌｉｄ信号及び宛先のロードストアユニット１０２の情報の入力を受ける。さらに、追越回路１２２は、各ロードストアユニット１０２のビジー状態の情報の入力をクレジット管理回路１１３から受ける。そして、追越回路１２２は、各レジスタ２１１のｖａｌｉｄ信号、各レジスタ２１１に格納されたリクエストの宛先のロードストアユニット１０２の情報及び各ロードストアユニット１０２のビジー状態を基に発行リクエストを決定する。そして、追越回路１２２は、セレクタ１２３及び１２４に発行リクエストを選択させ発行させる。さらに、追越回路１２２は、発行リクエストの情報をシフトレジスタ１２１へ出力する。
【００４４】
次に、図５を参照して、追越回路１２２について説明する。図５は、追越回路のブロック図である。ここでは、ロードストアユニット１０２がＮ個存在する場合で説明する。追越回路１２２は、第１段階候補選出部２０１、第１段階発行許可部２０２、第２段階発行管理部２０３、セレクタ２０４及びＡＮＤ回路２０５を有する。
【００４５】
図５において、ｐ＿ｂｕｓｙ［Ｎ−１：０］と表した信号は、ビットマップで表されるＮ個のロードストアユニット１０２のビジー状態を表すビジー信号である。ｐ＿ｏｂ０［Ｎ−１：０］，ｐ＿ｏｂ１［Ｎ−１：０］，・・・，ｐ＿ｏｂ｛Ｋ−１｝［Ｎ−１：０］と表した信号は、各レジスタ２１１に保持されたリクエストの宛先のロードストアユニット１０２をビットマップ形式で表した信号である。ここで、ｏｂ０〜ｏｂ｛Ｋ−１｝は、ｏｂ０を先頭のレジスタ２１１として先頭から順に並ぶＫ個のレジスタ２１１に割り当てた符号である。例えば、ｐ＿ｏｂ｛ｉ｝［Ｎ−１：０］は、先頭からｉ＋１番目のレジスタ２１１に保持されたリクエストの宛先のロードストアユニット１０２を表す信号である。
【００４６】
第１段階候補選出部２０１は、宛先のロードストアユニット１０２が１つでもビジー状態でないという第１段階候補選出条件を予め保持する。そして、第１段階候補選出部２０１は、ｐ＿ｂｕｓｙ［Ｎ−１：０］及びｐ＿ｏｂ０［Ｎ−１：０］〜ｐ＿ｏｂ｛Ｋ−１｝［Ｎ−１：０］の入力を受ける。
【００４７】
第１段階候補選出部２０１は、宛先のロードストアユニット１０２が１つでもビジー状態でないという第１段階候補選出条件を満たすリクエストの中で最も先頭側のリクエストを第１段階候補として選択する。すなわち、第１段階候補選出部２０１は、第１段階候補選出条件を満たすリクエストの中で、取得した順の最も若番のリクエストを第１段階候補として選択する。そして、第１段階候補選出部２０１は、第１段階候補を選択するビットマップの信号を出力する。ここで、第１段階候補選出条件を満たすリクエストが存在しない場合、第１段階候補選出部２０１は、いずれのリクエストも選択しない信号、すなわちＮビット全てが０のビットマップの信号を出力する。この第１段階候補選出部２０１が、「第１選択部」の一例にあたる。そして、第１段階候補のリクエストが、「第１トランザクション」の一例にあたる。
【００４８】
第１段階発行許可部２０２は、宛先のロードストアユニット１０２が全てビジー状態でないという第１段階発行許可条件を有する。すなわち、第１段階発行許可条件は、第１段階候補が発行可能であるか否かを判定するための条件である。そして、第１段階発行許可部２０２は、ｐ＿ｂｕｓｙ［Ｎ−１：０］及びｐ＿ｏｂ０［Ｎ−１：０］〜ｐ＿ｏｂ｛Ｋ−１｝［Ｎ−１：０］の入力を受ける。また、第１段階発行許可部２０２は、第１段階候補選出部２０１からの第１段階候補を指定するビットマップの信号の入力を受ける。さらに、第１段階発行許可部２０２は、取得した信号で指定された第１段階候補のリクエストの宛先をｐ＿ｏｂ０［Ｎ−１：０］〜ｐ＿ｏｂ｛Ｋ−１｝［Ｎ−１：０］から取得する。そして、第１段階発行許可部２０２は、ｐ＿ｂｕｓｙ［Ｎ−１：０］を用いて第１段階候補のリクエストの宛先が全てビジー状態か否かを判定する。
【００４９】
第１段階候補のリクエストが第１段階発行可能許可条件を満たす、すなわち、第１段階候補のリクエストの宛先が全てビジー状態でなければ、第１段階発行許可部２０２は、第１段階候補リクエストの発行を許可する信号を出力する。この場合、第１段階候補選出部２０１から出力され、セレクタ２０４へ向かう第１弾段階候補を選択する信号は、第１段階発行許可部２０２から出力された第１段階候補リクエストの発行を許可する信号により有効となり、セレクタ２０４へ入力される。
【００５０】
これに対して、第１段階候補のリクエストが第１段階発行可能許可条件を満たさない、すなわち、第１段階候補のリクエストの宛先の何れかがビジー状態の場合、第１段階発行許可部２０２は、第１段階候補リクエストの発行を無効にする信号を出力する。この場合、第１段階候補選出部２０１から出力され、セレクタ２０４へ向かう第１弾段階候補を選択する信号は、第１段階発行許可部２０２から出力された信号により無効となり、セレクタ２０４へ無効な信号が入力される。この第１段階発行許可部２０２が、「判定部」の一例にあたる。
【００５１】
第２段階発行管理部２０３は、第１段階候補よりも後方のリクエストで、宛先のロードストアユニット１０２が全てビジー状態でなく、且つ、第１段階候補と宛先のロードストアユニット１０２が重ならないという第２段階発行選択条件を有する。第１段階候補よりも後方のリクエストとは、言い換えれば、第１段階候補よりも取得した順の老番のリクエストである。第２段階発行管理部２０３は、ｐ＿ｂｕｓｙ［Ｎ−１：０］及びｐ＿ｏｂ０［Ｎ−１：０］〜ｐ＿ｏｂ｛Ｋ−１｝［Ｎ−１：０］の入力を受ける。
【００５２】
第２段階発行管理部２０３は、ｐ＿ｂｕｓｙ［Ｎ−１：０］を用いて、第１段階候補よりも後方のリクエストで、宛先のロードストアユニット１０２が全てビジー状態でないリクエストを抽出する。次に、第２段階発行管理部２０３は、ｐ＿ｏｂ０［Ｎ−１：０］〜ｐ＿ｏｂ｛Ｋ−１｝［Ｎ−１：０］から、第１段階候補のリクエスト及び抽出したリクエストの宛先のロードストアユニット１０２を特定する。そして、第２段階発行管理部２０３は、抽出したリクエストの中から、宛先のロードストアユニット１０２が第１段階候補のリクエストと重ならないリクエストをさらに抽出する。その後、第２段階発行管理部２０３は、抽出したリクエストのうち最も先頭側のリクエストを発行リクエストとする。そして第２段階発行管理部２０３は、発行リクエストを選択するビットマップの信号を出力する。この第２段階発行管理部２０３が、「第２選択部」の一例にあたる。この第２段階発行管理部２０３が発行するリクエストとしたリクエストが、「第２トランザクション」の一例にあたる。
【００５３】
ここで、本実施例に係る第２段階発行管理部２０３の動作をより詳細に説明する。本実施例では、第２段階発行管理部２０３は、第１段階候補としてＫ個のリクエストのうちの各リクエストが選ばれた場合の全てのケースを先読みし、それぞれのケースに対応する第２段階発行選択処理を並列に実行する。そして、第２段階発行管理部２０３は、第１段階候補が選出された後に、それに対応した第２段階発行選択の結果を選択する。第２段階発行管理部２０３は、Ｋ−１個の第２段階発行選択部２３１及びセレクタ２３２を有する。
【００５４】
図面に向かい一番上の第２段階発行選択部２３１は、先頭のリクエストが第１段階候補の場合の第２段階発行選択を行う。また、図面に向かい上から２番目の第２段階発行選択部２３１は、先頭から２番目のリクエストが第１段階候補の場合の第２段階発行選択を行う。このように順番に、各第２段階発行選択部２３１は、１つ上の第２段階発行選択部２３１が第１段階候補としたリクエストの１つ後方のリクエストが第１段階候補の場合の第２段階発行選択を行う。そして、一番下の第２段階発行選択部２３１は、最後尾から２番目のリクエストが第１段階候補の場合について第２段階発行選択処理を実行する。
【００５５】
ここでは、先頭からｍ番目のリクエストが第１段階候補の場合の第２段階発行選択部２３１について説明する。第２段階発行選択部２３１は、先頭からｍ番目から最後までのレジスタ２１１に格納されたリクエストの宛先を表す信号、すなわちｐ＿ｏｂ｛ｍ−１｝［Ｎ−１：０］〜ｐ＿ｏｂ｛ｋ−１｝［Ｎ−１：０］を取得する。以下では、先頭からｍ番目から最後までのレジスタ２１１に格納されたリクエストをそれぞれｍ−１〜ｋ−１番目のリクエストという。さらに、第２段階発行選択部２３１は、各ロードストアユニット１０２のビジー状態を表す信号であるｐ＿ｂｕｓｙ［Ｎ−１：０］を取得する。
【００５６】
第２段階発行選択部２３１は、ｐ＿ｏｂ｛ｍ−２｝［Ｎ−１：０］〜ｐ＿ｏｂ｛ｋ−１｝［Ｎ−１：０］及びｐ＿ｂｕｓｙ［Ｎ−１：０］を基にｍ−２〜ｋ−１番目のリクエストの中から宛先のロードストアユニット１０２が全てビジー状態でないリクエストを選択する。次に、第２段階発行選択部２３１は、ｐ＿ｏｂ｛ｍ−１｝［Ｎ−１：０］を用いて選択したリクエストの中から、ｍ−１番目のリクエストと宛先のロードストアユニット１０２が重ならないリクエストを抽出する。そして、第２段階発行選択部２３１は、抽出したリクエストのうち最も先頭に近いリクエストを発行リクエストとする。その後、第２段階発行選択部２３１は、発行リクエストを表すビットマップの信号を出力する。
【００５７】
各第２段階発行選択部２３１の出力は、第１段階候補選択部から出力された第１段階候補を表す信号により、第１段階候補選出部２０１が決定した第１段階候補を使用した場合の信号が有効とされ、他の信号は無効とされてセレクタ２３２へ入力される。
【００５８】
セレクタ２３２は、各第２段階発行選択部２３１から出力された信号で有効の信号をセレクタ２０４へ出力する。すなわち、セレクタ２３２は、第１段階候補選出部２０１が決定した第１段階候補よりも後方のリクエストで、第２段階発行選択条件を満たす先頭のリクエストをセレクタ２０４へ出力する。
【００５９】
セレクタ２０４は、第１段階候補選出部２０１から出力された第１段階候補のリクエストを選択する信号で第１段階発行許可部２０２により有効無効が設定された信号の入力を受ける。また、セレクタ２０４は、第１段階候補よりも後方のリクエストで、第２段階発行選択条件を満たす先頭のリクエストを選択する信号の入力を第２段階発行管理部２０３から受ける。
【００６０】
第１段階候補選出部２０１から出力された信号が有効の場合、セレクタ２０４は、第１段階候補選出部２０１により発行リクエストとされたリクエスト、すなわち、第１段階候補のリクエストを選択する信号をＡＮＤ回路２０５へ出力する。これに対して、第１段階候補選出部２０１から出力された信号が無効の場合、セレクタ２０４は、第２段階発行管理部２０３により発行リクエストとされたリクエストを選択する信号をＡＮＤ回路２０５へ出力する。すなわち、セレクタ２０４は、第２段階発行選択条件を満たす先頭のリクエストを選択する信号をＡＮＤ回路２０５へ出力する。このセレクタ２０４が、「発行部」の一例にあたる。
【００６１】
ＡＮＤ回路２０５は、発行リクエストを選択するビットマップで表される信号の入力をセレクタ２０４から受ける。また、有効なレジスタ２１１をビットマップで表すｖａｌｉｄ信号の入力をシフトレジスタ１２１から受ける。そして、ＡＮＤ回路２０５は、入力された２つの信号の論理積を求めて、算出結果を出力する。すなわち、ＡＮＤ回路２０５は、発行リクエストを格納するレジスタ２１１が有効である場合、発行リクエストを選択する信号を出力する。
【００６２】
例えば、図６に示す宛先を有するリクエストがシフトレジスタ１２１に格納された場合で説明する。図６は、選択される発行リクエストを説明するための図である。図６の表３０１は、各レジスタ２１１に格納されたリクエストの宛先を表す表である。宛先ＬＳＵビットマップは、各リクエストの宛先のロードストアユニット１０２のビットマップを表す。ここでは、リクエスト＃０〜＃１５が、存在する場合で説明する。また、表３０２は、各ロードストアユニット１０２のビジー状態を表す図である。ここで、［０］〜［Ｎ−１］はそれぞれ、Ｎ個のロードストアユニット１０２に０番〜Ｎ−１番までの番号を振った場合の番号を表す。
【００６３】
この場合、表３０２のビジー信号で示されるように宛先のロードストアユニット１０２のうち［Ｎ−１］番のロードストアユニット１０２がビジーである。第１段階候補選出部２０１は、リクエスト＃０は宛先が［Ｎ−１］番のロードストアユニット１０２で、他に宛先はないので、リクエスト＃０を第１段階候補に選ばない。次に、第１段階候補選出部２０１は、リクエスト＃１は宛先が［Ｎ−１］及び［Ｎ−２］番のロードストアユニット１０２であることから、リクエスト＃１の宛先のロードストアユニット１０２の少なくとも１つはビジー状態ではないと判定する。そこで、第１段階候補選出部２０１は、リクエスト＃１を第１段階候補とする。
【００６４】
第１段階発行許可部２０２は、第１段階候補選出部２０１により第１段階候補とされたリクエスト＃１の宛先に［Ｎ−１］番のロードストアユニット１０２が入っていることから、第１段階候補であるリクエスト＃１の発行を許可しない。
【００６５】
そこで、第２段階発行管理部２０３は、リクエスト＃１より後方のリクエスト＃２〜＃１５の中から、宛先のロードストアユニット１０２が全てビジー状態でなく、且つ、リクエスト＃１と宛先が重ならないリクエストの中で最も先頭のリクエストを選択する。ここで、例えば、リクエスト＃２〜＃Ｋ−３の宛先のロードストアユニット１０２が全てリクエスト＃１と重なる場合を考える。この場合、リクエスト＃１４は、宛先のロードストアユニット１０２は［Ｎ−３］番のロードストアユニット１０２であり、［Ｎ−１］番のロードストアユニット１０２は、リクエスト＃１の宛先になっていない。そこで、第２段階発行管理部２０３は、リクエスト＃１４を発行リクエストとして選択する。
【００６６】
この場合、第１段階候補であるリクエスト＃１の発行は無効とされているので、セレクタ２０４は、リクエスト＃１４を発行リクエストとして選択する。そして、リクエスト＃１４を格納するＫ−２番のレジスタ２１１が有効であれば、ＡＮＤ回路２０５は、リクエスト＃１４を選択する信号を出力する。
【００６７】
ここで、図７を参照して、追越回路１２２の動作をさらに詳細に説明する。図７は、追越回路の回路図である。ここでは、Ｋ個のレジスタ２１１をレジスタｏｂ｛ｉ｝（ｉ＝０〜Ｋ−１）として説明する。
【００６８】
第１段階候補選出部２０１の論理回路４０１は、ｉ番目のレジスタ２１１であるレジスタｏｂ｛ｉ｝に保持されたリクエストが、第１段階候補選出条件を満たす場合、ｐ＿ｓｅｌ＿１ｓｔ＿ｐｒｅ［Ｋ−１：０］の第ｉビットをＨｉｇｈにする。ｐ＿ｓｅｌ＿１ｓｔ＿ｐｒｅ［Ｋ−１：０］は、各リクエストが第１段階候補選出条件を満たすか否かを表すＫビットの信号である。
【００６９】
第１段階候補選出条件を満たすレジスタｏｂ｛ｉ｝が無い場合、論理回路４０１は、全てのビットがＬｏｗのｐ＿ｓｅｌ＿１ｓｔ＿ｐｒｅ［Ｋ−１：０］を出力する。そこで、第１段階候補選出部２０１は、真理表４０２にしたがい第１段階候補を選択する信号であるｐ＿ｓｅｌ＿１ｓｔ［Ｋ−１：０］の全ビットをＬｏｗとして出力する。この場合、第１段階発行許可部２０２からの出力信号であるｐ＿ｓｅｌ＿１ｓｔ＿ｖａｌも全ビットがＬｏｗになる。また、第２段階発行選択部２３１の出力信号であるｐ＿ｓｅｌ２ｎｄ｛ｉ｝［Ｋ−１：０］の全てにおいて全ビットがＬｏｗになるので、セレクタ２３２からの出力信号であるｐ＿ｓｅｌ＿２ｎｄ［Ｋ−１：０］も全ビットがＬｏｗになる。そのため、セレクタ２０４からの出力信号であるｐ＿ｓｅｌ＿ｐｒｅ［Ｋ−１０］の全ビットもＬｏｗになる。
【００７０】
一方、ｉ番目のレジスタ２１１であるレジスタｏｂ｛ｉ｝が、第１段階候補選出条件を満たし且つ最も先頭に近いレジスタ２１１である場合、真理表４０２により、ｐ＿ｓｅｌ＿１ｓｔ［Ｋ−１：０］の第ｉビットがＨｉｇｈとなり他が全てＬｏｗとなる。
【００７１】
第１段階発行許可部２０２は、論理回路４０３によりレジスタｏｂ０〜ｏｂ｛Ｋ−１｝に保持される各リクエストが第１段階発行許可条件を満たすか否かを判定する。論理回路４０３は、Ｋ本の出力経路を用いてＫビットの信号を出力する。論理回路４０３は、レジスタｏｂ｛ｉ｝に保持されるリクエストの全ての宛先がビジー状態でなければｉ番目のビットをＨｉｇｈにする。
【００７２】
セレクタ４０４は、論理回路４０３からの出力信号の入力を受けて、判定結果をｐ＿ｓｅｌ＿１ｓｔ［Ｋ−１：０］にしたがって選択し、ｐ＿ｓｅｌ＿１ｓｔ＿ｖａｌとして出力する。したがって、第１段階発行許可部２０２は、第１段階候補が第１段階発行許可条件を満たす場合、ｐ＿ｓｅｌ＿１ｓｔ＿ｖａｌをＨｉｇｈとし、第１段階候補が第１段階発行許可条件を満たさない場合、ｐ＿ｓｅｌ＿１ｓｔ＿ｖａｌをＬｏｗとする。
【００７３】
ｐ＿ｓｅｌ＿１ｓｔ＿ｖａｌがＨｉｇｈの場合、セレクタ２０４は、ｐ＿ｓｅｌ＿１ｓｔ［Ｋ−１：０］をｐ＿ｓｅｌ＿ｐｒｅ［Ｋ−１：０］として出力する。
【００７４】
これに対して、ｐ＿ｓｅｌ＿１ｓｔ＿ｖａｌをＬｏｗの場合、第２段階発行管理部２０３による発行リクエストの選択である第２段階発行選択に移る。第２段階発行管理部２０３は、Ｋ−１個の第２段階発行選択部２３１及びセレクタ２３２を有する。第２段階発行選択部２３１は、上から、レジスタｏｂ０が有するリクエストが第１段階候補の場合の選択論理回路、レジスタｏｂ１が有するリクエストが第１段階候補の場合の選択論理回路を表す。そして、第２段階発行選択部２３１は、その後順にレジスタｏｂ｛ｋ−２｝が有するリクエストが第１段階候補の場合の選択論理回路までが並ぶ。
【００７５】
各第２段階発行選択部２３１は、論理回路４０５の構成や保持する真理表４０６の内容が異なるが、機能としては同様の機能を有する。そこで、レジスタｏｂ０のリクエストが第１段階候補の場合の選択論理回路である第２段階発行選択部２３１を例に説明する。
【００７６】
論理回路４０５は、各ロードストアユニット１０２のビジー状態を表すビットマップであるビジー信号のｐ＿ｂｕｓｙ［Ｎ−１：０］とレジスタｏｂ０に格納されたリクエストの宛先を表すビットマップであるｐ＿ｏｂ０［Ｎ−１：０］との論理和を求める。次に、論理回路４０５は、求めた論理和と他のレジスタｏｂ１〜ｏｂ｛Ｋ−１｝に格納されたリクエストの宛先のそれぞれとの論理積を求める。そして、論理回路４０５は、求めた論理積を反転させ、全てのビットの論理積を求める。そして、論理回路４０５は、レジスタｏｂ１〜ｏｂ｛Ｋ−１｝それぞれに格納されたリクエスト毎に、レジスタｏｂ０に格納されたリクエストの宛先と宛先が重ならない場合、Ｈｉｇｈの値を出力する。また、論理回路４０５は、レジスタｏｂ１〜ｏｂ｛Ｋ−１｝それぞれに格納されたリクエスト毎に、レジスタｏｂ０に格納されたリクエストの宛先と宛先が重なる場合、Ｌｏｗの値を出力する。これにより、論理回路４０５は、レジスタｏｂ１〜ｏｂ｛Ｋ−１｝のそれぞれについて求めた論理積を表すビットマップであるｐ＿ｓｅｌ＿２ｎｄ０＿ｐｒｅ［Ｋ−１：０］を出力する。ｐ＿ｓｅｌ＿２ｎｄ０＿ｐｒｅ［Ｋ−１：０］は、レジスタｏｂ０が保持するリクエストが第１段階候補である場合の第２段階発行選択の条件を満たすビットマップの信号である。論理回路４０５と真理表４０６とは、Ｋ−１ビット幅の信号線で接続される。
【００７７】
真理表４０６は、論理回路４０５から出力されたｐ＿ｓｅｌ＿２ｎｄ０＿ｐｒｅ［Ｋ−１：０］の中で、Ｈｉｇｈの値を有する最も先頭側のリクエストを選択するための表である。第２段階発行選択部２３１は、真理表４０６を用いて、レジスタｏｂ１〜ｏｂ｛Ｋ−１｝が有するリクエストであって、第２段階発行選択条件を満たし且つ最も先頭側に存在するリクエストを表す信号であるｐ＿ｓｅｌ＿２ｎｄ０［Ｋ−１：０］を出力する。ここで、条件を満たすリクエストが存在しない場合、第２段階発行選択部２３１は、真理表４０６にしたがって全てのビットがＬｏｗの信号であるｐ＿ｓｅｌ＿２ｎｄ０［Ｋ−１：０］を出力する。
【００７８】
セレクタ２３２は、第２段階発行選択部２３１から出力されたｐ＿ｓｅｌ＿２ｎｄ０［Ｋ−１：０］〜ｐ＿ｓｅｌ＿２ｎｄ｛Ｋ−２｝［Ｋ−１：０］をｐ＿ｓｅｌ＿１ｓｔ［Ｋ−１：０］にしたがって選択し、ｐ＿ｓｅｌ＿２ｎｄ［Ｋ−１：０］を出力する。ｐ＿ｓｅｌ＿２ｎｄ［Ｋ−１：０］は、第１段階候補選出部２０１により決定された第１候補よりも後方のレジスタ２１１に格納されたリクエストで、第２段階発行選択条件を満たし且つ最も先頭側に存在するリクエストを表す信号である。
【００７９】
セレクタ２０４は、第１段階発行許可部２０２が有効を表すｐ＿ｓｅｌ＿１ｓｔ＿ｖａｌを出力した場合、第１段階候補選出部２０１が発行したｐ＿ｓｅｌ＿１ｓｔ［Ｋ−０：０］をｐ＿ｓｅｌ＿ｐｒｅ［Ｋ−１：０］として出力する。また、セレクタ２０４は、第１段階発行許可部２０２が無効を表すｐ＿ｓｅｌ＿１ｓｔ＿ｖａｌを出力した場合、第２段階発行管理部２０３が発行したｐ＿ｓｅｌ＿２ｎｄ［Ｋ−１：０］をｐ＿ｓｅｌ＿ｐｒｅ［Ｋ−１：０］として出力する。
【００８０】
ＡＮＤ回路２０５は、各レジスタｏｂ０〜ｏｂ｛Ｋ−１｝の有効無効を表すビットマップであるｖａｌｉｄ信号の入力をシフトレジスタ１２１から受ける。そして、ＡＮＤ回路２０５は、セレクタ２０４から出力されたｐ＿ｓｅｌ＿ｐｒｅ［Ｋ−１：０］とｖａｌｉｄ信号との論理積をｐ＿ｓｅｌ＿ｐｒｅ［Ｋ−１：０］をｐ＿ｓｅｌ［Ｋ−１：０］として出力する。すなわち、ＡＮＤ回路２０５は、ｐ＿ｓｅｌ＿ｐｒｅ［Ｋ−１：０］が示すリクエストを格納するレジスタ２１１が有効であれば、ｐ＿ｓｅｌ＿ｐｒｅ［Ｋ−１：０］をｐ＿ｓｅｌ［Ｋ−１：０］として出力する。
【００８１】
図４に戻って追越付命令キュー１１２の動作についての説明を続ける。多段ＡＮＤ回路１２５は、追越回路１２２から出力された発行リクエストを選択する信号の入力を受ける。そして、多段ＡＮＤ回路１２５は、入力された信号の全てのビットの論理積を求める。その後、多段ＡＮＤ回路１２５は、求めた論理積を出力する。ここで、追越回路１２２から出力された発行リクエストを選択する信号でいずれかのリクエストが選択された場合、多段ＡＮＤ回路１２５は、有効を表すＨｉｇｈの信号を出力する。また、追越回路１２２から出力された発行リクエストを選択する信号でいずれのリクエストも選択されていない場合、多段ＡＮＤ回路１２５は、無効を表すＬｏｗの信号を出力する。
【００８２】
セレクタ１２４は、シフトレジスタ１２１の各レジスタ２１１から出力された各リクエストの宛先のロードストアユニット１０２の情報が入力される。さらに、セレクタ１２４は、追越回路１２２から出力された発行リクエストを選択する信号の入力を受ける。そして、セレクタ１２４は、発行リクエストを選択する信号にしたがって、発行リクエストの宛先のロードストアユニット１０２を選択する。
【００８３】
セレクタ１２３は、シフトレジスタ１２１の各レジスタ２１１から出力された各リクエストのデータの入力を受ける。さらに、セレクタ１２３は、追越回路１２２から出力された発行リクエストを選択する信号の入力を受ける。そして、セレクタ１２３は、発行リクエストを選択する信号にしたがって、発行リクエストに格納されたデータを選択する。多段ＡＮＤ回路１２５が有効を表す信号を出力した場合、セレクタ１２３により選択されたデータは、セレクタ１２４により選択された宛先のロードストアユニット１０２へ出力される。ここで、図４では例示的にロードストアユニット１０２を１つ記載したが、実際には、宛先は複数のロードストアユニット１０２の場合もある。
【００８４】
次に、図８を参照して、実施例に係る命令発行ユニット１０１によるリクエストの発行処理の全体の流れについて説明する。図８は、実施例に係る命令発行ユニットによるリクエストの発行処理の全体のフローチャートである。
【００８５】
命令デコーダ１１１は、メモリアクセス命令をデコードする。そして、命令デコーダ１１１は、デコードしたメモリアクセス命令をリクエストとして追越付命令キュー１１２へ送信し、追越付命令キュー１１２のシフトレジスタ１２１の最後尾にリクエストを書き込む（ステップＳ１）。
【００８６】
追越付命令キュー１１２は、クレジット管理回路１１３で管理される各ロードストアユニット１０２のクレジットを確認して各ロードストアユニット１０２のビジー状態を取得する。そして、追越付命令キュー１１２は、シフトレジスタ１２１が有する各レジスタ２１１に格納されたリクエストの宛先を確認し、追い越し可能か否かの判定を基に、リクエストが発行可能か否かを判定する（ステップＳ２）。リクエストが発行可能でない場合（ステップＳ２：否定）、追越付命令キュー１１２は、リクエストが発行可能となるまで待機する。
【００８７】
これに対して、リクエストが発行可能な場合（ステップＳ２：肯定）、追越付命令キュー１１２は、発行するリクエストを選択する（ステップＳ３）。ここで、図８のフローチャートでは、動作を分かり易くするため、ステップＳ２とステップＳ３とを分離して記載したが、リクエストの発行の可否の判定と発行するリクエストの選択とは同時に行われてもよい。
【００８８】
追越付命令キュー１１２は、選択したリクエストをそのリクエストの宛先のロードストアユニット１０２へ発行する（ステップＳ４）。
【００８９】
さらに、追越付命令キュー１１２は、発行したリクエストをシフトレジスタ１２１から削除する（ステップＳ５）。この時、追越付命令キュー１１２は、リクエストが削除されたレジスタ２１１よりも後方のレジスタ２１１にリクエストが格納されている場合、リクエストを先頭側に詰めてレジスタ２１１に格納し直す。
【００９０】
クレジット管理回路１１３は、追越付命令キュー１１２が出力したリクエストの宛先の情報を取得する。そして、クレジット管理回路１１３は、リクエストの宛先のロードストアユニット１０２のクレジットを１つデクリメントする。ここでは、ロードストアユニット１０２は保持できるリクエストが１つであるので、クレジット管理回路１１３で管理されるロードストアユニット１０２の情報は、ビジー状態に遷移する（ステップＳ６）。
【００９１】
発行されたリクエストの宛先の各ロードストアユニット１０２は、リクエストの処理を開始する（ステップＳ７）。
【００９２】
その後、発行されたリクエストの宛先の各ロードストアユニット１０２は、リクエストの処理を完了する（ステップＳ８）。そして、各ロードストアユニット１０２は、クレジットリリース信号をクレジット管理回路１１３へ出力する。
【００９３】
クレジット管理回路１１３は、発行されたリクエストの宛先の各ロードストアユニット１０２からクレジットリリース信号の入力を受ける。そして、クレジット管理回路１１３は、宛先のロードストアユニット１０２のクレジットを１つデクリメントする。これにより、クレジット管理回路１１３で管理されるロードストアユニット１０２の情報は、ビジー状態が解除される（ステップＳ９）。クレジット管理回路１１３で管理される各ロードストアユニット１０２のビジー状態を表す情報が更新されることにより、ステップＳ２で行われる追越付命令キュー１１２によるリクエストの発行可能か否かの判定が変化する。
【００９４】
次に、図９を参照して、本実施例に係る追越付命令キュー１１２によるリクエストの発行処理の流れについて説明する。図９は、実施例に係る追越付命令キューによるリクエストの発行処理のフローチャートである。
【００９５】
追越回路１２２の第１段階候補選出部２０１は、シフトレジスタ１２１の各段のレジスタ２１１に格納されたリクエストの中に、第１段階候補選出条件を満たすリクエストが存在するか否かを判定する（ステップＳ１１）。
【００９６】
第１段階候補選出条件を満たすリクエストが存在する場合（ステップＳ１１：肯定）、追越回路１２２の第１段階候補選出部２０１は、第１段階候補選出条件を満たすリクエストの内最も先頭のリクエストを第１段階候補として選択する（ステップＳ１２）。
【００９７】
次に、追越回路１２２の第１段階発行許可部２０２は、第１段階候補選出部２０１により選出された第１段階候補のリクエストが第１段階発行許可条件を満たすか否かを判定する（ステップＳ１３）。
【００９８】
第１段階候補のリクエストが第１段階発行許可条件を満たす場合（ステップＳ１３：肯定）、追越回路１２２のＡＮＤ回路２０５は、第１段階候補のリクエストを選択する信号を出力する。セレクタ１２３及び１２４、並びに、多段ＡＮＤ回路１２５は、第１段階候補のリクエストを選択する信号の入力を追越回路１２２から受けて、第１段階候補のリクエストをその宛先のロードストアユニット１０２に向けて出力する（ステップＳ１４）。
【００９９】
これに対して、第１段階候補のリクエストが第１段階発行許可条件を満たさない場合（ステップＳ１３：否定）、追越回路１２２の第２段階発行管理部２０３は、第２段階発行選択条件を満たすリクエストが存在するか否かを判定する（ステップＳ１５）。
【０１００】
第２段階発行選択条件を満たすリクエストが存在する場合（ステップＳ１５：肯定）、追越回路１２２の第２段階発行管理部２０３は、第２段階発行選択条件を満たすリクエストのうち最も先頭のリクエストを発行リクエストとして選択する。追越回路１２２のＡＮＤ回路２０５は、第２段階発行選択条件を満たすリクエストのうち最も先頭のリクエストを選択する信号を出力する。セレクタ１２３及び１２４、並びに、多段ＡＮＤ回路１２５は、第２段階発行選択条件を満たすリクエストのうち最も先頭のリクエストを選択する信号の入力を追越回路１２２から受ける。そして、セレクタ１２３及び１２４、並びに、多段ＡＮＤ回路１２５は、第２段階発行選択条件を満たすリクエストのうち最も先頭のリクエストをその宛先のロードストアユニット１０２に向けて出力する（ステップＳ１６）。
【０１０１】
一方、第１段階候補選出条件を満たすリクエストが存在しない場合（ステップＳ１１：否定）及び第２段階発行選択条件を満たすリクエストが存在しない場合（ステップＳ１５：否定）、追越付命令キュー１１２は、リクエストを発行しない（ステップＳ１７）。
【０１０２】
次に、図１０を参照して、シフトレジスタ１２１が８段の場合の追越付命令キュー１１２によるリクエスト発行処理の具体例について説明する。図１０は、８段のシフトレジスタを有する追越付命令キューの詳細を表す図である。ここでは、シフトレジスタ１２１が有する８段のレジスタ２１１をそれぞれレジスタｏｂ０〜ｏｂ７として説明する。また、ロードストアユニット１０２として、ロードストアユニット＃＃０〜＃＃３の４つ存在し、それぞれに対応するコア１０３として、コア＃＃＃０〜＃＃＃３の４つが存在する場合で説明する。
【０１０３】
シフトレジスタ１２１には、図１１に示すフォーマット５０を有するメモリアクセス命令のリクエストが入力される。図１１は、リクエストのフォーマットの一例を表す図である。ｏｐｅｃｏｄｅ［１：０］は、命令の種類を指定する領域である。ｏｐｅｃｏｄｅ［１：０］は、例えば、以下の２つの種類の命令を表す。ｏｐｅｃｏｄｅ［１：０］＝２’ｂ００は、メモリ１０５からコア１０３内部のレジスタファイル１３２にデータを転送するロードリクエストを表す。ｏｐｅｃｏｄｅ［１：０］＝２’ｂ０１は、コア１０３内部のレジスタファイル１３２からメモリ１０５にデータを転送するストアリクエストを表す。
【０１０４】
ｄｅｓｔＬＳＵ［３：０］は、宛先のロードストアユニット１０２をビットマップ形式で指定する領域である。ｄｅｓｔＬＳＵ［３：０］は、例えば、以下のように指定される。ｄｅｓｔＬＳＵ［３：０］＝４’ｂ０１０１は、宛先のロードストアユニット１０２としてロードストアユニット＃＃０及び＃＃２を指定する。また、ｄｅｓｔＬＳＵ［３：０］＝４’ｂ１１１０は、宛先のロードストアユニット１０２としてロードストアユニット＃＃１、＃＃２及び＃＃３を指定する。例えば、ロードストアユニット＃＃０が宛先に指定されると、そのロードストアユニット＃＃０に対応するコア１０３のレジスタファイル１３２とメモリ１０５との間でデータ転送が行われる。
【０１０５】
ＲｅｇＡｄｄｒ［１１：０］及びｌｅｎｇｔｈ［１１：０］の領域の値の組み合わせにより、転送対象のレジスタが指定される。ＲｅｇＡｄｄｒ［１１：０］が、開始レジスタアドレスを表す。また、ＲｅｇＡｄｄｒ［１１：０］の値にｌｅｎｇｔｈ［１１：０］の値を加えた値が、終了レジスタアドレスを表す。レジスタファイル１３２が有するレジスタのうち開始レジスタアドレスから終了レジスタアドレスまでに含まれるレジスタが転送対象のレジスタである。
【０１０６】
ＭｅｍＡｄｄｒ［３７：０］及びｌｅｎｇｔｈ［１１：０］の領域の値の組み合わせにより、転送対象のメモリ１０５のメモリアドレスが指定される。転送対象のメモリアドレスは、ロードストアユニット＃＃０〜＃＃３によって異なり、ロードストアユニット＃＃０〜＃＃３に対する転送対象のメモリアドレスは、例えば、次の開始メモリアドレスから終了メモリアドレスまでとなる。開始メモリアドレスは、ロードストアユニット＃＃０〜＃＃３のそれぞれの番号にｌｅｎｇｔｈ［１１：０］を乗算した値を、ＭｅｍＡｄｄｒ［３７：０］に加えた値となる。また、終了メモリアドレスは、開始メモリアドレスにｌｅｎｇｔｈ［１１：０］を加算した後に１を減算した値となる。
【０１０７】
ｏｐｅｃｏｄｅ［１：０］＝２’ｂ００、ｄｅｓｔＬＳＵ［３：０］＝４’ｂ０１０１、ＲｅｇＡｄｄｒ［１１：０］＝０ｘ０３０、ＭｅｍＡｄｄｒ［３７：０］＝０ｘ００＿０００１＿００００及びｌｅｎｇｔｈ［１１：０］＝０ｘ１００のリクエストについて説明する。このリクエストは、図１２のようなメモリアクセスを要求するロードリクエストである。図１２は、ロードリクエストの処理を説明するための図である。具体的には、このリクエストにより、コア＃＃＃０のレジスタファイル１３２Ａの０ｘ０３０番目から０ｘ１２Ｆ番目のレジスタにメモリ１０５上の０ｘ００＿０００１＿００００から０ｘ００＿０００１＿００ＦＦまでのデータが転送される。また、このリクエストにより、コア＃＃＃２のレジスタファイル１３２Ｃの０ｘ０３０番目から０ｘ１２Ｆ番目のレジスタにメモリ１０５上の０ｘ００＿０００１＿０２００から０ｘ００＿０００１＿０２ＦＦまでのデータが転送される。
【０１０８】
また、ｏｐｅｃｏｄｅ［１：０］＝２’ｂ０１、ｄｅｓｔＬＳＵ［３：０］＝４’ｂ１１１１、ＲｅｇＡｄｄｒ［１１：０］＝０ｘ２００、ＭｅｍＡｄｄｒ［３７：０］＝０ｘ００＿０００１＿００００及びｌｅｎｇｔｈ［１１：０］＝０ｘ１００のリクエストについて説明する。このリクエストは、図１３のようなメモリアクセスを要求するストアリクエストである。図１３は、ストアリクエストの処理を説明するための図である。具体的には、このリクエストにより、コア＃＃＃０のレジスタファイル１３２Ａの０ｘ２００番目から０ｘ２ＦＦ番目のレジスタのデータがメモリ１０５上の０ｘ００＿０００１＿００００から０ｘ００＿０００１＿００ＦＦに転送される。また、このリクエストにより、コア＃＃＃１のレジスタファイル１３２Ｂの０ｘ２００番目から０ｘ２ＦＦ番目のレジスタのデータがメモリ１０５上の０ｘ００＿０００１＿０１００から０ｘ００＿０００１＿０１ＦＦに転送される。また、このリクエストにより、コア＃＃＃２のレジスタファイル１３２Ｃの０ｘ２００番目から０ｘ２ＦＦ番目のレジスタのデータがメモリ１０５上の０ｘ００＿０００１＿０２００から０ｘ００＿０００１＿０２ＦＦに転送される。また、このリクエストにより、コア＃＃＃３のレジスタファイル１３２Ｄの０ｘ２００番目から０ｘ２ＦＦ番目のレジスタのデータがメモリ１０５上の０ｘ００＿０００１＿０３００から０ｘ００＿０００１＿０３ＦＦに転送される。
【０１０９】
図１０に戻って説明を続ける。シフトレジスタ１２１にリクエストが入力されると、各レジスタｏｂ０〜ｏｂ７のうちリクエストを保持する最後尾のレジスタの１つ後ろのレジスタに、ｐ＿ｒｅｑ＿ｖａｌ、ｐ＿ｒｅｑ＿ｄａｔａ［６７：０］、ｐ＿ｒｅｑ＿ｄｅｓｔ［３：０］が格納される。ｐ＿ｒｅｑ＿ｖａｌは、ｖａｌｉｄ信号である。また、ｐ＿ｒｅｑ＿ｄａｔａ［６７：０］は、リクエストのデータである。さらに、ｐ＿ｒｅｑ＿ｄｅｓｔ［３：０］は、リクエストの宛先のロードストアユニット１０２を表す情報である。ｐ＿ｒｅｑ＿ｄｅｓｔ［３：０］は、ｐ＿ｒｅｑ＿ｄａｔａ［６７：０］からｄｅｓｔＬＳＵ［３：０］に相当するｐ＿ｒｅｑ＿ｄａｔａ［６５：６２］を抜き出した情報である。以下では、各レジスタｏｂ０〜ｏｂ７が有するｐ＿ｒｅｑ＿ｖａｌを、それぞれｐ＿ｏｂ０＿ｖａｌ〜ｐ＿ｏｂ７＿ｖａｌとする。各レジスタｏｂ０〜ｏｂ７が有するｐ＿ｒｅｑ＿ｄａｔａ［６７：０］を、それぞれｐ＿ｏｂ０＿ｄａｔａ［６７：０］〜ｐ＿ｏｂ７＿ｄａｔａ［６７：０］とする。また、各レジスタｏｂ０〜ｏｂ７が有するｐ＿ｒｅｑ＿ｄｅｓｔ［３：０］を、それぞれｐ＿ｏｂ０［３：０］〜ｐ＿ｏｂ７［３：０］とする。
【０１１０】
追越回路１２２は、ロードストアユニット＃＃０〜＃＃３のビジー状態を表すｐ＿ｂｕｓｙ＿［３：０］をクレジット管理回路１１３から取得する。さらに、追越回路１２２は、レジスタｏｂ０〜ｏｂ７に格納された各リクエストの宛先を表す情報であるｐ＿ｏｂ０［３：０］ｐ＿ｏｂ１［３：０］、ｐ＿ｏｂ２［３：０］、・・・、ｐ＿ｏｂ７［３：０］を取得する。そして、追越回路１２２は、発行するリクエストを選出する。そして、追越回路１２２は、発行するリクエストを選択する信号であるｐ＿ｓｅｌ［７：０］を出力する。
【０１１１】
セレクタ１２３は、８つの入力経路を有する。セレクタ１２３は、それぞれの入力経路に、各レジスタｏｂ０〜ｏｂ７が保持するｐ＿ｏｂ０＿ｄａｔａ［６７：０］〜ｐ＿ｏｂ７＿ｄａｔａ［６７：０］の入力を受ける。また、セレクタ１２３は、ｐ＿ｓｅｌ［７：０］の入力を追越回路１２２から受ける。そして、セレクタ１２３は、ｐ＿ｓｅｌ［７：０］にしたがい、ｐ＿ｏｂ０＿ｄａｔａ［６７：０］〜ｐ＿ｏｂ７＿ｄａｔａ［６７：０］から１つを選択して、ｐ＿ｓｅｌ＿ｄａｔａ［６７：０］として出力する。ｐ＿ｓｅｌ＿ｄａｔａ［６７：０］のフォーマットも図１１のフォーマット５０により表される。
【０１１２】
セレクタ１２４は、８つの入力経路を有する。セレクタ１２４は、それぞれの入力経路に、各レジスタｏｂ０〜ｏｂ７が保持するｐ＿ｏｂ０［３：０］〜ｐ＿ｏｂ７［３：０］の入力を受ける。また、セレクタ１２４は、ｐ＿ｓｅｌ［７：０］の入力を追越回路１２２から受ける。そして、セレクタ１２４は、ｐ＿ｓｅｌ［７：０］にしたがい、ｐ＿ｏｂ０［３：０］〜ｐ＿ｏｂ７［３：０］から１つを選択して、ｐ＿ｓｅｌ＿ｄｅｓｔ［３：０］として出力する。
【０１１３】
次に、図１４を参照して、８段のシフトレジスタ１２１を有する追越付命令キュー１１２における追越回路１２２について説明する。図１４は、８段のシフトレジスタを有する追越付命令キューにおける追越回路のブロック図である。
【０１１４】
第１段階候補選出部２０１は、ｐ＿ｂｕｓｙ［３：０］をクレジット管理回路１１３から取得する。また、第１段階候補選出部２０１は、ｐ＿ｏｂ０［３：０］〜ｐ＿ｏｂ７［３：０］のそれぞれをレジスタｏｂ０〜ｏｂ７から取得する。第１段階候補選出部２０１は、第１段階候補選出条件を満たし且つ最も先頭側のリクエストを第１段階候補として選択する。
【０１１５】
例えば、第１段階候補選出部２０１は、図１５に示す論理回路４０１及び真理表４０２を有する。図１５は、８段のシフトレジスタの場合の第１段階候補選出部の回路図である。真理表４０２は、８ビットの信号の入力を受けて、その信号の最も先頭側にあるＨｉｇｈのビット以外のビットをＬｏｗにした８ビットの信号を出力信号とする表である。
【０１１６】
論理回路４０１は、ｐ＿ｂｕｓｙ［３：０］を反転させた信号とｐ＿ｏｂ０［３：０］〜ｐ＿ｏｂ７［３：０］のそれぞれとの論理積を求める。そして、論理回路４０１は、求めた論理積の各ビットの全ての論理和を求めて、８ビットのｐ＿ｓｅｌ＿１ｓｔ＿ｐｒｅ［７：０］を真理表４０２へ出力する。論理回路４０１は、例えば、ｐ＿ｏｂ３［３：０］及びｐ＿ｏｂ５［３：０］が第１段階候補選出条件を満たす場合、第３ビット及び第５ビットがＨｉｇｈであるｐ＿ｓｅｌ＿１ｓｔ＿ｐｒｅ［７：０］を出力する。
【０１１７】
第１段階候補選出部２０１は、真理表４０２を用いて、論理回路４０１から出力されたｐ＿ｓｅｌ＿１ｓｔ＿ｐｒｅ［７：０］に対応する出力信号を取得する。これにより、第１段階候補選出部２０１は、第１段階候補を選択する。そして、第１段階候補選出部２０１は、選択した第１段階候補のリクエストを表す信号であるｐ＿ｓｅｌ＿１ｓｔ［７：０］を出力する。第１段階候補選出部２０１は、例えば、第１段階候補としてｏｂ３に格納されたリクエストを選択した場合、ｐ＿ｓｅｌ＿１ｓｔ［７：０］の第３ビットがＨｉｇｈとなり他のビットがＬｏｗとなる信号を出力する。
【０１１８】
図１４に戻って説明を続ける。第１段階発行許可部２０２は、論理回路４０３及びセレクタ４０４を有する。第１段階発行許可部２０２は、ｐ＿ｂｕｓｙ［３：０］をクレジット管理回路１１３から取得する。また、第１段階発行許可部２０２は、ｐ＿ｏｂ０［３：０］〜ｐ＿ｏｂ７［３：０］それぞれをレジスタｏｂ０〜ｏｂ７から取得する。
【０１１９】
論理回路４０３は、レジスタｏｂ０〜ｏｂ７に保持されたリクエストそれぞれが第１段階発行許可条件を満たすか否かを判定する。そして、論理回路４０３は、各リクエストが第１段階発行許可条件を満たすか否かを表す信号を８つの経路に出力する。この場合、論理回路４０３は、第１段階発行許可条件を満たす場合にはＨｉｇｈを出力し、第１段階発行許可条件を満たす場合にはＬｏｗを出力する。
【０１２０】
次に、セレクタ４０４は、論理回路４０３から出力された第１段階発行許可条件の判定結果の入力を受ける。また、セレクタ４０４は、第１段階候補のリクエストを表すｐ＿ｓｅｌ＿１ｓｔ［７：０］の入力を第１段階候補選出部２０１から受ける。そして、セレクタ４０４は、ｐ＿ｓｅｌ＿１ｓｔ［７：０］にしたがって論理回路４０３から出力された第１段階発行許可条件の判定結果を選択する。そして、セレクタ４０４は、選択結果を用いて第１段階候補のリクエストの発行を有効とするか無効とするかを表す情報であるｐ＿ｓｅｌ＿１ｓｔ＿ｖａｌを出力する。セレクタ４０４は、第１段階候補のリクエストの発行が有効である場合、ｐ＿ｓｅｌ＿１ｓｔ＿ｖａｌをＨｉｇｈとする。また、セレクタ４０４は、第１段階候補のリクエストの発行が無効である場合、ｐ＿ｓｅｌ＿１ｓｔ＿ｖａｌをＬｏｗとする。
【０１２１】
第２段階発行管理部２０３は、７つの第２段階発行選択部２３１である第２段階発行選択部２３１Ａ〜２３１Ｇを有する。図１６Ａ〜１６Ｇは、第２段階発行選択部２３１Ａ〜Ｇの回路図である。
【０１２２】
図１６Ａに示す第２段階発行選択部２３１Ａは、レジスタｏｂ０が保持するリクエストが第１段階候補となった場合の第２段階発行選択を行う。第２段階発行選択部２３１Ａは、論理回路４０５Ａ及び真理表４０６Ａを有する。
【０１２３】
論理回路４０５Ａは、ｐ＿ｂｕｓｙ［３：０］をクレジット管理回路１１３から取得する。また、論理回路４０５Ａは、ｐ＿ｏｂ０［３：０］〜ｐ＿ｏｂ７［３：０］それぞれをレジスタｏｂ０〜ｏｂ７から取得する。そして、論理回路４０５Ａは、ｐ＿ｂｕｓｙ［３：０］とｐ＿ｏｂ０［３：０］との論理和を求める。次に、論理回路４０５Ａは、求めた論理和と、ｐ＿ｏｂ１［３：０］〜ｐ＿ｏｂ７［３：０］のそれぞれとの論理積を求める。次に、論理回路４０５Ａは、求めたそれぞれの論理積を反転した各ビットの全ての論理積を求める。これにより、論理回路４０５Ａは、ｐ＿ｏｂ１［３：０］〜ｐ＿ｏｂ７［３：０］のそれぞれが第２発行選択条件を満たすか否かを判定する。そして、論理回路４０５Ａは、ｐ＿ｏｂ１［３：０］〜ｐ＿ｏｂ７［３：０］のうち第２発行選択条件を満たすものを示す７ビットの信号であるｐ＿ｓｅｌ＿２ｎｄ０＿ｐｒｅ［７：１］を出力する。論理回路４０５Ａは、例えば、ｐ＿ｏｂ１［３：０］及びｐ＿ｏｂ３［３：０］が第２発行選択条件を満たす場合、ｐ＿ｓｅｌ＿２ｎｄ０＿ｐｒｅ［７：１］の第１ビット及び第３ビットをＨｉｇｈとする。
【０１２４】
真理表４０６Ａは、入力された７ビットの信号に対して、その信号の最も先頭側にあるＨｉｇｈのビット以外のビットをＬｏｗにした信号の先頭に１ビットのＬｏｗのビットを付加した８ビットの信号を出力信号とする表である。
【０１２５】
第２段階発行選択部２３１Ａは、真理表４６０Ａを用いてｐ＿ｓｅｌ＿２ｎｄ０＿ｐｒｅ［７：１］に対応する出力信号であるｐ＿ｓｅｌ＿２ｎｄ［７：０］を取得する。これにより、第２段階発行選択部２３１Ａは、レジスタｏｂ０よりも後方のレジスタｏｂ１〜ｏｂ７に格納されたリクエストであって、第２発行選択条件を満たすリクエストの中で最も先頭側のリクエストを発行するリクエストとして選択する。そして、第２段階発行選択部２３１Ａは、選択したリクエストを表す信号であるｐ＿ｓｅｌ＿２ｎｄ［７：０］を出力する。第２段階発行選択部２３１Ａは、例えば、発行するリクエストとしてｏｂ３に格納されたリクエストを選択した場合、ｐ＿ｓｅｌ＿２ｎｄ［７：０］の第３ビットがＨｉｇｈとなり他のビットがＬｏｗとなる信号を出力する。
【０１２６】
図１６Ｂに示す第２段階発行選択部２３１Ｂは、レジスタｏｂ１が保持するリクエストが第１段階候補となった場合の第２段階発行選択を行う。第２段階発行選択部２３１Ｂは、論理回路４０５Ｂ及び真理表４０６Ｂを有する。
【０１２７】
論理回路４０５Ｂは、ｐ＿ｂｕｓｙ［３：０］をクレジット管理回路１１３から取得する。また、論理回路４０５Ｂは、ｐ＿ｏｂ１［３：０］及びｐ＿ｏｂ２［３：０］〜ｐ＿ｏｂ７［３：０］それぞれをレジスタｏｂ１〜ｏｂ７から取得する。そして、論理回路４０５Ｂは、ｐ＿ｂｕｓｙ［３：０］とｐ＿ｏｂ１［３：０］との論理和を求める。次に、論理回路４０５Ｂは、求めた論理和と、ｐ＿ｏｂ２［３：０］〜ｐ＿ｏｂ７［３：０］のそれぞれとの論理積を求める。次に、論理回路４０５Ｂは、求めたそれぞれの論理積を反転した各ビットの全ての論理積を求める。これにより、論理回路４０５Ｂは、ｐ＿ｏｂ２［３：０］〜ｐ＿ｏｂ７［３：０］のそれぞれが第２発行選択条件を満たすか否かを判定する。そして、論理回路４０５Ｂは、ｐ＿ｏｂ２［３：０］〜ｐ＿ｏｂ７［３：０］のうち第２発行選択条件を満たすものを示す６ビットの信号であるｐ＿ｓｅｌ＿２ｎｄ１＿ｐｒｅ［７：２］を出力する。論理回路４０５Ｂは、例えば、ｐ＿ｏｂ２［３：０］及びｐ＿ｏｂ５［３：０］が第２発行選択条件を満たす場合、ｐ＿ｓｅｌ＿２ｎｄ１＿ｐｒｅ［７：２］の第２ビット及び第５ビットをＨｉｇｈとする。
【０１２８】
真理表４０６Ｂは、入力された６ビットの信号に対して、その信号の最も先頭側にあるＨｉｇｈのビット以外のビットをＬｏｗにした信号の先頭に２ビットのＬｏｗのビットを付加した８ビットの信号を出力信号とする表である。
【０１２９】
第２段階発行選択部２３１Ｂは、真理表４６０Ｂを用いてｐ＿ｓｅｌ＿２ｎｄ１＿ｐｒｅ［７：２］に対応する出力信号であるｐ＿ｓｅｌ＿２ｎｄ１［７：０］を取得する。これにより、第２段階発行選択部２３１Ｂは、レジスタｏｂ１よりも後方のレジスタｏｂ２〜ｏｂ７に格納されたリクエストであって、第２発行選択条件を満たすリクエストの中で最も先頭側のリクエストを発行するリクエストとして選択する。そして、第２段階発行選択部２３１Ｂは、選択したリクエストを表す信号であるｐ＿ｓｅｌ＿２ｎｄ１［７：０］を出力する。
【０１３０】
図１６Ｃに示す第２段階発行選択部２３１Ｃは、レジスタｏｂ２が保持するリクエストが第１段階候補となった場合の第２段階発行選択を行う。第２段階発行選択部２３１Ｃは、論理回路４０５Ｃ及び真理表４０６Ｃを有する。
【０１３１】
論理回路４０５Ｃは、ｐ＿ｂｕｓｙ［３：０］をクレジット管理回路１１３から取得する。また、論理回路４０５Ｃは、ｐ＿ｏｂ２［３：０］及びｐ＿ｏｂ３［３：０］〜ｐ＿ｏｂ７［３：０］それぞれをレジスタｏｂ２〜ｏｂ７から取得する。そして、論理回路４０５Ｃは、ｐ＿ｂｕｓｙ［３：０］とｐ＿ｏｂ２［３：０］との論理和を求める。次に、論理回路４０５Ｃは、求めた論理和と、ｐ＿ｏｂ３［３：０］〜ｐ＿ｏｂ７［３：０］のそれぞれとの論理積を求める。次に、論理回路４０５Ｃは、求めたそれぞれの論理積を反転した各ビットの全ての論理積を求める。これにより、論理回路４０５Ｃは、ｐ＿ｏｂ３［３：０］〜ｐ＿ｏｂ７［３：０］のそれぞれが第２発行選択条件を満たすか否かを判定する。そして、論理回路４０５Ｃは、ｐ＿ｏｂ３［３：０］〜ｐ＿ｏｂ７［３：０］のうち第２発行選択条件を満たすものを示す５ビットの信号であるｐ＿ｓｅｌ＿２ｎｄ２＿ｐｒｅ［７：３］を出力する。論理回路４０５Ｃは、例えば、ｐ＿ｏｂ３［３：０］及びｐ＿ｏｂ５［３：０］が第２発行選択条件を満たす場合、ｐ＿ｓｅｌ＿２ｎｄ２＿ｐｒｅ［７：３］の第３ビット及び第５ビットをＨｉｇｈとする。
【０１３２】
真理表４０６Ｃは、入力された５ビットの信号に対して、その信号の最も先頭側にあるＨｉｇｈのビット以外のビットをＬｏｗにした信号の先頭に３ビットのＬｏｗのビットを付加した８ビットの信号を出力信号とする表である。
【０１３３】
第２段階発行選択部２３１Ｃは、真理表４６０Ｃを用いて、ｐ＿ｓｅｌ＿２ｎｄ２＿ｐｒｅ［７：３］に対応する出力信号であるｐ＿ｓｅｌ＿２ｎｄ２［７：０］を取得する。これにより、第２段階発行選択部２３１Ｃは、レジスタｏｂ２よりも後方のレジスタｏｂ３〜ｏｂ７に格納されたリクエストであって、第２発行選択条件を満たすリクエストの中で最も先頭側のリクエストを発行するリクエストとして選択する。そして、第２段階発行選択部２３１Ｃは、選択したリクエストを表す信号であるｐ＿ｓｅｌ＿２ｎｄ２［７：０］を出力する。
【０１３４】
図１６Ｄに示す第２段階発行選択部２３１Ｄは、レジスタｏｂ３が保持するリクエストが第１段階候補となった場合の第２段階発行選択を行う。第２段階発行選択部２３１Ｄは、論理回路４０５Ｄ及び真理表４０６Ｄを有する。
【０１３５】
論理回路４０５Ｄは、ｐ＿ｂｕｓｙ［３：０］をクレジット管理回路１１３から取得する。また、論理回路４０５Ｄは、ｐ＿ｏｂ３［３：０］及びｐ＿ｏｂ４［３：０］〜ｐ＿ｏｂ７［３：０］それぞれをレジスタｏｂ３〜ｏｂ７から取得する。そして、論理回路４０５Ｄは、ｐ＿ｂｕｓｙ［３：０］とｐ＿ｏｂ３［３：０］との論理和を求める。次に、論理回路４０５Ｄは、求めた論理和と、ｐ＿ｏｂ４［３：０］〜ｐ＿ｏｂ７［３：０］のそれぞれとの論理積を求める。次に、論理回路４０５Ｄは、求めたそれぞれの論理積を反転した各ビットの全ての論理積を求める。これにより、論理回路４０５Ｄは、ｐ＿ｏｂ４［３：０］〜ｐ＿ｏｂ７［３：０］のそれぞれが第２発行選択条件を満たすか否かを判定する。そして、論理回路４０５Ｄは、ｐ＿ｏｂ４［３：０］〜ｐ＿ｏｂ７［３：０］のうち第２発行選択条件を満たすものを示す４ビットの信号であるｐ＿ｓｅｌ＿２ｎｄ３＿ｐｒｅ［７：４］を出力する。論理回路４０５Ｄは、例えば、ｐ＿ｏｂ４［３：０］及びｐ＿ｏｂ５［３：０］が第２発行選択条件を満たす場合、ｐ＿ｓｅｌ＿２ｎｄ３＿ｐｒｅ［７：４］の第４ビット及び第５ビットをＨｉｇｈとする。
【０１３６】
真理表４０６Ｄは、入力された４ビットの信号に対して、その信号の最も先頭側にあるＨｉｇｈのビット以外のビットをＬｏｗにした信号の先頭に４ビットのＬｏｗのビットを付加した８ビットの信号を出力信号とする表である。
【０１３７】
第２段階発行選択部２３１Ｄは、真理表４６０Ｄを用いて、ｐ＿ｓｅｌ＿２ｎｄ３＿ｐｒｅ［７：４］に対応する出力信号であるｐ＿ｓｅｌ＿２ｎｄ３［７：０］を取得する。これにより、第２段階発行選択部２３１Ｄは、レジスタｏｂ３よりも後方のレジスタｏｂ４〜ｏｂ７に格納されたリクエストであって、第２発行選択条件を満たすリクエストの中で最も先頭側のリクエストを発行するリクエストとして選択する。そして、第２段階発行選択部２３１Ｄは、選択したリクエストを表す信号であるｐ＿ｓｅｌ＿２ｎｄ［７：０］を出力する。
【０１３８】
図１６Ｅに示す第２段階発行選択部２３１Ｅは、レジスタｏｂ４が保持するリクエストが第１段階候補となった場合の第２段階発行選択を行う。第２段階発行選択部２３１Ｅは、論理回路４０５Ｅ及び真理表４０６Ｅを有する。
【０１３９】
論理回路４０５Ｅは、ｐ＿ｂｕｓｙ［３：０］をクレジット管理回路１１３から取得する。また、論理回路４０５Ｅは、ｐ＿ｏｂ４［３：０］及びｐ＿ｏｂ５［３：０］〜ｐ＿ｏｂ７［３：０］それぞれをレジスタｏｂ４〜ｏｂ７から取得する。そして、論理回路４０５Ｅは、ｐ＿ｂｕｓｙ［３：０］とｐ＿ｏｂ４［３：０］との論理和を求める。次に、論理回路４０５Ｅは、求めた論理和と、ｐ＿ｏｂ５［３：０］〜ｐ＿ｏｂ７［３：０］のそれぞれとの論理積を求める。次に、論理回路４０５Ｅは、求めたそれぞれの論理積を反転した各ビットの全ての論理積を求める。これにより、論理回路４０５Ｅは、ｐ＿ｏｂ５［３：０］〜ｐ＿ｏｂ７［３：０］のそれぞれが第２発行選択条件を満たすか否かを判定する。そして、論理回路４０５Ｅは、ｐ＿ｏｂ５［３：０］〜ｐ＿ｏｂ７［３：０］のうち第２発行選択条件を満たすものを示す３ビットの信号であるｐ＿ｓｅｌ＿２ｎｄ４＿ｐｒｅ［７：５］を出力する。論理回路４０５Ｅは、例えば、ｐ＿ｏｂ５［３：０］及びｐ＿ｏｂ６［３：０］が第２発行選択条件を満たす場合、ｐ＿ｓｅｌ＿２ｎｄ４＿ｐｒｅ［７：５］の第５ビット及び第６ビットをＨｉｇｈとする。
【０１４０】
真理表４０６Ｅは、入力された３ビットの信号に対して、その信号の最も先頭側にあるＨｉｇｈのビット以外のビットをＬｏｗにした信号の先頭に５ビットのＬｏｗのビットを付加した８ビットの信号を出力信号とする表である。
【０１４１】
第２段階発行選択部２３１Ｅは、真理表４６０Ｅを用いて、ｐ＿ｓｅｌ＿２ｎｄ４＿ｐｒｅ［７：５］に対応する出力信号であるｐ＿ｓｅｌ＿２ｎｄ４［７：０］を取得する。これにより、第２段階発行選択部２３１Ｅは、レジスタｏｂ４よりも後方のレジスタｏｂ５〜ｏｂ７に格納されたリクエストであって、第２発行選択条件を満たすリクエストの中で最も先頭側のリクエストを発行するリクエストとして選択する。そして、第２段階発行選択部２３１Ｅは、選択したリクエストを表す信号であるｐ＿ｓｅｌ＿２ｎｄ４［７：０］を出力する。
【０１４２】
図１６Ｆに示す第２段階発行選択部２３１Ｆは、レジスタｏｂ５が保持するリクエストが第１段階候補となった場合の第２段階発行選択を行う。第２段階発行選択部２３１Ｆは、論理回路４０５Ｆ及び真理表４０６Ｆを有する。
【０１４３】
論理回路４０５Ｆは、ｐ＿ｂｕｓｙ［３：０］をクレジット管理回路１１３から取得する。また、論理回路４０５Ｆは、ｐ＿ｏｂ５［３：０］及びｐ＿ｏｂ６［３：０］〜ｐ＿ｏｂ７［３：０］それぞれをレジスタｏｂ５〜ｏｂ７から取得する。そして、論理回路４０５Ｆは、ｐ＿ｂｕｓｙ［３：０］とｐ＿ｏｂ５［３：０］との論理和を求める。次に、論理回路４０５Ｆは、求めた論理和と、ｐ＿ｏｂ６［３：０］〜ｐ＿ｏｂ７［３：０］のそれぞれとの論理積を求める。次に、論理回路４０５Ｆは、求めたそれぞれの論理積を反転した各ビットの全ての論理積を求める。これにより、論理回路４０５Ｆは、ｐ＿ｏｂ６［３：０］〜ｐ＿ｏｂ７［３：０］のそれぞれが第２発行選択条件を満たすか否かを判定する。そして、論理回路４０５Ｆは、ｐ＿ｏｂ６［３：０］〜ｐ＿ｏｂ７［３：０］のうち第２発行選択条件を満たすものを示す２ビットの信号であるｐ＿ｓｅｌ＿２ｎｄ５＿ｐｒｅ［７：６］を出力する。論理回路４０５Ｆは、例えば、ｐ＿ｏｂ６［３：０］及びｐ＿ｏｂ７［３：０］が第２発行選択条件を満たす場合、ｐ＿ｓｅｌ＿２ｎｄ５＿ｐｒｅ［７：６］の第６ビット及び第７ビットをＨｉｇｈとする。
【０１４４】
真理表４０６Ｆは、入力された２ビットの信号に対して、その信号の最も先頭側にあるＨｉｇｈのビット以外のビットをＬｏｗにした信号の先頭に６ビットのＬｏｗのビットを付加した８ビットの信号を出力信号とする表である。
【０１４５】
第２段階発行選択部２３１Ｆは、真理表４６０Ｆを用いて、ｐ＿ｓｅｌ＿２ｎｄ５＿ｐｒｅ［７：６］に対応する出力信号であるｐ＿ｓｅｌ＿２ｎｄ５［７：０］を取得する。これにより、第２段階発行選択部２３１Ｆは、レジスタｏｂ５よりも後方のレジスタｏｂ６〜ｏｂ７に格納されたリクエストであって、第２発行選択条件を満たすリクエストの中で最も先頭側のリクエストを発行するリクエストとして選択する。そして、第２段階発行選択部２３１Ｆは、選択したリクエストを表す信号であるｐ＿ｓｅｌ＿２ｎｄ［７：０］を出力する。
【０１４６】
図１６Ｇに示す第２段階発行選択部２３１Ｇは、レジスタｏｂ６が保持するリクエストが第１段階候補となった場合の第２段階発行選択を行う。第２段階発行選択部２３１Ｇは、論理回路４０５Ｇ及び真理表４０６Ｇを有する。
【０１４７】
論理回路４０５Ｇは、ｐ＿ｂｕｓｙ［３：０］をクレジット管理回路１１３から取得する。また、論理回路４０５Ｇは、ｐ＿ｏｂ６［３：０］及びｐ＿ｏｂ７［３：０］それぞれをレジスタｏｂ６〜ｏｂ７から取得する。そして、論理回路４０５Ｇは、ｐ＿ｂｕｓｙ［３：０］とｐ＿ｏｂ６［３：０］との論理和を求める。次に、論理回路４０５Ｇは、求めた論理和と、ｐ＿ｏｂ７［３：０］との論理積を求める。次に、論理回路４０５Ｇは、論理積を反転した各ビットの全ての論理積を求める。これにより、論理回路４０５Ｇは、ｐ＿ｏｂ７［３：０］が第２発行選択条件を満たすか否かを判定する。そして、論理回路４０５Ｇは、ｐ＿ｏｂ７［３：０を示す１ビットの信号であるｐ＿ｓｅｌ＿２ｎｄ６＿ｐｒｅ［７］を出力する。論理回路４０５Ｇは、ｐ＿ｏｂ７［３：０］が第２発行選択条件を満たす場合、ｐ＿ｓｅｌ＿２ｎｄ５＿ｐｒｅ［７：７］の第７ビットをＨｉｇｈとする。
【０１４８】
真理表４０６Ｇは、入力された１ビットの信号に対して、その信号に７ビットのＬｏｗのビットを付加した８ビットの信号を出力信号とする表である。
【０１４９】
第２段階発行選択部２３１Ｇは、真理表４６０Ｇを用いて、ｐ＿ｓｅｌ＿２ｎｄ６＿ｐｒｅ［７］に対応する出力信号であるｐ＿ｓｅｌ＿２ｎｄ６［７：０］を取得する。これにより、第２段階発行選択部２３１Ｇは、レジスタｏｂ６よりも後方のレジスタｏｂ７に格納されたリクエストを発行するリクエストとして選択する。そして、第２段階発行選択部２３１Ｇは、選択したリクエストを表す信号であるｐ＿ｓｅｌ＿２ｎｄ６［７：０］を出力する。
【０１５０】
図１４に戻って説明を続ける。ｐ＿ｓｅｌ＿１ｓｔ＿ｖａｌがＨｉｇｈの場合、セレクタ２０４は、入力されたｐ＿ｓｅｌ＿１ｓｔ［７：０］をｐ＿ｓｅｌ＿ｐｒｅ［７：０］として出力する。一方、ｐ＿ｓｅｌ＿１ｓｔ＿ｖａｌがＬｏｗの場合、第２段階発行管理部２０３から出力されたｐ＿ｓｅｌ＿２ｎｄ［７：０］をｐ＿ｓｅｌ＿ｐｒｅ［７：０］として出力する。
【０１５１】
ＡＮＤ回路２０５は、ｐ＿ｏｂ０＿ｖａｌ〜ｐ＿ｏｂ７＿ｖａｌをそれぞれのビットで表す８ビットのｖａｌｉｄ信号の入力をシフトレジスタ１２１から受ける。さらに、ＡＮＤ回路２０５は、ｐ＿ｓｅｌ＿ｐｒｅ［７：０］の入力を受ける。そして、ＡＮＤ回路２０５は、ｖａｌｉｄ信号とｐ＿ｓｅｌ＿ｐｒｅ［７：０］との論理積を求め、ｐ＿ｓｅｌ［７：０］として出力する。
【０１５２】
次に、図１７を参照して、８段のシフトレジスタ１２１を有する追越付命令キュー１１２によるリクエストの選択の具体的な流れについて説明する。図１７は、８段のシフトレジスタに格納されたリクエストの選択処理の一例を説明するための図である。図１６における宛先ＬＳＵビットマップは、各ロードストアユニット＃＃０〜＃＃３が各リクエストにおいて宛先であるか否かを表す情報である。
【０１５３】
シフトレジスタ１２１の各レジスタｏｂ０〜ｏｂ７に、状態６０１の表３１１に示すようにリクエスト＃１〜＃７が格納される。そして、この状態で、表３２１のビジー信号で示されるように、ロードストアユニット＃＃３がビジーである。
【０１５４】
そこで、追越付命令キュー１１２は、ロードストアユニット＃＃０〜＃＃２のいずれかを宛先とするリクエストを選択する。この場合、追越付命令キュー１１２は、リクエスト＃０〜＃２、＃４、＃５及び＃６を第１段階候補選出条件を満たすリクエストとして選択する。次に、追越付命令キュー１１２は、選択したリクエスト＃０〜＃２、＃４、＃５及び＃６の中で、最も先頭側にあるリクエスト＃０を第１段階候補とする。この場合、リクエスト＃０の宛先にロードストアユニット＃＃３が含まれているため、追越付命令キュー１１２は、第１段階候補としたリクエスト＃０の発行は行わない。そこで、追越付命令キュー１１２は、レジスタｏｂ０より後方のレジスタｏｂ１〜ｏｂ７に格納されたリクエスト＃１〜＃７の中で宛先のロードストアユニット１０２が全てビジー状態でないリクエストを特定する。ここでは、追越付命令キュー１１２は、リクエスト＃２、＃４、＃５及び＃７を特定する。さらに、追越付命令キュー１１２は、特定したリクエスト＃２、＃４、＃５及び＃７のうち宛先がリクエスト＃０と重ならないリクエストを選択する。この場合、追越付命令キュー１１２は、リクエスト＃５を第２段階発行選択条件を満たすリクエストとして選択する。選択したリクエストが１つであるため、追越付命令キュー１１２は、リクエスト＃５を発行する。
【０１５５】
リクエスト＃５が発行されたことで、追越付命令キュー１１２は状態６０２に遷移する。リクエスト＃５が発行されたため、レジスタｏｂ５が空になる。そこで、表３１２に示すように、リクエスト＃６及び＃７の位置が先頭に詰められる。さらに、表３２１のビジー信号で示されるように、ロードストアユニット＃＃３に加えてリクエスト＃１の宛先であるロードストアユニット＃＃１がビジー状態となる。
【０１５６】
さらに、追越付命令キュー１１２が状態６０２の間に、ロードストアユニット＃＃３がリクエストの処理を完了する。ロードストアユニット＃＃３のビジー状態が解除されるので、追越付命令キュー１１２は状態６０３に遷移する。この場合、表３１３は、状態６０２の表３１２と同じ内容である。一方、表３２３のビジー信号で示されるように、ロードストアユニット＃＃３のビジー状態が解消される。
【０１５７】
そして、状態６０３で、追越付命令キュー１１２は、ロードストアユニット＃＃０、＃＃２及び＃＃３のいずれかを宛先とするリクエストを選択する。この場合、追越付命令キュー１１２は、リクエスト＃０〜＃４、＃６及び＃７の全てを第１段階候補選出条件を満たすリクエストとして選択する。次に、追越付命令キュー１１２は、選択したリクエスト＃０〜＃４、＃６及び＃７の中で、最も先頭側にあるリクエスト＃０を第１段階候補とする。この場合、リクエスト＃０の宛先にロードストアユニット＃＃１は含まれていないため、追越付命令キュー１１２は、第１段階候補としたリクエスト＃０を発行する。
【０１５８】
リクエスト＃０が発行されたことで、追越付命令キュー１１２は状態６０４に遷移する。リクエスト＃０が発行されたため、レジスタｏｂ０が空になる。そこで、表３１４に示すように、リクエスト＃２〜＃４、＃６及び＃７の位置が先頭に詰められる。さらに、表３２４のビジー信号で示されるように、ロードストアユニット＃＃１に加えてリクエスト＃０の宛先であるロードストアユニット＃＃２及び＃＃３がビジー状態となる。
【０１５９】
ここで、本実施例では、第２段階発行管理部２０３は、第１段階候補として各リクエストが選ばれた場合の全てのケースを先読みして、それぞれのケースに対応する第２段階発行選択処理を並列に実行する。そして、第２段階発行管理部２０３は、第１段階候補が選出された後に、それに対応した第２段階発行選択の結果を選択する。これにより、第２段階発行選択処理の論理段数を小さく抑えることができる。ただし、第２段階発行選択処理の論理段数がある程度大きくなることが許容できる場合、先読みを行わずに、第１段階候補が決まった後に、その第１段階候補に応じた第２段階発行選択処理を行う構成にしてもよい。
【０１６０】
また、以上の説明では、ＰＣＩデバイス１５に搭載されたマルチコア演算装置１００について説明したが、他の箇所に設けられたマルチコア演算装置１００であっても同様の機能を持つことで同様の効果を得ることができる。例えば、ＣＰＵ１１がマルチコア演算装置１００であって追越付命令キュー１１２を有する場合、そのＣＰＵ１１が同様の機能を備えることができる。
【０１６１】
以上に説明したように、本実施例に係る命令発行ユニットは、シフトレジスタに格納されたリクエストのうち宛先のロードストアユニットが１つでもビジー状態でなく且つ最も先頭側のリクエストを第１段階候補とする。次に、本実施例に係る命令発行ユニットは、第１段階候補のリクエストが発行可能であれば、第１段階候補のリクエストを発行する。一方、第１段階候補のリクエストが発行可能でなければ、本実施例に係る命令発行ユニットは、第１段階候補のリクエストよりも後方のレジスタに格納されたリクエストのうち発行可能であり且つ第１段階候補のリクエストと宛先が重ならないリクエストを特定する。そして、本実施例に係る命令発行ユニットは、特定したリクエストの中で最も先頭側のリクエストを発行する。これにより、ライブロックの発生を抑えつつメモリアクセス命令のリクエストを効率よく発行することができ、また、リクエスト選択の公平性を維持できる。また、ライブロックの発生を抑えることで、ソフトウェアや擾乱回路によるライブロック対策を行わなくてもよい。さらに、第１段階候補を先読みして第２段階の選択処理を行うことで、論理段数を低減することができ、簡単な構成でライブロックの発生を抑えることができる。このようにライブロックの発生を容易に抑えることができ、マルチコア装置全体の処理性能を向上させることができる。
【０１６２】
さらに、以上の説明では、メモリアクセス命令の順序制御を行う命令発行ユニットについて説明したが、入力が１つに対して出力が複数の宛先を有するトランザクションであればこれに限らない。例えば、以下のような構成でもよい。１つのリクエスタが複数のレスポンダ宛に、ユニキャスト又はマルチキャストのトランザクションを発行する場合で説明する。この場合のリクエスタが命令発行ユニット１０１にあたる。また、レスポンダがロードストアユニット１０２にあたる。リクエスタは内部にキューとキューの制御回路を有し、トランザクションを管理する。このキューがシフトレジスタ１２１にあたり、キューの制御回路が追越回路１２２にあたる。制御回路が、キューの先頭以外のトランザクションから発行可能なトランザクションを選択して発行する処理であるトランザクションの追い越しの制御を行う。この場合、制御回路は、上記実施例で説明した追越回路１２２と同様の論理を用いて発行するトランザクションを決定する。この場合も、ライブロックの発生を抑えることが可能である。
【符号の説明】
【０１６３】
１  情報処理装置
１１  ＣＰＵ
１２  メモリ
１３  ＩＯコントローラ
１４  ハードディスク
１５  ＰＣＩデバイス
１００  マルチコア演算装置
１０１  命令発行ユニット
１０２  ロードストアユニット
１０３  コア
１０４  ＭＡＣ
１０５  メモリ
１１１  命令デコーダ
１１２  追越付命令キュー
１１３  クレジット管理回路
１２１  シフトレジスタ
１２２  追越回路
１２３，１２４  セレクタ
１２５  多段ＡＮＤ回路
１３１  演算実行部
１３２  レジスタファイル
２０１  第１段階候補選出部
２０２  第１段階発行許可部
２０３  第２段階発行管理部
２０４  セレクタ
２０５  ＡＮＤ回路
２１１  レジスタ
２３１  第２段階発行選択部
２３２  セレクタ
【図１】
2019215763.tif 000003
【図２】
2019215763.tif 000004
【図３】
2019215763.tif 000005
【図４】
2019215763.tif 000006
【図５】
2019215763.tif 000007
【図６】
2019215763.tif 000008
【図７】
2019215763.tif 000009
【図８】
2019215763.tif 000010
【図９】
2019215763.tif 000011
【図１０】
2019215763.tif 000012
【図１１】
2019215763.tif 000013
【図１２】
2019215763.tif 000014
【図１３】
2019215763.tif 000015
【図１４】
2019215763.tif 000016
【図１５】
2019215763.tif 000017
【図１６Ａ】
2019215763.tif 000018
【図１６Ｂ】
2019215763.tif 000019
【図１６Ｃ】
2019215763.tif 000020
【図１６Ｄ】
2019215763.tif 000021
【図１６Ｅ】
2019215763.tif 000022
【図１６Ｆ】
2019215763.tif 000023
【図１６Ｇ】
2019215763.tif 000024
【図１７】
2019215763.tif 000025