(57)【要約】【課題】リザベーションステーションを効率的に使用して演算器を効率的に使うことが難しい、という課題を解決すること。【解決手段】命令中の論理レジスタを物理レジスタに割り当てるレジスタリネーミングと、命令が登録され、登録された命令のソースオペランドに対応する物理レジスタが有効になると当該命令を演算器に発行するリザベーションステーションと、命令を一時的に保持するとともに、命令中のソースオペランドが先行するロード命令に依存しなくなると、当該命令をリザベーションステーションに登録するロード依存キューと、を有し、レジスタリネーミングは、命令のソースオペランドが先行するロード命令に依存しているか否かに応じて、リザベーションステーションに命令を登録するか、ロード依存キューに命令をキューイングする。【選択図】図１
2019169082.tif 000002
【特許請求の範囲】
【請求項１】
命令中の論理レジスタを物理レジスタに割り当てるレジスタリネーミングと、
前記命令が登録され、登録された前記命令のソースオペランドに対応する物理レジスタが有効になると当該命令を演算器に発行するリザベーションステーションと、
前記命令を一時的に保持するとともに、前記命令中のソースオペランドが先行するロード命令に依存しなくなると、当該命令をリザベーションステーションに登録するロード依存キューと、
を有し、
前記レジスタリネーミングは、前記命令のソースオペランドが先行するロード命令に依存しているか否かに応じて、前記リザベーションステーションに前記命令を登録するか、前記ロード依存キューに前記命令をキューイングする
プロセッサコア。
【請求項２】
請求項１に記載のプロセッサコアであって、
前記レジスタリネーミングは、ソースオペランドが先行するロード命令に依存していない前記命令を前記リザベーションステーションに登録する
プロセッサコア。
【請求項３】
請求項１又は請求項２に記載のプロセッサコアであって、
前記レジスタリネーミングは、ソースオペランドが先行するロード命令に依存している前記命令を前記ロード依存キューにキューイングする
プロセッサコア。
【請求項４】
請求項１から請求項３までのいずれか１項に記載のプロセッサコアであって、
前記命令を一時保持するとともに、前記命令を演算器に発行する発行可能キューを有し、
前記レジスタリネーミングは、前記命令のソースオペランドが先行するロード命令に依存していない場合、ソースオペランドが有効であるか否かに応じて、当該命令を前記リザベーションステーションに登録するか、前記発行可能キューにキューイングする
プロセッサコア。
【請求項５】
請求項４に記載のプロセッサコアであって、
前記レジスタリネーミングは、ソースオペランドが有効である前記命令を前記発行可能キューにキューイングする
プロセッサコア。
【請求項６】
請求項４又は請求項５に記載のプロセッサコアであって、
前記レジスタリネーミングは、ソースオペランドが有効でない前記命令を前記リザベーションステーションに登録する
プロセッサコア。
【請求項７】
請求項４から請求項６までのいずれか１項に記載のプロセッサコアであって、
前記発行可能キュー又は前記リザベーションステーションのうちの少なくとも一つは、ストア命令に依存している前記命令を優先的に発行する
プロセッサコア。
【請求項８】
請求項１から請求項７までのいずれか１項に記載のプロセッサコアであって、
物理レジスタの番号と、対応する物理レジスタにロード命令依存があるか否かを示すロード命令依存と、を対応づけたステータス表を記憶しており、
前記リザベーションステーションは、前記ステータス表を用いて前記命令のソースオペランドが先行するロード命令に依存しているか否か判断する
プロセッサコア。
【請求項９】
命令が登録され、登録された前記命令のソースオペランドに対応する物理レジスタが有効になると当該命令を演算器に発行するリザベーションステーションと、前記命令を一時的に保持するとともに、前記命令中のソースオペランドが先行するロード命令に依存しなくなると、当該命令をリザベーションステーションに登録するロード依存キューと、を有するプロセッサコアに、
前記命令中の論理レジスタを物理レジスタに割り当てるレジスタリネーミングを実現させ、
前記レジスタリネーミングは、前記命令のソースオペランドが先行するロード命令に依存しているか否かに応じて、前記リザベーションステーションに前記命令を登録するか、前記ロード依存キューに前記命令をキューイングする
プログラム。
【請求項１０】
プロセッサコアが、
命令のソースオペランドが先行するロード命令に依存しているか否か確認して、ソースオペランドが先行するロード命令に依存している前記命令を、前記命令のソースオペランドに対応する物理レジスタが有効になると当該命令を演算器に発行するリザベーションステーションに登録し、ソースオペランドが先行するロード命令に依存していない前記命令を、前記命令を一時的に保持するとともに、前記命令中のソースオペランドが先行するロード命令に依存しなくなると、当該命令をリザベーションステーションに登録するロード依存キューにキューイングする
命令制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサコア、命令制御方法、プログラムに関する。
【背景技術】
【０００２】
プロセッサにおいて命令の実行効率を高めるためには、演算器を効率良く動作させる必要がある。このような演算器を効率よく動作させるための技術の一つとして、リザベーションステーションによるレジスタリネーミングが知られている。
【０００３】
レジスタリネーミングでは、例えば、命令の実行結果を格納する論理レジスタに空いている物理レジスタを割り当てる。これにより、ＷＡＷ（Write After Write）ハザード及びＷＡＲ（Write After Read）ハザードを解決する。また、リザベーションステーションは、ソースオペランドの物理レジスタが有効になった時点で、つまり、ＲＡＷ（Read After Write）ハザードが解決した時点で、アウトオブオーダーで演算器に命令を発行する。このような構成により、並び順に依らず命令を実行するアウトオブオーダー実行などを効率的に行うことを可能としている。
【０００４】
このようなリザベーションステーションを用いた技術としては、例えば、特許文献１がある。特許文献１には、リザベーションステーションを有するプロセッサコアについて記載されている。特許文献１によると、リザベーションステーションは、所定の例外を除き、ロードマイクロ命令に従属するマイクロ命令を、ロードマイクロ命令がディスパッチされてから指定されたクロック数にわたりストールする。また、特許文献１によると、アンコアストールロジックを用いて例外を提供する。アンコアストールロジックは、１つ又は複数のロードマイクロ命令タイプを検出して、それら１つ又は複数のロードマイクロ命令タイプのマイクロ命令に依存する新しいマイクロ命令を、そのオペランドが利用可能になるまでストールさせる。
【０００５】
また、関連する技術として、例えば、特許文献２がある。特許文献２には、リザベーションステーションとロードストア依存関係予測器とを備えるプロセッサについて記載されている。特許文献２によると、ロードストア依存関係予測器は、依存関係の予測強度を示すためのカウンタを含んでおり、カウンタの値に応じて、ロード命令とストア命令との間に依存関係があるか否かを判断する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１７−５０３２９４号公報
【特許文献２】特開２０１５−２３２９０２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
一般に、リザベーションステーションに登録できる命令が多いほど、命令を多く発行することができ、演算器を効率よく動作させることが出来る。しかしながら、回路規模と遅延が問題になり、リザベーションステーションに登録可能なエントリ数を増やすのは困難であるという課題があった。
【０００８】
演算器を効率よく使う方法としては、リザベーションステーションへの登録数を増やすほかに、リザベーションステーションを効率的に使う、という方法もある。しかしながら、特許文献１に記載の技術の場合、リザベーションステーション上で命令がストールされてしまう。そのため、リザベーションステーションを効率的に活用することは出来なかった。
【０００９】
また、特許文献２ではロード命令とストア命令の関係のみを問題としており、その他の命令について何ら記載されていない。そのため、特許文献２に記載の技術を用いたとしても、リザベーションステーションの効率的な活用は不十分である。
【００１０】
以上のように、リザベーションステーションを効率的に使用することが難しかった。その結果、リザベーションステーションを効率的に使用して演算器を効率的に使うことが難しい、という問題が生じていた。
【００１１】
そこで、本発明の目的は、リザベーションステーションを効率的に使用して演算器を効率的に使うことが難しい、という課題を解決するプロセッサコア、命令制御方法、プログラムを提供することにある。
【課題を解決するための手段】
【００１２】
かかる目的を達成するため本発明の一形態であるプロセッサコアは、
命令中の論理レジスタを物理レジスタに割り当てるレジスタリネーミングと、
前記命令が登録され、登録された前記命令のソースオペランドに対応する物理レジスタが有効になると当該命令を演算器に発行するリザベーションステーションと、
前記命令を一時的に保持するとともに、前記命令中のソースオペランドが先行するロード命令に依存しなくなると、当該命令をリザベーションステーションに登録するロード依存キューと、
を有し、
前記レジスタリネーミングは、前記命令のソースオペランドが先行するロード命令に依存しているか否かに応じて、前記リザベーションステーションに前記命令を登録するか、前記ロード依存キューに前記命令をキューイングする
という構成をとる。
【００１３】
また、本発明の他の形態である命令制御方法は、
プロセッサコアが、
命令のソースオペランドが先行するロード命令に依存しているか否か確認して、ソースオペランドが先行するロード命令に依存している前記命令を、前記命令のソースオペランドに対応する物理レジスタが有効になると当該命令を演算器に発行するリザベーションステーションに登録し、ソースオペランドが先行するロード命令に依存していない前記命令を、前記命令を一時的に保持するとともに、前記命令中のソースオペランドが先行するロード命令に依存しなくなると、当該命令をリザベーションステーションに登録するロード依存キューにキューイングする
という構成をとる。
【００１４】
また、本発明の他の形態であるプログラムは、
命令が登録され、登録された前記命令のソースオペランドに対応する物理レジスタが有効になると当該命令を演算器に発行するリザベーションステーションと、前記命令を一時的に保持するとともに、前記命令中のソースオペランドが先行するロード命令に依存しなくなると、当該命令をリザベーションステーションに登録するロード依存キューと、を有するプロセッサコアに、
前記命令中の論理レジスタを物理レジスタに割り当てるレジスタリネーミングを実現させ、
前記レジスタリネーミングは、前記命令のソースオペランドが先行するロード命令に依存しているか否かに応じて、前記リザベーションステーションに前記命令を登録するか、前記ロード依存キューに前記命令をキューイングする処理を実現させるためのプログラムである。
【発明の効果】
【００１５】
本発明は、以上のように構成されることにより、リザベーションステーションを効率的に使用して演算器を効率的に使うことが難しい、という課題を解決するプロセッサコア、命令制御方法、プログラムを提供することが可能となる。
【図面の簡単な説明】
【００１６】
【図１】本発明の第１の実施形態におけるプロセッサコアの構成の一例を示すブロック図である。
【図２】図１で示す対応表の一例を示す図である。
【図３】図１で示すステータス表の一例を示す図である。
【図４】プロセッサコアで実行する命令列の一例を示す図である。
【図５】本発明の第１の実施形態におけるレジスタリネーミングの動作の一例を示すフローチャートである。
【図６】レジスタリネーミングによるリネーミング後の命令列の一例を示す図である。
【図７】リネーミング後の対応表の一例を示す図である。
【図８】リネーミング後のステータス表の一例を示す図である。
【図９】本発明の第２の実施形態におけるプロセッサコアの構成の一例を示すブロック図である。
【図１０】本発明の第２の実施形態におけるレジスタリネーミングの動作の一例を示すフローチャートである。
【図１１】本発明の第３の実施形態におけるステータス表の一例を示す図である。
【図１２】本発明の第４の実施形態におけるプロセッサコアの構成の一例を示すブロック図である。
【発明を実施するための形態】
【００１７】
［第１の実施形態］
本発明の第１の実施形態を図１から図８までを参照して説明する。図１は、プロセッサコア１００の構成の一例を示すブロック図である。図２は、対応表１４１の一例を示す図である。図３は、ステータス表１４２の一例を示す図である。図４は、プロセッサコア１００で実行する命令列の一例を示す図である。図５は、レジスタリネーミング１３０の動作の一例を示すフローチャートである。図６は、レジスタリネーミング１３０によるリネーミング後の命令列の一例を示す図である。図７は、リネーミング後の対応表１４１の一例を示す図である。図８は、リネーミング後のステータス表１４２の一例を示す図である。
【００１８】
第１の実施形態では、レジスタリネーミング１３０を有するプロセッサコア１００について説明する。後述するように、レジスタリネーミング１３０は、リネーミング実行時に、命令のソースオペランドが先行するロード命令に依存しているか否か確認する。そして、ソースオペランドが先行するロード命令に依存している場合、レジスタリネーミング１３０は、命令をロード依存キュー１５０にキューイングする。一方、ソースオペランドが先行するロード命令に依存していない場合、レジスタリネーミング１３０は、命令をリザベーションステーション１６０に登録する。
【００１９】
図１は、プロセッサコア１００の構成の一例を示している。プロセッサコア１００は、例えば、図示しないＣＰＵ（Central Processing Unit）が有している。図１を参照すると、プロセッサコア１００は、例えば、命令フェッチ／デコードユニット１１０と、命令キュー１２０と、レジスタリネーミング１３０と、リネーミングテーブル１４０と、ロード依存キュー１５０と、リザベーションステーション１６０と、演算器１７０と、を有している。なお、レジスタリネーミング１３０などは、例えば、図示しない演算装置が図示しない記憶装置に格納されたプログラムを実行することで実現することが出来る。レジスタリネーミング１３０などは、マッピングテーブルやリオーダバッファなどを用いたハードウェアにより実現しても構わない。
【００２０】
命令フェッチ／デコードユニット１１０は、図示しない主記憶装置から命令情報を読み出して、読み出した命令情報を解析する。そして、命令フェッチ／デコードユニット１１０は、読み出した命令情報を命令キュー１２０に渡す。
【００２１】
命令キュー１２０は、命令フェッチ／デコードユニット１１０から渡された命令を一時保持する。命令キュー１２０は、命令を保持した順番に従って、命令をレジスタリネーミング１３０に出力する。
【００２２】
レジスタリネーミング１３０は、リネーミングテーブル１４０を用いてリネーミングを実行する。例えば、レジスタリネーミング１３０は、命令中の論理レジスタを物理レジスタに割り当てる。また、この際、レジスタリネーミング１３０は、命令の実行結果を格納する論理レジスタを空いている物理レジスタに割り当てる。レジスタリネーミング１３０は、上記リネーミング処理を実行することで、リネーミングテーブル１４０を更新する。
【００２３】
また、レジスタリネーミング１３０は、リネーミング実行時に、ロード命令や演算命令のソースオペランドが先行するロード命令に依存しているか否か確認する。そして、ソースオペランドが先行するロード命令に依存している場合、レジスタリネーミング１３０は、当該命令をロード依存キュー１５０にキューイングする。一方、ソースオペランドが先行するロード命令に依存していない場合、レジスタリネーミング１３０は、当該命令をリザベーションステーション１６０に登録する。
【００２４】
このように、レジスタリネーミング１３０は、リネーミングを実行するとともに、ソースオペランドが先行するロード命令に依存しているか否かに応じて、命令をロード依存キュー１５０にキューイングするか、リザベーションステーション１６０に登録するか判断する。
【００２５】
リネーミングテーブル１４０は、対応表１４１と、ステータス表１４２とを有する。リネーミングテーブル１４０は、例えば、ＲＡＭ（Random access memory）などの記憶装置に格納されている。
【００２６】
対応表１４１は、論理レジスタ番号と物理レジスタ番号とを対応付けた表である。図２は、対応表１４１の一例を示している。図２を参照すると、対応表１４１では、論理レジスタの番号と物理レジスタの番号とを対応付けている。例えば、図２の１行目では、論理レジスタ「Ｖ０」と物理レジスタ「Ｒ０」とを対応付けている。
【００２７】
ステータス表１４２は、物理レジスタのステータス（状態）を示している。図３は、ステータス表１４２の構成の一例を示している。図３を参照すると、ステータス表１４２は、物理レジスタの値と、有効／無効と、命令と、ロード依存と、を対応付けている。
【００２８】
図３中の物理レジスタの項目は、物理レジスタの番号を示している。物理レジスタの番号は、対応表１４１のものと対応している。
【００２９】
図３中の有効／無効の項目は、物理レジスタが有効であるか否かを示している。例えば、有効／無効の値が「１」の場合、対応する物理レジスタが有効であることを示している。後述するリザベーションステーション１６０は、命令を実行する際に使用する物理レジスタが有効になった時点で、アウトオブオーダーで命令を演算器１７０に発行する。一方、有効／無効の値が「０」の場合、対応する物理レジスタが無効であることを示している。有効／無効の値が「０」の場合、リザベーションステーション１６０は、有効／無効の値が「１」になるまで、登録された命令の演算器１７０に対する発行を待機する。
【００３０】
図３中の命令の項目は、対応する物理レジスタを使用する命令を示している。図３中の命令の項目は、例えば、レジスタリネーミング１３０によるリネーミング実行時に更新される。
【００３１】
図３中のロード依存の項目は、対応する物理レジスタにロード依存が有るか否か示している。換言すると、図３中のロード依存の項目は、対応する物理レジスタを使用する命令がロード命令に依存しているか否かを示している。ロード命令に依存している場合とは、物理レジスタがロード命令によるロード先である場合や、ロード命令によるロード先の物理レジスタの値を演算に使用する場合、上記演算の結果を更なる演算に使用する場合、などがある。例えば、ロード依存が「１」である場合、対応する物理レジスタにロード依存が有ることを示している。
【００３２】
ロード依存キュー１５０は、レジスタリネーミング１３０から渡された命令を一時保持する。例えば、ロード依存キュー１５０は、命令のソースオペランドを参照する。そして、ロード依存キュー１５０は、ソースオペランドが先行するロード命令に依存しなくなると、保持する命令をリザベーションステーション１６０に登録する。
【００３３】
このように、ロード依存キュー１５０は、ソースオペランドが先行するロード命令に依存している場合に、依存関係が解消するまで命令のリザベーションステーション１６０への登録を送らせる。
【００３４】
リザベーションステーション１６０には、複数の命令が登録される。本実施形態の場合、リザベーションステーション１６０には、ロード依存キュー１５０が命令を登録する場合と、レジスタリネーミング１３０がロード依存キュー１５０をバイパスして命令を登録する場合と、がある。リザベーションステーション１６０に一度に登録可能な命令の数は、予め定められている。例えば、本実施形態の場合、リザベーションステーション１６０には、一度に２つまでの命令を登録することが出来る。
【００３５】
命令が登録されると、リザベーションステーション１６０はリネーミングテーブル１４０を参照する。そして、リザベーションステーション１６０は、登録された命令のソースオペランドに対応する物理レジスタが有効になった時点で、アウトオブオーダーで演算器１７０に命令を発行する。
【００３６】
なお、上述したリザベーションステーション１６０に登録可能な命令の数は例示である。リザベーションステーション１６０に登録可能な命令の数は、上記例示した場合に限定されない。
【００３７】
演算器１７０は、リザベーションステーション１６０から発行された命令を実行する。演算器１７０には、例えば、加算器、乗算器、比較器、シフト器などの様々な演算器を含むことが出来る。
【００３８】
以上が、プロセッサコア１００の構成の一例である。
【００３９】
次に、上記のようなプロセッサコア１００を用いて行う動作の一例について説明する。具体的には、図４で示す命令列をプロセッサコア１００で実行する場合について、図４から図８までを参照して説明する。
【００４０】
図４は、プロセッサコア１００で実行する命令列の一例を示している。図４を参照すると、命令列には、例えば、命令「ＬＤ  Ｖ８，（Ｖ０）」、命令「ＡＤＤ  Ｖ０，Ｖ１，Ｖ８」、……、命令「ＳＴ  Ｖ３，（Ｖ７）」が含まれている。ここで、図４中の命令「ＬＤ  Ｖ８，（Ｖ０）」は、論理レジスタ「Ｖ０」の値で示されるアドレスで参照されるメモリの内容を、論理レジスタ「Ｖ８」にロードする命令である。また、図４中の命令「ＡＤＤ  Ｖ０，Ｖ１，Ｖ８」は、論理レジスタ「Ｖ１」と「Ｖ８」を加算して論理レジスタ「Ｖ０」にセットする命令である。図４中のその他加算命令も同様である。また、図４中の命令「ＳＴ（Ｖ３），Ｖ７」は、論理レジスタ「Ｖ７」を論理レジスタ「Ｖ３」の値で示すアドレスで参照されるメモリにストアする命令である。
【００４１】
図４で示す命令列は、命令フェッチ／デコードユニット１１０から発行され、命令キュー１２０に入る。命令キュー１２０は、各命令を受け取った順番にレジスタリネーミング１３０に対して出力する。
【００４２】
図５は、レジスタリネーミング１３０の動作の一例を示している。図５で示すように、レジスタリネーミング１３０は、命令を受け取るとリネーミングテーブル１４０を用いてリネーミングを実行する（ステップＳ１０１）。例えば、レジスタリネーミング１３０は、命令「ＬＤ  Ｖ８，（Ｖ０）」中の論理レジスタにそれぞれ物理レジスタを割り当て、命令「ＬＤ  Ｖ８，（Ｖ０）」を命令「ＬＤ  Ｒ８，（Ｒ０）」とする。また、命令「ＡＤＤ  Ｖ０，Ｖ１，Ｖ８」中の論理レジスタ「Ｖ０」は、上記命令「ＬＤ  Ｖ８，（Ｖ０）」中に存在する。そのため、例えば、レジスタリネーミング１３０は、命令の格納先の論理レジスタ「Ｖ０」に、既に割り当てた「Ｒ０」とは異なる、空いている物理レジスタ「Ｒ９」を割り当てる。つまり、例えば、「ＡＤＤ  Ｖ０，Ｖ１，Ｖ８」は、論理レジスタ「Ｖ８」が命令「ＬＤ  Ｖ８，（Ｖ０）」と重複しているため、重複しない物理レジスタが割り当てられて、「ＡＤＤ  Ｒ９，Ｒ１，Ｒ８」となる。その結果、レジスタリネーミング１３０は、命令「ＡＤＤ  Ｖ０，Ｖ１，Ｖ８」を命令「ＡＤＤ  Ｒ９，Ｒ１，８」とする。
【００４３】
例えば、上記のような処理の結果、レジスタリネーミング１３０は、図４で示す命令を図６で示すようにする。つまり、レジスタリネーミング１３０は、リネーミングを実行することで、命令「ＬＤ  Ｖ８，（Ｖ０）」、命令「ＡＤＤ  Ｖ０，Ｖ１，Ｖ８」、……、命令「ＳＴ  Ｖ３，（Ｖ７）」を、命令「ＬＤ  Ｒ８，（Ｒ０）」、命令「ＡＤＤ  Ｒ９，Ｒ１，Ｒ８」、……、命令「ＳＴ  Ｒ１３，Ｒ７」とする。
【００４４】
また、レジスタリネーミング１３０は、リネーミング実行時に、リネーミングテーブル１４０の更新を行う。リネーミング時のレジスタリネーミング１３０の処理により、リネーミングテーブル１４０は、例えば、図７、図８で示すようになる。
【００４５】
図７は、リネーミング後の対応表１４１の一例を示している。例えば、図７を参照すると、論理レジスタ「Ｖ０」には、物理レジスタ「Ｒ０」と「Ｒ９」が割り当てられている。これは、上記のように、論理レジスタ「Ｖ０」が命令「ＬＤ  Ｖ８，（Ｖ０）」と命令「ＡＤＤ  Ｖ０，Ｖ１，Ｖ８」の２つに含まれている為、物理レジスタが重ならないように割り当てられたためである。
【００４６】
また、図８は、リネーミング後のステータス表１４２の一例を示している。例えば、物理レジスタ「Ｒ８」には、論理レジスタ「Ｒ０」の値で示されるアドレスで参照されるメモリの内容がロードされる。そのため、物理レジスタ「Ｒ８」には、命令「ＬＤ（Ｒ０）」が対応付けられている。また、物理レジスタ「Ｒ８」には、メモリの内容をロードするため、物理レジスタ「Ｒ８」はロード依存である。そのため、物理レジスタ「Ｒ８」には、ロード依存「１」が対応付けられている。同様に、物理レジスタ「Ｒ９」には、物理レジスタ「Ｒ１」と「Ｒ８」を加算した結果が格納される。ここで、上記のように、物理レジスタ「Ｒ８」はロード依存である。つまり、ソースオペランドが先行するロード命令に依存している。そのため、物理レジスタ「Ｒ９」もロード依存「１」と対応付けられている。同様に、ロード依存のある物理レジスタ「Ｒ９」を演算に用いた結果を格納する物理レジスタ「１１」もロード依存「１」となる。
【００４７】
また、レジスタリネーミング１３０は、命令のソースオペランドを参照して（図５のステップＳ１０２）、ソースオペランドが先行するロード命令に依存しているか否かで命令の出力先を変更する。例えば、レジスタリネーミング１３０は、ソースオペランドが先行するロード命令に依存している場合（ステップＳ１０３、Ｙｅｓ）、つまり、対応する物理レジスタにロード依存がある場合、命令をロード依存キュー１５０にキューイングする（ステップＳ１０４）。一方、ロード依存が無い場合（ステップＳ１０３、Ｎｏ）、レジスタリネーミング１３０は、ロード依存キュー１５０をバイパスして、リザベーションステーション１６０に命令を登録する（ステップＳ１０５）。
【００４８】
図６で示す命令列の場合、図８で示すように、命令「ＡＤＤ  Ｒ９，Ｒ１，Ｒ８」と命令「ＡＤＤ  Ｒ１１，Ｒ９，Ｒ２」の２つの命令にロード依存がある。そのため、レジスタリネーミング１３０は、２つの命令、命令「ＡＤＤ  Ｒ９，Ｒ１，Ｒ８」と命令「ＡＤＤ  Ｒ１１，Ｒ９，Ｒ２」をロード依存キュー１５０にキューイングする。
【００４９】
また、本実施形態においては、リザベーションステーション１６０が２つのエントリを持つとする。そのため、レジスタリネーミング１３０は、リザベーションステーション１６０に命令「ＬＤ  Ｒ８，（Ｒ０）」と命令「ＡＤＤ  Ｒ１０，Ｒ３，Ｒ４」の２つの命令を登録する。
【００５０】
ここで、図８で示すように、先頭の命令「ＬＤ  Ｒ８，（Ｒ０）」のソースオペランド「Ｒ０」は有効である。そのため、リザベーションステーション１６０は、登録された命令「ＬＤ  Ｒ８，（Ｒ０）」を演算器１７０に発行する。
【００５１】
次に、レジスタリネーミング１３０は、命令「ＡＤＤ  Ｒ１２，Ｒ１０，Ｒ５」を登録する。その結果、リザベーションステーション１６０には、命令「ＡＤＤ  Ｒ１０，Ｒ３，Ｒ４」と命令「ＡＤＤ  Ｒ１２，Ｒ１０，Ｒ５」が登録される。上記の場合、図８で示すように、命令「ＡＤＤ  Ｒ１０，Ｒ３，Ｒ４」のソースオペランド「Ｒ３」、「Ｒ４」は有効である。そのため、リザベーションステーション１６０は、登録された命令「ＡＤＤ  Ｒ１０，Ｒ３，Ｒ４」を演算器１７０に発行する。
【００５２】
続いて、レジスタリネーミング１３０は、命令「ＡＤＤ  Ｒ１３，Ｒ６，Ｒ７」を登録する。その結果、リザベーションステーション１６０には、命令「ＡＤＤ  Ｒ１２，Ｒ１０，Ｒ５」と命令「ＡＤＤ  Ｒ１３，Ｒ６，Ｒ７」が登録される。また、リザベーションステーション１６０から命令「ＡＤＤ  Ｒ１０，Ｒ３，Ｒ４」が発行されたため、演算器１７０は命令「ＡＤＤ  Ｒ１０，Ｒ３，Ｒ４」を実行する。
【００５３】
演算器１７０による命令「ＡＤＤ  Ｒ１０，Ｒ３，Ｒ４」の実行が終わると、命令「ＡＤＤ  Ｒ１２，Ｒ１０，Ｒ５」のソースオペランド「Ｒ１０」が有効になる。また、ソースオペランド「Ｒ５」は有効である。そのため、ソースオペランド「Ｒ１０」が有効になった後、リザベーションステーション１６０は、命令「ＡＤＤ  Ｒ１２，Ｒ１０，Ｒ５」を演算器１７０に発行する。
【００５４】
レジスタリネーミング１３０は、命令「ＳＴ  （Ｒ１３），Ｒ７」を登録する。その結果、リザベーションステーション１６０には、命令「ＡＤＤ  Ｒ１３，Ｒ６，Ｒ７」と命令「ＳＴ  （Ｒ１３），Ｒ７」が登録される。また、リザベーションステーション１６０から命令「ＡＤＤ  Ｒ１２，Ｒ１０，Ｒ５」が発行されたため、演算器１７０は命令「ＡＤＤ  Ｒ１２，Ｒ１０，Ｒ５」を実行する。
【００５５】
以上が、図４で示す命令列をプロセッサコア１００で実行する場合の動作の一例である。
【００５６】
ここで、本実施形態で説明するロード依存キュー１５０を有さない場合について説明する。
【００５７】
ロード依存キュー１５０を有さない場合、例えば、図６で示す命令が上から順番にリザベーションステーション１６０に登録される。その結果、命令「ＬＤ  Ｒ８，（Ｒ０）」を演算器１７０に発行した後、リザベーションステーション１６０には、命令「ＡＤＤ  Ｒ９，Ｒ１，Ｒ８」と命令「ＡＤＤ  Ｒ１０，Ｒ３，Ｒ４」が登録される。ここで、命令「ＡＤＤ  Ｒ９，Ｒ１，Ｒ８」のソースオペランド「Ｒ８」は有効でない。そのため、リザベーションステーション１６０は、命令「ＡＤＤ  Ｒ９，Ｒ１，Ｒ８」を演算器１７０に発行しない。一方、命令「ＡＤＤ  Ｒ１０，Ｒ３，Ｒ４」のソースオペランド「Ｒ３」、「Ｒ４」は有効である。そのため、リザベーションステーション１６０は、命令「ＡＤＤ  Ｒ１０，Ｒ３，Ｒ４」をアウトオブオーダーで演算器１７０に発行する。
【００５８】
続いて、レジスタリネーミング１３０は、命令「ＡＤＤ  Ｒ１１，Ｒ９，Ｒ２」をリザベーションステーション１６０に登録する。その結果、リザベーションステーション１６０には、命令「ＡＤＤ  Ｒ９，Ｒ１，Ｒ８」と命令「ＡＤＤ  Ｒ１１，Ｒ９，Ｒ２」が登録される。また、リザベーションステーション１６０から命令「ＡＤＤ  Ｒ１０，Ｒ３，Ｒ４」が発行されたため、演算器１７０は命令「ＡＤＤ  Ｒ１０，Ｒ３，Ｒ４」を実行する。
【００５９】
上記の結果、リザベーションステーション１６０は、命令「ＡＤＤ  Ｒ９，Ｒ１，Ｒ８」のソースオペランド「Ｒ８」や命令「ＡＤＤ  Ｒ１１，Ｒ９，Ｒ２」のソースオペランド「Ｒ９」が有効となるまで、新規の命令を発行することが出来ない。つまり、先行するロード命令「ＬＤ  Ｒ８，（Ｒ０）」が完了するまで、リザベーションステーション１６０は新規の命令発行を行うことが出来なくなる。このように、ロード依存キュー１５０を有さない場合、ロード命令の完了待ちの命令でリザベーションステーション１６０が詰まってしまうことがある。その結果、リザベーションステーション１６０から新規の命令を発行することが出来なくなり、演算器１７０を効率的に活用することが出来なくなる。
【００６０】
以上のように、ロード依存キュー１５０を有さない場合、リザベーションステーション１６０による命令の発行が滞り、その結果、演算器１７０を効率的に活用出来ない事態が生じることがある。一方で、上述したように、ロード依存キュー１５０を有する場合、ロード依存のある命令をロード依存キュー１５０にキューイングすることで、ロード命令「ＬＤ  Ｒ８，（Ｒ０）」の完了を待つことなく、ロード命令「ＬＤ  Ｒ８，（Ｒ０）」と関係のない演算を演算器１７０で行うことが可能となる。つまり、ロード命令に依存する命令をロード依存キュー１５０にキューイングすることにより、リザベーションステーション１６０を効率的に活用し、演算器１７０の利用効率を向上させることが可能となる。
【００６１】
このように、本実施形態におけるプロセッサコア１００は、レジスタリネーミング１３０と、ロード依存キュー１５０と、リザベーションステーション１６０と、を有している。このような構成により、レジスタリネーミング１３０は、命令のソースオペランドが先行するロード命令に依存している場合に、命令をロード依存キュー１５０にキューイングすることが可能となる。その結果、レジスタリネーミング１３０は、ソースオペランドが先行するロード命令に依存していない命令のみを直接、リザベーションステーション１６０に登録することが可能となる。これにより、ロード命令に依存する命令のみがリザベーションステーション１６０に登録され、リザベーションステーション１６０からの新規の命令発行が出来なくなる事態の発生を抑制することが出来る。また、リザベーションステーション１６０を介して、ロード命令に依存しない命令を返して効率的に演算器１７０に発行することが可能となる。つまり、リザベーションステーション１６０を効率的に活用することが可能となり、その結果、演算器１７０を効率的に活用することが可能となる。
【００６２】
［第２の実施形態］
次に、本発明の第２の実施形態について、図９、図１０を参照して説明する。図９は、プロセッサコア２００の構成の一例を示すブロック図である。図１０は、レジスタリネーミング１３０の動作の一例を示すフローチャートである。
【００６３】
第２の実施形態では、第１の実施形態で説明した構成に加えて、発行可能キュー２１０を有するプロセッサコア２００について説明する。発行可能キュー２１０には、ソースオペランドが有効な命令がリザベーションステーション１６０をバイパスして登録される。これにより、ソースオペランドにロード依存がない命令のうち、ソースオペランドが有効でない命令のみがリザベーションステーション１６０に登録されることになる。
【００６４】
図９は、プロセッサコア２００の構成の一例を示している。図９を参照すると、プロセッサコア２００は、第１の実施形態で説明したプロセッサコア１００が有する構成に加えて、発行可能キュー２１０を有している。
【００６５】
発行可能キュー２１０は、レジスタリネーミング１３０から渡された命令を一時保持する。発行可能キュー２１０は、保持する命令を演算器１７０に発行する。
【００６６】
本実施形態の場合、レジスタリネーミング１３０は、リネーミング中に、命令のソースオペランドを参照する。そして、レジスタリネーミング１３０は、ソースオペランドが先行するロード命令に依存する命令をロード依存キュー１５０にキューイングする。一方、レジスタリネーミング１３０は、ソースオペランドが先行するロード命令に依存せず、かつ、ソースオペランドが有効でない命令をリザベーションステーション１６０に登録する。また、本実施形態の場合、レジスタリネーミング１３０は、ソースオペランドが先行するロード命令に依存せず、かつ、ソースオペランドが有効な命令を、リザベーションステーション１６０をバイパスして発行可能キュー２１０にキューイングする。
【００６７】
ここで、本実施形態で説明するプロセッサコア２００において、図４、図６で例示した命令列を実行した場合について、図９、図１０を参照して説明する。なお、以下においては、第１の実施形態と重複する説明を省略して、本実施形態に特徴的な部分について説明する。
【００６８】
リネーミング中、レジスタリネーミング１３０は、命令のソースオペランドを参照する。そして、レジスタリネーミング１３０は、参照した結果に応じて、命令をロード依存キュー１５０にキューイングするか、リザベーションステーション１６０に登録するか、発行可能キュー２１０にキューイングするか、判断する。
【００６９】
例えば、レジスタリネーミング１３０は、命令のソースオペランドを参照して（図１０のステップＳ１０２）、ソースオペランドが先行するロード命令に依存しているか否か確認する。例えば、レジスタリネーミング１３０は、ソースオペランドが先行するロード命令に依存している場合（ステップＳ１０３、Ｙｅｓ）、つまり、対応する物理レジスタにロード依存がある場合、命令をロード依存キュー１５０にキューイングする（ステップＳ１０４）。一方、ロード依存が無い場合（ステップＳ１０３、Ｎｏ）、レジスタリネーミング１３０は、ソースオペランドが有効であるか否か確認する（ステップＳ２０１）。ソースオペランドが有効である場合、レジスタリネーミング１３０は、命令を発行可能キュー２１０にキューイングする（ステップＳ２０２）。一方、ソースオペランドが有効でない場合、レジスタリネーミング１３０は、命令をリザベーションステーション１６０に登録する（ステップＳ１０５）。
【００７０】
具体的には、例えば図６で示す命令列の場合、命令「ＡＤＤ  Ｒ９，Ｒ１，Ｒ８」と命令「ＡＤＤ  Ｒ１１，Ｒ９，Ｒ２」は、ソースオペランドが先行するロード命令に依存する。そのため、レジスタリネーミング１３０は、命令「ＡＤＤ  Ｒ９，Ｒ１，Ｒ８」と命令「ＡＤＤ  Ｒ１１，Ｒ９，Ｒ２」をロード依存キュー１５０にキューイングする。また、図６のうち、命令「ＬＤ  Ｒ８，（Ｒ０）」と命令「ＡＤＤ  Ｒ１０，Ｒ３，Ｒ４」と命令「ＡＤＤ  Ｒ１３，Ｒ６，Ｒ７」は、ソースオペランドが先行するロード命令に依存せず、かつ、ソースオペランドが有効である（図８参照）。そのため、レジスタリネーミング１３０は、命令「ＬＤ  Ｒ８，（Ｒ０）」と命令「ＡＤＤ  Ｒ１０，Ｒ３，Ｒ４」と命令「ＡＤＤ  Ｒ１３，Ｒ６，Ｒ７」を発行可能キュー２１０にキューイングする。また、レジスタリネーミング１３０は、ソースオペランドが先行するロード命令に依存せず、かつ、ソースオペランドが有効でない命令をリザベーションステーション１６０に登録する。つまり、レジスタリネーミング１３０は、命令「ＡＤＤ  Ｒ１２，Ｒ１０，Ｒ５」と命令「ＳＴ  （Ｒ１３），Ｒ７」をリザベーションステーション１６０に登録する。
【００７１】
以上のように、本実施形態で説明した構成によると、図６に示す命令列中の最後の命令までリザベーションステーション１６０に登録出来ているのが分かる。
【００７２】
このように、本実施形態におけるプロセッサコア２００は、第１の実施形態で説明したプロセッサコア１００が有する構成に加えて、発行可能キュー２１０を有している。このような構成により、レジスタリネーミング１３０は、ソースオペランドが有効な場合に、リザベーションステーション１６０をバイパスして、発行可能キュー２１０に命令をキューイングすることが可能となる。その結果、所定の命令のリザベーションステーション１６０への登録をバイパスさせることが可能となり、リザベーションステーション１６０への登録を効率的に行うことが可能となる。これにより、リザベーションステーション１６０を有効に利用して、演算器１７０の利用効率を向上させることが可能となる。
【００７３】
［第３の実施形態］
次に、本発明の第３の実施形態について、図１１を参照して説明する。図１１は、ステータス表３４２の構成の一例について説明する。
【００７４】
第３の実施形態では、第１の実施形態で説明したステータス表１４２の変形例であるステータス表３４２について説明する。本実施形態において説明するステータス表３４２は、物理レジスタの値と、有効／無効と、命令と、ロード依存と、に加えて、ストア依存を対応付けている。つまり、ステータス表３４２は、第１の実施形態で説明したステータス表１４２が有する項目に追加して、ストア依存の項目を有している。本実施形態の場合、後述するように、命令発行時にストア依存有の命令が優先的に発行される。
【００７５】
図１１中のストア依存の項目は、ストア命令に依存しているか否か示している。ストア依存が「１」である場合、対応する物理レジスタにストア依存が有ることを示している。例えば、レジスタリネーミング１３０は、ストア命令のリネーミング時に、ソースオペランドの物理レジスタに対してストア依存有とする。
【００７６】
本実施形態の場合、ストア依存有の命令は優先的に発行される。例えば、発行可能キュー２１０は、自身にキューイングされている命令のうちストア依存有の命令を優先的に発行する。このようにストア命令を早く発行することにより、レジスタリネーミング１３０は、命令発行を効率化している。
【００７７】
ここで、より具体的に、図４、図６で例示した命令列を実行した場合について説明する。
【００７８】
リネーミング中、レジスタリネーミング１３０は、命令のソースオペランドを参照する。そして、レジスタリネーミング１３０は、参照した結果に応じて、命令をロード依存キュー１５０にキューイングするか、リザベーションステーション１６０に登録するか、発行可能キュー２１０にキューイングするか、判断する。
【００７９】
例えば、レジスタリネーミング１３０は、命令のソースオペランドを参照して（図１０のステップＳ１０２）、ソースオペランドが先行するロード命令に依存しているか否か確認する。例えば、レジスタリネーミング１３０は、ソースオペランドが先行するロード命令に依存している場合（ステップＳ１０３、Ｙｅｓ）、つまり、対応する物理レジスタにロード依存がある場合、命令をロード依存キュー１５０にキューイングする（ステップＳ１０４）。一方、ロード依存が無い場合（ステップＳ１０３、Ｎｏ）、レジスタリネーミング１３０は、ソースオペランドが有効であるか否か確認する（ステップＳ２０１）。ソースオペランドが有効である場合、レジスタリネーミング１３０は、命令を発行可能キュー２１０にキューイングする（ステップＳ２０２）。なお、本実施形態の場合、発行可能キュー２１０は、自身にキューイングされている命令のうちストア依存有の命令を優先的に発行する。一方、ソースオペランドが有効でない場合、レジスタリネーミング１３０は、命令をリザベーションステーション１６０に登録する（ステップＳ１０５）。
【００８０】
具体的には、図５で示す命令列の場合、命令「ＡＤＤ  Ｒ９，Ｒ１，Ｒ８」と命令「ＡＤＤ  Ｒ１１，Ｒ９，Ｒ２」は、ソースオペランドが先行するロード命令に依存する。そのため、レジスタリネーミング１３０は、命令「ＡＤＤ  Ｒ９，Ｒ１，Ｒ８」と命令「ＡＤＤ  Ｒ１１，Ｒ９，Ｒ２」をロード依存キュー１５０にキューイングする。また、図５のうち、命令「ＬＤ  Ｒ８，（Ｒ０）」と命令「ＡＤＤ  Ｒ１０，Ｒ３，Ｒ４」と命令「ＡＤＤ  Ｒ１３，Ｒ６，Ｒ７」は、ソースオペランドが先行するロード命令に依存せず、かつ、ソースオペランドが有効である（図７参照）。そのため、レジスタリネーミング１３０は、命令「ＬＤ  Ｒ８，（Ｒ０）」と命令「ＡＤＤ  Ｒ１０，Ｒ３，Ｒ４」と命令「ＡＤＤ  Ｒ１３，Ｒ６，Ｒ７」を発行可能キュー２１０にキューイングすることになる。なお、発行可能キュー２１０においては、ストア依存有の命令が優先的に発行される。そのため、上記３つの命令のうち命令「ＡＤＤ  Ｒ１３，Ｒ６，Ｒ７」が優先的に発行されることになる。また、レジスタリネーミング１３０は、ソースオペランドが先行するロード命令に依存せず、かつ、ソースオペランドが有効でない命令をリザベーションステーション１６０に登録する。つまり、レジスタリネーミング１３０は、命令「ＡＤＤ  Ｒ１２，Ｒ１０，Ｒ５」と命令「ＳＴ  （Ｒ１３），Ｒ７」をリザベーションステーション１６０に登録する。
【００８１】
以上のように、本実施形態で説明した構成によると、ストア依存のある命令を優先的に発行している。
【００８２】
このように、本実施形態の場合、ステータス表３４２にストア依存の項目を有している。このような構成により、発行可能キュー２１０などはストア依存がある命令を優先的に発行することが出来るようになる。このようにストア命令を早く実行することで、命令発行を効率化することが出来る。
【００８３】
なお、本実施形態においては、発行可能キュー２１０がストア依存に基づいて命令発行の優先度を変更する場合について例示した。しかしながら、ストア依存に基づく処理は、本実施形態で例示した場合に限定されない。例えば、リザベーションステーション１６０が命令を発行する際にストア依存の有無を確認するよう構成しても構わない。また、例えば、レジスタリネーミング１３０がストア依存を確認してキューイングする順番などを制御するよう構成しても構わない。
【００８４】
また、本実施形態で説明したステータス表３４２は、第１の実施形態で説明したプロセッサコア１００が有しても構わないし、第２の実施形態で説明したプロセッサコア２００が有しても構わない。
【００８５】
［第４の実施形態］
次に、図１２を参照して、本発明の第４の実施形態について説明する。第４の実施形態では、プロセッサコア４０の構成の概要について説明する。
【００８６】
図１２を参照すると、プロセッサコア４０は、例えば、レジスタリネーミング４１とリザベーションステーション４２とロード依存キュー４３とを有している。プロセッサコア４０は、例えば、図示しない記憶装置に格納されたプログラムを演算装置が実行することで、上記各処理部を実現する。プロセッサコア４０が有する各処理部は、ハードウェアにより実現されても構わない。
【００８７】
レジスタリネーミング４１は、命令中の論理レジスタを物理レジスタに割り当てる。
【００８８】
リザベーションステーション４２には、命令が登録される。リザベーションステーション４２は、登録された命令のソースオペランドに対応する物理レジスタが有効になると当該命令を演算器に発行する。
【００８９】
ロード依存キュー４３は、渡された命令を一時的に保持する。また、ロード依存キュー４３は、命令中のソースオペランドが先行するロード命令に依存しなくなると、当該命令をリザベーションステーションに登録する。
【００９０】
また、上述したレジスタリネーミング４１は、命令のソースオペランドが先行するロード命令に依存しているか否かに応じて、リザベーションステーション４２に命令を登録するか、ロード依存キュー４３に命令をキューイングする。つまり、レジスタリネーミング４１は、命令のソースオペランドが先行するロード命令に依存しているか否かに応じて、命令をリザベーションステーション４２に登録するかロード依存キュー４３にキューイングするか選択する。
【００９１】
このように、プロセッサコア４０は、レジスタリネーミング４１と、リザベーションステーション４２と、ロード依存キュー４３と、を有している。このような構成により、レジスタリネーミング４１は、命令のソースオペランドが先行するロード命令に依存しているか否かに応じて、命令をリザベーションステーション４２に登録するか、ロード依存キュー４３にキューイングするか選択することが可能となる。これにより、例えば、レジスタリネーミング４１は、ソースオペランドが先行するロード命令に依存している命令をロード依存キュー４３にキューイングすることが出来る。これにより、例えば、ロード命令に依存する命令のみがリザベーションステーション４２に登録されてリザベーションステーション４２から新規の命令発行が出来なくなる事態が発生するおそれを低減することが可能となる。換言すると、上記構成により、リザベーションステーション４２を効率的に活用することが可能となる。その結果、演算器１７０を効率的に活用することが可能となる。
【００９２】
また、上述したプロセッサコア４０は、当該プロセッサコア４０に所定のプログラムが組み込まれることで実現できる。具体的に、本発明の他の形態であるプログラムは、命令が登録され、登録された命令のソースオペランドに対応する物理レジスタが有効になると当該命令を演算器に発行するリザベーションステーションと、渡された命令を一時的に保持するとともに、命令中のソースオペランドが先行するロード命令に依存しなくなると、当該命令をリザベーションステーションに登録するロード依存キューと、を有するプロセッサコアに、命令中の論理レジスタを物理レジスタに割り当てるレジスタリネーミングを実現させ、レジスタリネーミングは、命令のソースオペランドが先行するロード命令に依存しているか否かに応じて、リザベーションステーションに命令を登録するか、ロード依存キューに命令をキューイングする処理を実現させるためのプログラムである。
【００９３】
また、上述したプロセッサコア４０により実行される命令制御方法は、プロセッサコアが、命令のソースオペランドが先行するロード命令に依存しているか否か確認して、ソースオペランドが先行するロード命令に依存している命令を、登録された命令のソースオペランドに対応する物理レジスタが有効になると当該命令を演算器に発行するリザベーションステーションに登録し、ソースオペランドが先行するロード命令に依存していない命令を、渡された命令を一時的に保持するとともに、命令中のソースオペランドが先行するロード命令に依存しなくなると、当該命令をリザベーションステーションに登録するロード依存キューにキューイングする、という方法である。
【００９４】
上述した構成を有する、プログラム、又は、命令制御方法、の発明であっても、上記プロセッサコア４０と同様の作用を有するために、上述した本発明の目的を達成することが出来る。
【００９５】
＜付記＞
上記実施形態の一部又は全部は、以下の付記のようにも記載されうる。以下、本発明におけるプロセッサコアなどの概略を説明する。但し、本発明は、以下の構成に限定されない。
【００９６】
（付記１）
命令中の論理レジスタを物理レジスタに割り当てるレジスタリネーミングと、
前記命令が登録され、登録された前記命令のソースオペランドに対応する物理レジスタが有効になると当該命令を演算器に発行するリザベーションステーションと、
前記命令を一時的に保持するとともに、前記命令中のソースオペランドが先行するロード命令に依存しなくなると、当該命令をリザベーションステーションに登録するロード依存キューと、
を有し、
前記レジスタリネーミングは、前記命令のソースオペランドが先行するロード命令に依存しているか否かに応じて、前記リザベーションステーションに前記命令を登録するか、前記ロード依存キューに前記命令をキューイングする
プロセッサコア。
（付記２）
付記１に記載のプロセッサコアであって、
前記レジスタリネーミングは、ソースオペランドが先行するロード命令に依存していない前記命令を前記リザベーションステーションに登録する
プロセッサコア。
（付記３）
付記１又は付記２に記載のプロセッサコアであって、
前記レジスタリネーミングは、ソースオペランドが先行するロード命令に依存している前記命令を前記ロード依存キューにキューイングする
プロセッサコア。
（付記４）
付記１から付記３までのいずれか１項に記載のプロセッサコアであって、
前記命令を一時保持するとともに、前記命令を演算器に発行する発行可能キューを有し、
前記レジスタリネーミングは、前記命令のソースオペランドが先行するロード命令に依存していない場合、ソースオペランドが有効であるか否かに応じて、当該命令を前記リザベーションステーションに登録するか、前記発行可能キューにキューイングする
プロセッサコア。
（付記５）
付記４に記載のプロセッサコアであって、
前記レジスタリネーミングは、ソースオペランドが有効である前記命令を前記発行可能キューにキューイングする
プロセッサコア。
（付記６）
付記４又は付記５に記載のプロセッサコアであって、
前記レジスタリネーミングは、ソースオペランドが有効でない前記命令を前記リザベーションステーションに登録する
プロセッサコア。
（付記７）
付記４から付記６までのいずれか１項に記載のプロセッサコアであって、
前記発行可能キュー又は前記リザベーションステーションのうちの少なくとも一つは、ストア命令に依存している前記命令を優先的に発行する
プロセッサコア。
（付記８）
付記１から付記７までのいずれか１項に記載のプロセッサコアであって、
物理レジスタの番号と、対応する物理レジスタにロード命令依存があるか否かを示すロード命令依存と、を対応づけたステータス表を記憶しており、
前記リザベーションステーションは、前記ステータス表を用いて前記命令のソースオペランドが先行するロード命令に依存しているか否か判断する
プロセッサコア。
（付記９）
命令が登録され、登録された前記命令のソースオペランドに対応する物理レジスタが有効になると当該命令を演算器に発行するリザベーションステーションと、前記命令を一時的に保持するとともに、前記命令中のソースオペランドが先行するロード命令に依存しなくなると、当該命令をリザベーションステーションに登録するロード依存キューと、を有するプロセッサコアに、
前記命令中の論理レジスタを物理レジスタに割り当てるレジスタリネーミングを実現させ、
前記レジスタリネーミングは、前記命令のソースオペランドが先行するロード命令に依存しているか否かに応じて、前記リザベーションステーションに前記命令を登録するか、前記ロード依存キューに前記命令をキューイングする
プログラム。
（付記１０）
プロセッサコアが、
命令のソースオペランドが先行するロード命令に依存しているか否か確認して、ソースオペランドが先行するロード命令に依存している前記命令を、前記命令のソースオペランドに対応する物理レジスタが有効になると当該命令を演算器に発行するリザベーションステーションに登録し、ソースオペランドが先行するロード命令に依存していない前記命令を、前記命令を一時的に保持するとともに、前記命令中のソースオペランドが先行するロード命令に依存しなくなると、当該命令をリザベーションステーションに登録するロード依存キューにキューイングする
命令制御方法。
【００９７】
なお、上記各実施形態及び付記において記載したプログラムは、記憶装置に記憶されていたり、コンピュータが読み取り可能な記録媒体に記録されていたりする。例えば、記録媒体は、フレキシブルディスク、光ディスク、光磁気ディスク、及び、半導体メモリ等の可搬性を有する媒体である。
【００９８】
以上、上記各実施形態を参照して本願発明を説明したが、本願発明は、上述した実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明の範囲内で当業者が理解しうる様々な変更をすることが出来る。
【符号の説明】
【００９９】
１００  プロセッサコア
１１０  命令フェッチ／デコードユニット
１２０  命令キュー
１３０  レジスタリネーミング
１４０  リネーミングテーブル
１４１  対応表
１４２  ステータス表
１５０  ロード依存キュー
１６０  リザベーションステーション
１７０  演算器
２００  プロセッサコア
２１０  発行可能キュー
３４２  ステータス表
４０  プロセッサコア
４１  レジスタリネーミング
４２  リザベーションステーション
４３  ロード依存キュー
【図１】
2019169082.tif 000003
【図２】
2019169082.tif 000004
【図３】
2019169082.tif 000005
【図４】
2019169082.tif 000006
【図５】
2019169082.tif 000007
【図６】
2019169082.tif 000008
【図７】
2019169082.tif 000009
【図８】
2019169082.tif 000010
【図９】
2019169082.tif 000011
【図１０】
2019169082.tif 000012
【図１１】
2019169082.tif 000013
【図１２】
2019169082.tif 000014