(57)【特許請求の範囲】
【請求項１】
実行対象となる複数の命令で構成される本スレッドを実行し、並びに、所定のスレッドに必要な情報をプリフェッチする一つまたは複数の命令を先行サブスレッドとして当該本スレッドから選択して当該所定のスレッドに先行して実行する中央処理装置であって、
命令を解釈するデコーダと、
実行される命令を記憶するキューと、
前記デコーダによるデコード結果を受け付け、受け付けたデコード結果から先行サブスレッドを命令種別に基づいて選択し、選択した先行サブスレッドを前記キューに格納する選択回路と
を備えることを特徴とする中央処理装置。
【請求項２】
前記選択回路は、前記本スレッドを構成する各々の命令の命令種別を判別して前記先行サブスレッドを選択することを特徴とする請求項１に記載の中央処理装置。
【請求項３】
前記選択回路は、前記命令種別として、レジスタに格納されるデータをメモリに格納するストア命令または浮動小数点演算命令に該当するかを判別し、該当しない命令を選択することで前記先行サブスレッドを選択することを特徴とする請求項２に記載の中央処理装置。
【請求項４】
実行対象となる複数の命令で構成される本スレッドを実行し、並びに、所定のスレッドに必要な情報をプリフェッチする一つまたは複数の命令を先行サブスレッドとして当該本スレッドから選択して当該所定のスレッドに先行して実行する中央処理装置に設けられた選択回路であって、
命令を解釈するデコーダからデコード結果を受け付け、受け付けたデコード結果から先行サブスレッドを命令種別に基づいて選択し、実行される命令を記憶するキューに選択した先行サブスレッドを格納することを特徴とする選択回路。
【請求項５】
実行対象となる複数の命令で構成される本スレッドを実行し、並びに、所定のスレッドに必要な情報をプリフェッチする一つまたは複数の命令を先行サブスレッドとして当該本スレッドから選択して当該所定のスレッドに先行して実行する中央処理装置における選択方法であって、
命令を解釈するデコーダからデコード結果を受け付ける受け付けステップと、
受け付けたデコード結果から先行サブスレッドを命令種別に基づいて選択する選択ステップと、
実行される命令を記憶するキューに選択した先行サブスレッドを格納する格納ステップと
を含んだことを特徴とする選択方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、中央処理装置、選択回路および選択方法に関する。
【背景技術】
【０００２】
従来より、マルチスレッドの処理能力を向上させる技術として、例えば、ＣＭＰ（Ｃｈｉｐ−ｌｅｖｅｌ  Ｍｕｌｔｉ  Ｐｒｏｃｅｓｓｏｒ）やＳＭＴ（Ｓｉｍｕｌｔａｎｅｏｕｓ  Ｍｕｌｔｉ−Ｔｈｒｅａｄ）といった技術が知られている。具体的には、ＣＭＰやＳＭＴは、複数のスレッドを空間的ないし時間的に並列に実行する技術である。ここで、プログラムは少なくても一つ（通常は、複数）のスレッドによって構成され、スレッドとは、プログラムの実行単位である。例えば、ＣＰＵがマルチスレッド実行に対応する場合には、各スレッドごとに処理を行うことになる。
【０００３】
ＣＭＰは、マルチスレッド実行を行うことを目的として、一つのＣＰＵダイ（半導体本体）に複数のコアを搭載し、個々のコアがそれぞれ独自にスレッドを実行する技術である。例えば、ＣＭＰでは、図９の（１）に示すように、コアが、一つのＣＰＵダイに複数搭載され、複数のコアが大容量のＬ２キャッシュを共有する。このような構成のうえで、ＣＭＰでは、個々のコアがそれぞれ独自にスレッドを実行することにより、複数のスレッドを空間的ないし時間的に並列に実行する。
【０００４】
また、ＳＭＴは、マルチスレッド実行を行うことを目的として、１コアのＣＰＵを複数のＣＰＵとして（言い換えると、一つのコアを、複数のコアとして）振る舞わせて、複数のスレッドを同時に実行する技術である。例えば、ＳＭＴでは、図９の（２）に示すように、一つのコアが、ひとつのＣＰＵダイに搭載される。このような構成のうえで、ＳＭＴでは、一つのコアが二つのコアとして振る舞うことにより、二つのスレッドを空間的ないし時間的に並列に実行する。なお、特許文献１には、ＳＭＴにおいて、プロセッサ環境を切り替える際に（例えば、ＣＰＵが、一つのスレッドを実行し、その後、他方のスレッドを実行するために、各種データ（例えば、使用するデータが格納されたレジスタのアドレスなど）を変更する処理を行う際に）、負荷を低減することを目的とした技術が開示されている。
【０００５】
また、従来より、単一スレッドの性能を向上させる技術（複数のスレッドを並行して処理する場合に、個々のスレッドの処理速度を向上させる技術）として、性能を向上させたいスレッド（以下、本スレッドと記載する）のサブセットを別スレッド（以下、先行サブスレッドと記載する）として先行して実行することで、本スレッドの性能向上を図る技術が知られている。ここで、スレッドとは、複数の命令の集合体である。また、本スレッドとは、スレッドのうち、性能向上を図る対象となるスレッドである。例えば、本スレッドを実行する際に、必要なデータをメモリからフェッチする処理を省略（または、フェッチする処理時間を短縮）することを目的として、先行サブスレッドを実行し、本スレッドの実行に必要なデータをメモリからプリフェッチすることにより、単一スレッドの性能を向上させる。
【０００６】
上記したような単一スレッドの性能を向上させる技術として、例えば、非特許文献１には、Ｓｌｉｐ  Ｓｔｒｅａｍ（本件明細書における以下の記載では、「ＳＳ」と記載する）という技術が開示されており、非特許文献２には、Ｄｙｎａｍｉｃ  Ｓｐｅｃｕｌａｔｉｖｅ  Ｐｒｅ−ｃｏｍｐｕｔａｔｉｏｎ（本件明細書における以下の記載では、「ＤＳＰ」と記載する）という技術が開示されている。
【０００７】
ここで、上記した「ＳＳ」や「ＤＳＰ」といった技術について、さらに詳細に説明する。これらの技術（「ＳＳ」や「ＤＳＰ」）では、本スレッドを構成する命令がリタイアした後（本スレッドの実行後）に、命令間のデータ依存解析を行うことにより、先行サブスレッドを選択する。言い換えると、これらの技術（「ＳＳ」や「ＤＳＰ」）では、本スレッドの各命令を実行した後に、各命令を実行した結果得られる実行結果や各命令で用いられるデータが、他のスレッドを実行する際に用いられるかどうかを判別する。そして、これらの技術（「ＳＳ」や「ＤＳＰ」）では、このようにして各命令間におけるデータの依存関係を把握した上で、性能向上を図りたいスレッド（本スレッド）からデータ依存関係がある命令を検出し、検出した命令を先行サブスレッドとして選択する。例えば、これらの技術（「ＳＳ」や「ＤＳＰ」）では、命令（１）から命令（８）までで構成される本スレッドである場合に、命令（１）とデータの依存関係にある命令（例えば、命令（６）、（７）および（８））を検出し、検出した命令を先行サブスレッド（命令（１）、（６）、（７）および（８））として選択する。
【０００８】
さらに、「ＳＳ」について具体的な例をあげて説明すると、「ＳＳ」では、（１）結果を後続命令に参照されていない命令（Ｕｎ−ｒｅｆｅｒｅｎｃｅｄ  ｗｒｉｔｅｓ）と、（２）更新前と同じ値を書き込んでいる命令（ｎｏｎ−ｍｏｄｉｆｙｉｎｇ  ｗｒｉｔｅｓ）と、（３）分岐予測の容易な分岐命令とを、命令リタイア時に検出する。その後、「ＳＳ」では、命令間のデータ依存解析をさかのぼって行う。その際、「ＳＳ」では、上記命令（（１）〜（３））と、上記命令実行に必要なデータのみを選択している命令とを、本スレッドから取り除く。そして、「ＳＳ」では、残った命令を、先行サブスレッドとして選択する。
【０００９】
さらに、「ＤＳＰ」について具体的な例をあげて説明すると、「ＤＳＰ」では、（４）キャッシュミス（Ｃａｃｈｅ−ｍｉｓｓ）を頻発する命令（Ｄｅｌｉｎｑｕｅｎｔ  ｌｏａｄ）を命令リタイア時に検出する。その後、「ＤＳＰ」では、各命令間のデータ依存解析をさかのぼって行う。その際、上記命令（（４））と、上記命令実行に必要なデータを選択している命令とを、先行サブスレッドとして選択する。
【００１０】
【特許文献１】特開２００５−２８４７４９号公報
【非特許文献１】Ｓｌｉｐ  Ｓｔｒｅａｍ  Ｋ．  Ｓｕｎｄａｒａｍｏｏｒｔｈｙ，  Ｚ．  Ｐｕｒｓｅｒ，  ａｎｄ  Ｅ．  Ｒｏｔｅｎｂｅｒｇ，  “Ｓｌｉｐｓｔｒｅａｍ  Ｐｒｏｃｅｓｓｏｒｓ：  Ｉｍｐｒｏｖｉｎｇ  ｂｏｔｈ  Ｐｅｒｆｏｒｍａｎｃｅ  ａｎｄ  Ｆａｕｌｔ  Ｔｏｌｅｒａｎｃｅ”，  ｉｎ  ９ｔｈ  ＡＳＰＬＯＳ，  Ｎｏｖ．  ２０００．  Ｆｉｇ．１
【非特許文献２】Ｄｙｎａｍｉｃ  Ｓｐｅｃｕｌａｔｉｖｅ  Ｐｒｅ−ｃｏｍｐｕｔａｔｉｏｎ  Ｊａｍｉｓｏｎ  Ｄ．Ｃｏｌｌｉｎｓｙ，  Ｄｅａｎ  Ｍ．Ｔｕｌｌｓｅｎｙ，  Ｈｏｎｇ  Ｗａｎｇｚ，  Ｊｏｈｎ  Ｐ．Ｓｈｅｎｚｙ，  “Ｄｙｎａｍｉｃ−Ｓｐｅｃｕｌａｔｉｖｅ  Ｐｒｅｃｏｍｐｕｔａｔｉｏｎ”，  ｉｎ  ３４ｔｈ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｍｉｃｒｏ−ａｒｃｈｉｔｅｃｔｕｒｅ，  Ｄｅｃｅｍｂｅｒ，  ２００１．  Ｆｉｇ．１
【発明の開示】
【発明が解決しようとする課題】
【００１１】
ところで、上記した従来の技術は、以下で説明するように、一度も実行していない本スレッドからは、先行サブスレッドを選択できないという課題があった。
【００１２】
具体的には、上記した従来技術（「ＳＳ」や「ＤＳＰ」）では、本スレッドを構成する命令のリタイア時に命令間のデータ依存解析を行うことで、先行サブスレッドを識別して選択するため、一度も実行していない本スレッドからは、先行サブスレッドを選択できない。言い換えると、従来の技術（「ＳＳ」や「ＤＳＰ」）では、先行サブスレッドが選択されるのは、本スレッドが少なくとも一度実行された後であり、一度も実行していない本スレッドからは、先行サブスレッドを選択できない。
【００１３】
そこで、この発明は、上述した従来技術の課題を解決するためになされたものであり、一度も実行していない本スレッドから、先行サブスレッドを選択することが可能な中央処理装置、選択回路および選択方法を提供することを目的とする。
【課題を解決するための手段】
【００１４】
上述した課題を解決し、目的を達成するため、本発明は、実行対象となる複数の命令で構成される本スレッドを実行し、並びに、所定のスレッドに必要な情報をプリフェッチする一つまたは複数の命令を先行サブスレッドとして当該本スレッドから選択して当該所定のスレッドに先行して実行する中央処理装置であって、前記本スレッドの実行結果を解析して得られる命令各々間での関係ではなく、前記本スレッドを構成する命令各々が前記中央処理装置に指示する内容を判別して前記先行サブスレッドを選択する選択手段を備えることを特徴とする。
【００１５】
また、本発明は、上記の発明において、前記選択手段は、前記内容として、前記スレッドを構成する各々の命令種別を判別して前記先行サブスレッドを選択することを特徴とする。
【００１６】
また、本発明は、上記の発明において、前記選択手段は、前記命令種別として、レジスタに格納されるデータをメモリに格納するストア命令または浮動小数点演算命令に該当するかを判別し、該当しない命令を選択することで前記先行サブスレッドを選択することを特徴とする。
【発明の効果】
【００１７】
本発明によれば、一度も実行していない本スレッドから、先行サブスレッドを選択することが可能である。
【００１８】
また、本発明によれば、命令種別を確認するだけで簡単に先行サブスレッドを選択することが可能である。
【００１９】
また、本発明によれば、ストア命令と浮動小数点命令とを除外するのみで、簡単に先行サブスレッドを選択することが可能である。
【発明を実施するための最良の形態】
【００２０】
以下に添付図面を参照して、この発明に係る中央処理装置、選択回路および選択方法の実施例を詳細に説明する。なお、以下では、本実施例で用いる主要な用語、本実施例に係る先行サブスレッド識別回路の概要および特徴、中央処理装置の構成および処理の流れを順に説明し、最後に本実施例に対する種々の変形例を説明する。
【実施例１】
【００２１】
［用語の説明］
まず最初に、図９を用いて、本実施例で用いる主要な用語を説明する。図９は、ＣＭＰおよびＳＭＴについて説明するための図である。本実施例で用いる「ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓ  Ｕｎｉｔ）（特許請求の範囲に記載の「中央処理装置」に対応する。）」とは、コンピュータを構成する部品の一つで、各装置の制御やデータの計算・加工を行なう。例えば、ＣＰＵとは、メモリに記憶されたプログラムを実行し、入力装置や記憶装置からデータを受け取り、演算・加工した上で、出力装置や記憶装置に出力する。なお、ＣＰＵとは、ＣＰＵダイ（半導体本体）に、コアが搭載されたものである。また、コアとは、ＣＰＵの核となる内部回路であって、演算回路やキャッシュメモリ、レジスタといった演算処理にかかわるユニットが統合的に配置されているものである。
【００２２】
また、本実施例で用いるＣＰＵは、マルチスレッド実行を行うものであり、例えば、ＣＭＰ（Ｃｈｉｐ−Ｌｅｖｅｌ  Ｍｕｌｔｉ  Ｐｒｏｃｅｓｓｏｒ）やＳＭＴ（Ｓｉｍｕｌｔａｎｅｏｕｓ  Ｍｕｌｔｉ−Ｔｈｒｅａｄ）がこれに該当する。ここで、プログラムは少なくても一つ（通常は、複数）のスレッドによって構成され、スレッドとは、プログラムの実行単位である。例えば、ＣＰＵがマルチスレッド実行に対応する場合には、ＣＰＵは、各スレッドごとに処理を行うことになる。
【００２３】
また、ＣＭＰとは、マルチスレッド実行を行うために、一つのＣＰＵダイ（半導体本体）に複数のコアを搭載し、個々のコアがそれぞれ独自にスレッドを実行する技術である。例えば、ＣＭＰでは、図９の（１）に示すように、コアが、一つのＣＰＵダイに複数搭載され、複数のコアが大容量のＬ２キャッシュを共有する。このような構成のうえで、ＣＭＰでは、個々のコアが、それぞれ独自にスレッドを実行する。また、ＳＭＴとは、マルチスレッド実行を行うために、１コアのＣＰＵを２つのＣＰＵとして（言い換えると、一つのコアを、複数（例えば二つ）のコアとして）振る舞わせて、複数の実行スレッドを同時に実行する技術である。
【００２４】
また、ＳＭＴでは、図９の（２）に示すように、一つのコアが、ひとつのＣＰＵダイに搭載される。このような構成のうえで、ＳＭＴでは、一つのコアが、二つのコアとして振舞うことにより、複数の実行スレッドを同時に実行する。なお、ＣＭＰとＳＭＴとは択一的なものではなく、両方を同時に適用することも可能である。
【００２５】
ここで、例えば、マルチスレッド実行に対応する場合には複数のスレッドに分割されて各スレッドごとに処理されるプログラムであっても、ＣＰＵがマルチスレッド実行に対応しない場合には、プログラムはシングルスレッドとして（複数のスレッドに分割されて処理されることなく一つのスレッド（実行単位）として）処理されることになる。またスレッドとは、複数の命令の集合体である。また、本スレッドとは、スレッドのうち、性能向上を図る対象となるスレッドである。
【００２６】
本実施例で用いる命令種別とは、上記した命令がＣＰＵに指示する内容の種類である。例えば、メモリ（例えば、キャッシュや、ＣＰＵ外に設けられるメモリなど）から、レジスタファイルにデータをロードする「ロード命令」や、レジスタファイルに格納されているデータをメモリに格納する「ストア命令」や、数値を、各桁の値の並びである「仮数部」と、小数点の位置を表わす「指数部」とで表現して演算する「浮動小数点演算命令」などがある。
【００２７】
上記したマルチスレッド実行とは、複数の実行スレッドを同時に実行することである。例えば、ＣＭＰにおけるマルチスレッド実行は、一つのＣＰＵダイに搭載された複数のコアそれぞれが、スレッドを実行することによって、一つのＣＰＵが、複数の処理を同時に行うものである。また、例えば、ＳＭＴにおけるマルチスレッド実行は、ＣＰＵの処理時間を非常に短い単位に分割し、複数のスレッドに順番に割り当てることによって、一つのＣＰＵ（一つのコア）が、複数の処理を同時に行っているようにみせているものである。
【００２８】
また、本実施例で用いるＣＰＵは、アウトオブオーダ（Ｏｕｔ−ｏｆ−Ｏｒｄｅｒ）実行を行うものであるとして説明する。
【００２９】
上記したアウトオブオーダ実行とは、依存関係にない複数の命令を、プログラム中での出現順序に関係なく次々と実行するものである。言い換えると、アウトオブオーダ実行とは、プログラムに記述された命令の順番に関係なく、処理に必要なデータが揃った命令から実行する仕組みである。例えば、アウトオブオーダ実行では、先の命令処理に必要なデータが揃っていなくても、後の命令処理に必要なデータが揃っていた場合、後の命令から先に実行する。また、インオーダ（Ｉｎ−Ｏｒｄｅｒ）実行とは、プログラム中での出現順序に従って、次々と実行するものである。言い換えると、インオーダ実行とは、プログラムに記述された命令の順番に従って実行する仕組みである。なお、本実施例で用いるＣＰＵは、アウトオブオーダ実行を行うものであるとして説明するが、インオーダ実行を行うものであってもよい。
【００３０】
プリフェッチとは、ＣＰＵがデータをあらかじめキャッシュメモリに読み出しておく機能のことである。
【００３１】
［先行サブスレッド識別回路の概要および特徴］
まず最初に、図１を用いて、本実施例に係るＣＰＵ１００に設けられる先行サブスレッド識別回路１１（特許請求の範囲に記載の「選択回路」に対応する）の概要および特徴を説明する。図１は、先行サブスレッド識別回路の概要と特徴を説明するための図である。
【００３２】
同図に示すように、実施例１に係るＣＰＵ１００は、本発明に密接に関連するものとして、Ｄｅｃｏｄｅ１０と、先行サブスレッド識別回路１１と、Ｑｕｅｕｅ１２とを備える。ここで、Ｑｕｅｕｅ１２は、処理されるのを待っている命令を記憶するものである。
【００３３】
このような構成のもと、実施例１に係るＣＰＵ１００は、実行対象となる複数の命令で構成される本スレッドを実行し、並びに、所定のスレッドに必要な情報をプリフェッチする一つまたは複数の命令を先行サブスレッド（特許請求の範囲に記載の「先行サブスレッド」に対応する）として本スレッドから選択して所定のスレッドに先行して実行することを概要とし、一度も実行していない本スレッドから、先行サブスレッドを選択することが可能である点に主たる特徴がある。
【００３４】
かかる特徴は、主に、先行サブスレッド識別回路１１によって実現されるものであるので、以下では、先行サブスレッド識別回路１１を中心に説明を行い、実施例１に係るＣＰＵ１００における本スレッドの実行に関しては、説明を省略する。
【００３５】
まず、実施例１に係るＣＰＵ１００では、図１の（１）に示すように、Ｄｅｃｏｄｅ１０が、命令がどのような命令かを解釈し、先行サブスレッド識別回路１１に命令を送信する。例えば、図１の（１）に示す例では、Ｄｅｃｏｄｅ１０が、各命令の内容を解釈し、本スレッドを構成する命令（１）〜（８）を先行サブスレッド識別回路１１に送信する。
【００３６】
次に、実施例１に係るＣＰＵ１００では、先行サブスレッド識別回路１１が、図１の（２）に示すように、本スレッドの実行結果を解析して得られる命令各々間での関係ではなく、本スレッドを構成する命令各々がＣＰＵ１００に指示する内容を判別して先行サブスレッドを選択する。例えば、図１の（２）に示す例では、先行サブスレッド識別回路１１が、所定の命令種別を判別して、ストア命令または浮動小数点演算命令ではない命令である命令（１）、（６）、（７）および（８）を、先行サブスレッドとして選択する。
【００３７】
そして、実施例１に係るＣＰＵ１００では、先行サブスレッド識別回路１１が、図１の（３）に示すように、先行サブスレッドのみをＱｕｅｕｅ１２に送信する。
【００３８】
ここで、上記したように、先行サブスレッド識別回路１１は、マルチスレッド実行用に追加された構成において実行されるため、本スレッドとは独立に動作する。そして、先行サブスレッド識別回路１１は、先行サブスレッドの命令をデコードした後、デコードされた命令種別に応じて、先行サブスレッドとして必要な命令を識別して、Ｑｕｅｕｅ１２に送信する。
【００３９】
このようなことから、実施例１に係るＣＰＵ１００は、上記した主たる特徴の如く、一度も実行していない本スレッドから、先行サブスレッドを選択することが可能である。
【００４０】
すなわち、従来の手法においては、ＣＰＵは、本スレッドを構成する命令がリタイアした後（本スレッドの実行後）に、命令間のデータ依存解析を行うことにより、先行サブスレッドを選択して実行していた。言い換えれば、従来の手法においては、本スレッドが一度も実行していない命令をサブスレッドとして先行実行することはできず、本スレッドの性能向上の制約となる。このような従来の手法に対して、実施例１に係るＣＰＵは、本スレッドが実行されるか否かとは関係なく、本スレッドの実行から独立して、先行サブスレッドを選択することが可能である点に特徴がある。
【００４１】
［ＣＰＵの構成］
次に、図２〜図５を用いて、実施例１に係るＣＰＵ１００の構成を説明する。ここで、図２は、中央処理装置（ＣＭＰ）の構成を示すブロック図である。図３は、ソースおよび本スレッド列および先行サブスレッド列の一例を示す図である。図４は、先行サブスレッド識別回路２９の回路図の一例を示す図である。図５は、先行サブスレッド識別回路による効果を説明するための図である。なお、以下では、特に言及がない限り、ＣＭＰに本発明を適用した場合におけるＣＰＵ１００の構成について説明する。
【００４２】
まず、ＣＰＵ１００を構成する各構成間の連結関係について、簡単に説明する。図２に示すように、Ｌ２キャッシュ２０は、Ｉキャッシュ２１とＤキャッシュ２３とに接続される。また、Ｉキャッシュ２１は、Ｌ２キャッシュ２０とＰＣ２６とＤｅｃｏｄｅ２７とに接続される。また、Ｑｕｅｕｅ２２は、Ｄｅｃｏｄｅ２７とＲＯＢ２４とに接続される。また、Ｄキャッシュ２３は、ＲＯＢ２４とＥＸ２８とに接続される。また、ＲＯＢ２４は、Ｑｕｅｕｅ２２とＲＦ２５とＤキャッシュ２３とＥＸ２８とに接続される。また、ＲＦ２５は、ＲＯＢ２４に接続される。また、ＰＣ２６は、Ｉキャッシュ２１に接続される。また、Ｄｅｃｏｄｅ２７は、Ｉキャッシュ２１とＱｕｅｕｅ２２とに接続される。また、ＥＸ２８は、ＲＯＢ２４とＤキャッシュ２３とＲＦ２５とに接続される。
【００４３】
Ｌ２（ｌｅｖｅｌ２）キャッシュは、ＣＰＵ内部（コア外部）に設けられたキャッシュメモリの一種で、使用頻度の高い命令やデータを記憶する。例えば、Ｌ２キャッシュ２０は、図３に示す命令（１）〜（８）や命令実行に用いるデータ（オペランド）を記憶する。
【００４４】
Ｉ（インストラクション）キャッシュは、ＣＰＵ内部（コア内部）に設けられたキャッシュメモリの一種で、命令を記憶する。例えば、Ｉキャッシュ２１は、図３に示す命令（１）〜（８）を記憶する。また、Ｉキャッシュ２１は、コア内部に設けられているため、コア外に設置されているＬ２キャッシュ２０と比較して、後述するＰＣ２６が、より高速にアクセスするキャッシュである。
【００４５】
Ｑｕｅｕｅ２２は、何らかの処理を待たせる際に用いられ、具体的には、後述するＥＸ２８によって処理されるのを待っている命令を記憶する。例えば、Ｑｕｅｕｅ２２は、後述するＤｅｃｏｄｅ２７によってどのような命令かを解釈された命令を、本来の実行順番（アウトオブオーダ的に実行される場合における命令の実行順番ではなく、インオーダ的に実行される場合における命令の実行順番）で記憶する。
【００４６】
Ｄキャッシュ２３は、ＣＰＵ内部（コア内部）に設けられたキャッシュメモリの一種で、データ（オペランド）を記憶する。具体的には、ロード命令でＤキャッシュ２３の指定されたアドレスの内容を後述するＲＯＢ２４に転送する。またストア命令により、後述するＲＯＢ２４ないしＲＦ２５の内容をＤキャッシュ２３の指定されたアドレスに転送する。
【００４７】
ＲＯＢ２４（Ｒｅｏｒｄｅｒ  Ｂｕｆｆｅｒ）は、アウトオブオーダ実行機能を備えるＣＰＵ内部（コア内部）に設けられたバッファであって、キューに記憶された命令に対して割り当てられ、アウトオブオーダ的に命令が実行されて得られた命令の実行結果を記憶する。またＲＯＢ２４は後述するＲＦ２５と共に、命令の実行に必要なソースデータ（オペランド）を後述するＥＸ２８に供給する。
【００４８】
ＲＦ２５（Ｒｅｇｉｓｔｅｒ  Ｆｉｌｅ）は、ＣＰＵ内部（コア内部）に設けられた記憶素子であり、演算や実行状態の保持に用いられ、データ（オペランド）（例えば、他の命令の実行結果を利用する場合など）や命令の実行結果を記憶する。具体的には、ＲＯＢ２４に記憶された命令の実行結果は、命令コミット時に本来の実行順番に対応する順番でＲＦ２５に転送される。このときＲＯＢ２４に記憶された実行結果は削除される。またＲＦ２５はＲＯＢ２４と共に、命令の実行に必要なデータ（オペランド）を後述するＥＸ２８に供給する。
【００４９】
ＰＣ（命令制御部）２６は、Ｉキャッシュ２１から、命令を読み取る（フェッチする）。例えば、ＰＣ（命令制御部）２６は、命令実行タイミングとなると、実行する命令がＩキャッシュ２１に記憶されているかを確認し、記憶されている場合には、実行する命令を読み取る。一方、例えば、ＰＣ（命令制御部）２６は、実行する命令がＩキャッシュ２１に記憶されていない場合には、Ｌ２キャッシュ２０から実行する命令を読み取り、Ｉキャッシュ２１に記憶させ、Ｉキャッシュ２１から、命令を読み取るなどする。なお、ＰＣ（命令制御部）２６は、Ｌ２キャッシュ２０にも実行する命令が記憶されていない場合には、ＣＰＵ外に設けられたメモリ（図示していない）から実行する命令を読み取り、Ｌ２キャッシュ２０に記憶させ、Ｉキャッシュ２１に記憶させ、Ｉキャッシュ２１から、命令を読み取る。
【００５０】
Ｄｅｃｏｄｅ２７は、命令がどのような命令かを解釈（命令解釈）する。例えば、Ｄｅｃｏｄｅ２７は、実行する命令がＰＣ２６によって読み取られると、読み取られた命令を解釈する。そして、Ｄｅｃｏｄｅ２７は、Ｑｕｅｕｅ２２に空きがあるかを判別する。ここで、Ｑｕｅｕｅ２２に空きがある場合には、命令を実行するために必要な処理を実行させるための制御信号を、本来の実行順番でＱｕｅｕｅ２２に向けて送る。一方、Ｄｅｃｏｄｅ２７は、Ｑｕｅｕｅ２２に空きがない場合には、空きができるまで空きがあるかを判別する。またＲＯＢ２４は、命令がＱｕｅｕｅ２２に記憶された時点で結果格納用のエントリを割り当てる。
【００５１】
ＥＸ２８は、対応する命令実行に必要なオペランドをＲＯＢ２４ないしＲＦ２５から取得する。例えば、ＥＸ２８は、Ｑｕｅｕｅ２２に記憶された命令に対して、ＲＯＢ２４ないしＲＦ２５に必要なオペランドをリクエストする。命令が演算命令の場合、ＥＸ２８は取得したオペランドを使用して演算を実行し、結果を割り当てられたＲＯＢ２４に記憶させる。一方命令がロード命令の場合、ＥＸ２８は取得したオペランドを使用してアドレス計算を実行し、Ｄキャッシュ２３に対して該当アドレスのデータをリクエスト（要求）する。ここで、ＥＸ２８は、Ｄキャッシュ２３に必要なデータが記憶されている場合には、データを取得し、割り当てられているＲＯＢ２４に取得したデータを記憶させる。一方、ＥＸ２８は、Ｄキャッシュ２３に必要なデータが記憶されていない場合には、Ｌ２キャッシュ２０に対して必要なデータをリクエスト（要求）する。ここで、ＥＸ２８は、Ｌ２キャッシュ２０に必要なデータが記憶されている場合には、データを取得し、取得したデータをＤキャッシュ２３に記憶させ、割り当てられたＲＯＢ２４に記憶させる。一方、ＥＸ２８は、必要なデータがＬ２キャッシュ２０に記憶されていない場合には、必要なデータがリクエストを出したキャッシュやバッファに記憶されるまで待機する。そして、必要なデータが記憶されると、データを取得し、割り当てられたＲＯＢ２４に記憶させる。さらに詳細な一例をあげて説明すると、必要なオペランドが他の命令の実行結果である場合に、ＥＸ２８は、他の命令が実行されて実行結果がＲＯＢ２４に記憶されると、ＲＯＢ２４からオペランド（他の命令の実行結果）を取得する。実行結果がＲＯＢ２４からＲＦ２５に転送済みの場合は、ＲＯＢ２５から取得する。
【００５２】
なお、本実施例では、上記した、ＥＸ２８と、Ｌ２キャッシュ２０とＤキャッシュ２３とＲＯＢ２４とＲＦ２５との間の関係を用いて記載するが、本発明はこれに限定されるものではなく、ＥＸ２８（または、ＣＰＵ１００）は、任意のキャッシュやバッファからオペランドを取得してよい。例えば、本実施例では、Ｌ２キャッシュとＤキャッシュの２階層のキャッシュを備える場合について説明するが、Ｌ３キャッシュを備えていてもよい。
【００５３】
また、ＥＸ２８（Ｅｘｅｃｕｔｉｏｎ  Ｕｎｉｔ）は、キューに記憶されている命令の中から実行できる命令を選択して、処理能力を割り当てる。例えば、ＥＸ２８は、ＥＸ２８の処理能力に空きがあるかを判別する。ここで、ＥＸ２８は、ＥＸ２８の処理能力に空きがない場合には、空きができるまで判別を続行する。一方、ＥＸ２８は、ＥＸ２８の処理能力に空きがある場合には、キューに記憶されている実行待ち状態にある命令のなかから、すぐに実行できる命令を取得し、処理能力を割り当てる。さらに詳細には、ＥＸ２８は、すぐに実行できる命令として、命令実行に必要なオペランドがＲＯＢ２４ないしＲＦ２５に記憶されているものを取得する。
【００５４】
また、ＥＸ２８は、命令を実行（演算）する。例えば、ＥＸ２８は、処理能力を割り当てた命令を実行する際に必要なオペランドをＲＯＢ２４ないしＲＦ２５から取得し、命令を実行する。そして、例えば、ＥＸ２８は、命令を実行して得られた実行結果を、ＲＯＢ２４に記憶させる。
【００５５】
また、ＲＯＢ２４は、本来の実行順番に対応する順番で、実行結果をＲＦ２５に記憶させる。例えば、ＲＯＢ２４は、コミットがあった場合に（該当する命令の処理を完了させていいと判断した場合に）、本来の実行順番に対応する順番で、ＲＯＢ２４に記憶されている実行結果をＲＦ２５に転送する。さらに詳細には、ＥＸ２８は、図３に示した命令１の実行結果をＲＯＢ２４に記憶し、その後、命令３の実行結果をＲＯＢ２４に記憶し、続いて、命令４の実行結果をＲＯＢ２４に記憶し、そして、命令２の実行結果をＲＯＢ２４に記憶し、コミットがあった場合に、ＲＯＢ２４に記憶した順番である命令１、命令３、命令４、命令２の順番で、実行結果をＲＦ２５に記憶するのではなく、本来の実行順番である命令１、命令２、命令３、命令４の順番を用いて、実行結果をＲＯＢ２４からＲＦ２５に転送する。
【００５６】
なお、以上で説明したＣＰＵの構成は、本スレッドを実行する際に用いられる構成であり、従来の技術どおりに機能する構成である。続いて、本発明において、先行サブスレッドを選択して実行する構成について説明する。なお、図２に示すように、Ｉキャッシュ２１（ｍ）、Ｑｕｅｕｅ２２（ｍ）、Ｄキャッシュ２３（ｍ）、Ｄキャッシュ２３（ｍ）、ＲＯＢ２４（ｍ）、ＲＦ２５（ｍ）およびＥＸ２８（ｍ）は、マルチスレッド実行機能を実現するために付加されている構成である。実施例１に係るＣＰＵは、このようなＣＰＵの構成に、さらに、先行サブスレッドを選択することを目的として、Ｄｅｃｏｄｅ２７（ｍ）とＱｕｅｕｅ２２（ｍ）との間に先行サブレッド識別回路２９（特許請求の範囲に記載の「選択回路」に対応する」）を備えているものである。なお、以下では、従来の技術どおりに機能する構成と異なる部分について重点的に記載を行い、同様の部分については、簡単に記載し、または説明を省略する。
【００５７】
まず、本発明に係る先行サブスレッドを実行する際に用いられるマルチスレッド実行用に追加された構成における接続関係について簡単に説明する。図２に示すように、Ｄｅｃｏｄｅ２７（ｍ）は、Ｉキャッシュ２１（ｍ）と先行サブスレッド識別回路２９と接続される。また、先行サブスレッド識別回路２９は、Ｄｅｃｏｄｅ２７（ｍ）とＱｕｅｕｅ２２（ｍ）とに接続される。また、Ｑｕｅｕｅ２２（ｍ）は、先行サブスレッド識別回路２９とＲＯＢ２４（ｍ）とに接続される。
【００５８】
Ｉキャッシュ２１（ｍ）は、Ｉキャッシュ２１と同様の機能を有し、ＰＣ２６（ｍ）は、ＰＣ２６と同様の機能を有して同様の処理を行い、Ｄｅｃｏｄｅ２７（ｍ）は、Ｄｅｃｏｄｅ２７と同様の機能を有して同様の処理を行う。
【００５９】
Ｄキャッシュ２３（ｍ）は、後述する先行サブスレッド識別回路２９によって判別された先行サブスレッドを実行する際に必要となるオペランドを記憶する。
【００６０】
ＲＯＢ２４（ｍ）は、後述する先行サブスレッド識別回路２９によって判別されてキューに記憶された先行サブスレッドに対して割り当てられ、割り当てられた先行サブスレッドが用いるオペランドを記憶する。また、ＲＯＢ２４（ｍ）は、アウトオブオーダ的に先行サブスレッドが実行されて得られた実行結果を記憶する。
【００６１】
ＲＦ２５（ｍ）は、ＣＰＵ内部に設けられた演算や実行状態の保持に用いる記憶素子であり、データを記憶する。具体的には、後述するＥＸ２８（ｍ）により実行されＲＯＢ２４（ｍ）に格納された先行サブスレッドの実行結果は、本来の実行順番に対応する順番でＲＯＢ２４（ｍ）からＲＦ２５（ｍ）に転送される。
【００６２】
Ｑｕｅｕｅ２２（ｍ）は、先行サブスレッド識別回路２９によって判別された先行サブスレッドを記憶する。
【００６３】
先行サブスレッド識別回路２９は、本スレッドの実行結果を解析して得られるスレッド各々間での関係ではなく、本スレッドを構成する命令各々が中央処理装置に指示する内容を判別して先行サブスレッドを選択する。例えば、先行サブスレッド識別回路２９は、内容として、各々の命令種別を判別して先行サブスレッドを選択する。さらに詳細な一例をあげると、先行サブスレッド識別回路２９は、命令種別として、レジスタに格納されるデータをメモリに格納するストア命令または浮動小数点演算命令に該当するかを判別し、該当しない命令を選択することで先行サブスレッドを選択する。
【００６４】
ここで、先行サブスレッド識別回路２９による先行サブスレッド識別についてさらに説明すると、先行サブスレッド識別回路２９は、各命令間の依存関係を用いずに、本スレッドから先行サブスレッドを判別する。例えば、先行サブスレッド識別回路２９は、各命令間のデータ依存関係を用いずに、命令種別のみを用いて、先行サブスレッドを判別する。例えば、先行サブスレッド識別回路２９は、本スレッドの各命令の命令種別がＤｅｃｏｄｅ２７（ｍ）によって解読されてＱｕｅｕｅ２２（ｍ）に向けて送られると、送られた命令が予め記憶された命令種別と一致する（または、一致しない）かを判別し、一致する命令（または、一致しない命令）を先行サブスレッドとして判別して、先行サブスレッドのみをＱｕｅｕｅ２２（ｍ）に送る。
【００６５】
ここで、さらに図３および図４を用いて先行サブスレッド識別回路２９についてさらに詳細な一例をあげて説明する。例えば、図３に示すように、下記（Ｓ）に示すソースを用いる場合には、かかるソースはコンパイルされて、図３に示すように、下記（１）〜（８）に示す本スレッドとして認識される。
【００６６】
ここで、図３に示すソース（下記（Ｓ））では、「ｉ」は変数であって、１から１００００００まで変化させてソースを実行して処理を終了することを示す。また、図３に示す本スレッド（下記（１）〜（８））では、「Ｒ１」は、配列Ｘにおける先頭アドレスを示し、「Ｒ２」は、配列Ｙの先頭アドレスを示し、「Ｒ３」は、変数「ｉ」×４（バイト）を示し、「Ｒ４」は、１００００００−変数「ｉ」を示し、「ＦＲ」は、レジスタファイルを示す。
【００６７】
さらに、図３に示す本スレッド（下記（１）〜（８））各々の内容について説明する。命令（１）は、Ｒ１にＲ３を加算した値が示すメモリの配列Ｘにおけるアドレスに格納されているデータを、ＦＲ１（レジスタファイル「１」）に格納する命令である。命令（２）は、ＦＲ１に格納されている値とＦＲ２に格納されている値を乗算し、演算した結果をＦＲ３に格納する浮動小数点演算命令である。命令（３）は、ＦＲ３に格納されている値とＦＲ４に格納されている値を加算し、演算した結果をＦＲ５に格納する浮動小数点演算命令である。命令（４）は、ＦＲ５に格納されている値に対してＦＲ６に格納されている値を割算し、演算した結果をＦＲ７に格納する浮動小数点演算命令である。命令（５）は、Ｒ２にＲ３を加算した値が示すメモリの配列Ｙにおけるアドレスに、ＦＲ７に格納されている値をストアするストア命令である。命令（６）は、Ｒ３に８を加算する命令である。命令（７）は、Ｒ４から１を減算する命令である。命令（８）は、Ｒ４が０より大きいときには、命令（１）〜（８）の処理を繰り返させる命令である。
【００６８】
（Ｓ）ｄｏ  ｉ＝１，１００００００  Ｙ（ｉ）＝（Ｘ（ｉ）＊Ｂ＋Ｃ）／Ｄ）  ｅｎｄ  ｄｏ
（１）［Ｒ１＋Ｒ３］→ＦＲ１
（２）ＦＲ１×ＦＲ２→ＦＲ３
（３）ＦＲ３＋ＦＲ４→ＦＲ５
（４）ＦＲ５／ＦＲ６→ＦＲ７
（５）ＦＲ７→［Ｒ２＋Ｒ３］
（６）Ｒ３＋８→Ｒ３
（７）Ｒ４−１→Ｒ４
（８）Ｂｒａｎｃｈ  Ｌｏｏｐ  ｉｆ  Ｒ４＞０
【００６９】
なお、ここで、ソースとは、高級言語を用いて記載されたソースコード（プログラム）である。高級言語とは、プログラミング言語において、自然語に近く、人間にとって理解しやすい構文や概念を持った言語の総称である。例えば、高級言語では、ソースコードが、主に英単語や記号などを組み合わせて記述され、コンパイラなどが、高級言語で記述されたソースコードを機械語に変換（コンパイル）し、処理装置（例えば、ＣＰＵ）が、機械語に変換されたソースコードを実行する。コンパイルとは、人間がプログラミング言語（例えば、高級言語）を用いて作成したプログラムのソースコードを、コンピュータ上で実行可能な機械語に変換することである。
【００７０】
ここで、先行サブスレッド識別回路２９は、図４に示すように、Ｄｅｃｏｄｅ２７（ｍ）によって命令種別を解読された命令が送られると、送られてきた命令が浮動小数点演算命令（命令（２）〜（４））またはメモリストア命令（命令（５））である場合には、スイッチがＯＮになり（図４の（１））、命令がＱｕｅｕｅ２２（ｍ）に送られない（図４の（２））。一方、先行サブスレッド識別回路２９は、送られてきた命令が浮動小数点演算命令またはメモリストア命令でない場合には、命令が先行サブスレッドを構成する命令として判別され、スイッチがＯＦＦとなる（図４の（３））。そして、先行サブスレッド識別回路２９は、命令（１）、（６）〜（８）を、図４に示すように、先行サブスレッドを構成する各命令（ａ）〜（ｄ）（命令（１）、（６）〜（８）に対応する）として、Ｑｕｅｕｅ２２（ｍ）に送る（記憶させる）。ＲＯＢ２４（ｍ）は各命令がＱｕｅｕｅ２２（ｍ）に記憶された時点で、結果格納用のエントリを割り当てる。
【００７１】
ＥＸ２８（ｍ）は、対応する命令実行に必要なオペランドをＲＯＢ２４（ｍ）ないしＲＦ２５（ｍ）から取得する。また、ＥＸ２８（ｍ）は、先行サブスレッド識別回路２９によって選択されてＱｕｅｕｅ２２（ｍ）に記憶された先行サブスレッドのなかから、すぐに実行できる命令を選択し、処理能力を割り当てる。また、ＥＸ２８（ｍ）は、命令を実行（演算）し、結果をＲＯＢ２４（ｍ）に記憶させる。ＲＦ２５（ｍ）は、ＲＯＢ２４（ｍ）に記憶された命令の実行結果を、命令コミット時に本来の実行順番に対応する順番で記憶する。
【００７２】
ここで、上記したように、先行サブスレッド識別回路２９は、マルチスレッド実行用に追加された構成において実行されるため、本スレッドとは独立に動作する。そして、先行サブスレッド識別回路２９は、先行サブスレッドの命令をデコードした後、デコードされた命令種別に応じて、先行サブスレッドとして必要な命令を識別して、ＥＸ２８などに送出する。
【００７３】
すなわち、本発明は、本スレッドが実行されたか否かとは関係なく、本スレッドの実行から独立して、先行サブスレッドを選択することが可能である点に特徴がある。その結果、本スレッドが初めて実行される際にも（一度も実行されていない場合にも）、先行サブスレッドを選択して先行して実行することにより、本スレッドの性能を向上することが可能である点に特徴がある。
【００７４】
例えば、本発明は、先行サブスレッドを本スレッドの初回実行の前にＥＸ２８（ｍ）によって実行させることにより、ＥＸ２８（ｍ）が、本スレッドを実行する際に必要なオペランドを予めメモリからＬ２キャッシュ２０、Ｄキャッシュ２３、およびＤキャッシュ２３（ｍ）へプリフェッチし、本スレッド実行時に、ＥＸ２８が、オペランドをメモリからフェッチする処理を省略することが可能であり、本スレッドを処理する性能が向上する。
【００７５】
ここで、従来の手法と対比において、本発明の特徴について改めて説明する。図５の（従来）に示すように、従来の手法では、本スレッドを一度実行した後に、データの依存関係（各命令を実行した結果得られる実行結果や各命令で用いられるデータが、他の命令を実行する際に用いられるかどうかを）を解析し、解析結果を参照して先行サブスレッドを選択する。このため、本スレッドを一度目に実行する際には、本スレッドを処理する際の性能を向上させることはできない。例えば、図５に示す例では、依存関係を解析後、本スレッドの二巡目に相当する先行サブスレッドの一巡目が実行され、先行サブスレッドの一巡目による実行結果（例えば、図３の例では、Ｒ３の値や、Ｒ４の値など）を用いて先行サブスレッドの二巡目が行われることにより、初めて、その後行われる本スレッドの三巡目を処理する性能が向上する。
【００７６】
すなわち、従来の手法では、図５の（Ａ）において、先行サブスレッドが実行された結果［Ｒ１＋Ｒ３］に格納されているデータをＦＲ１にロードするために、［Ｒ１＋Ｒ３］に格納されているデータをプリフェッチする指示が行われることにより、図５の（Ｂ）における本命令（１）を処理する性能が向上する。いいかえれば、図５の（従来）に示す例においては、従来の手法では、本スレッドの一巡目と二巡目とを処理する性能は向上しない。
【００７７】
このような従来の手法と比較して、図５の（Ｘ）に示すように、本発明を適用することにより、実施例１に係る中央処理装置は、本スレッドの実行と同時期に、先行サブスレッドを選択して実行することが可能である点に特徴がある。すなわち、本発明を適用することにより、図５の（Ｃ）に示すように、先行サブスレッドによって［Ｒ１＋Ｒ３］に格納されているデータがＦＲ１にロードされる。このことは、本スレッドの二巡目から見ると、実施例１に係る中央処理装置では、［Ｒ１＋Ｒ３］に格納されているデータをプリフェッチする指示が行われたことになる。この結果、実施例１に係る中央処理装置では、図５の（Ｄ）に示す本スレッド（１）を実行する性能が向上し、本スレッドを処理する際の性能が向上することになる。いいかえれば、従来の手法において本スレッドを実行する性能が向上するタイミングと比較して、本発明を適用することにより、実施例１に係る中央処理装置は、早いタイミング（より前に実行される本スレッド）において、本スレッドを実行する性能が向上する。
【００７８】
また、本発明を適用することにより、実施例１に係る中央処理装置は、図５（Ｙ）に示すように、先行サブスレッドを本スレッドの初回実行の前にＥＸ２８（ｍ）によって実行させることにより、本スレッドの一巡目から性能を向上させることが可能である点に特徴がある。すなわち、実施例１に係る中央処理装置では、図５（Ｅ）に示すように、ＥＸ２８（ｍ）が、本スレッドを実行する前に先行サブスレッドを実行することにより、本スレッドの一巡目が実行される前において、先行サブスレッドによって［Ｒ１＋Ｒ３］に格納されているデータがＦＲ１にロードされる。このことは、本スレッドの一巡目から見ると、実施例１に係る中央処理装置は、［Ｒ１＋Ｒ３］に格納されているデータをプリフェッチする指示が行われたことになる。この結果、実施例１に係る中央処理装置では、図５（Ｆ）に示す本スレッド（１）を実行する性能が向上し、本スレッドを処理する際の性能が向上することになる。いいかえれば、従来の手法においては、本スレッドの一巡目の性能を向上させることはできなかったのに対して、本発明を適用することにより、実施例１に係る中央処理装置は、本スレッドの一巡目から性能が向上する。なお、先行サブスレッドを選択して実行するタイミングに関しては、上記した図５の（Ｘ）や（Ｙ）に示す場合に限られず、任意のタイミングで選択して実行してよい。
【００７９】
また、実施例１に係る中央処理装置は、メモリストア命令を除くことで、先行サブスレッドを実行することにより、メモリ領域が破壊されるのを防止することが可能である点に特徴がある。いいかえれば、データをメモリに書き込む処理を行わず、読み込む処理のみとすることによって、先行サブスレッドを実行することによって、本スレッドを実行するために必要なデータとしてメモリに格納されているデータを破壊することを回避することが可能である。これにより、先行サブスレッドを実行することにより、本スレッドの処理が誤動作してしまう状況を回避することが可能である点に特徴がある。
【００８０】
また、浮動小数点演算命令は、メモリアクセスを行うときに必要となるアドレスを選択することを目的として行われるケースは殆どなく、さらに浮動小数点演算命令の実行に要する時間は、整数演算命令など他の命令の実行時間より一般的に大きい。このため、実施例１に係る中央処理装置は、浮動小数点演算命令を除くことにより、先行サブスレッドを実行する際に必要な処理時間を短縮し、また、中央処理装置に対する処理を行う際の負担を軽減することが可能であり、本スレッドを実行する際の性能を、効率的に向上させることが可能である点に特徴がある。
【００８１】
なお、図７に示すように、典型的な科学技術計算用プログラムにおいて、メモリストア命令および浮動小数点演算命令以外の割合は全命令の４０％未満にすぎず、先行サブスレッド用命令識別回路においてメモリストア命令および浮動小数点演算命令以外を選択することにより、本スレッドに対して十分に短い（処理時間が短い）先行サブスレッドを選択することが可能である。なお、図７は、命令種別の分布について説明するための図である。
【００８２】
［先行サブスレッド識別回路による処理の一例］
次に、図６を用いて、実施例１における先行サブスレッド識別回路２９による処理の一例について説明する。図６は、先行サブスレッド識別回路２９の処理の一例を示すフローチャートである。
【００８３】
同図に示すように、先行サブスレッド識別回路２９は、命令を受信すると（ステップＳ１０１肯定）、命令内容種別を判別する（ステップＳ１０２）。つまり、本スレッドの実行結果を解析して得られる命令各々間での関係ではなく、本スレッドを構成する命令各々が中央処理装置に指示する内容を判別する。そして、先行サブスレッド識別回路２９は、ストア命令または浮動小数点演算命令かどうかを判別する（ステップＳ１０３）。ここで、先行サブスレッド識別回路２９は、受信した命令が、ストア命令または浮動小数点演算命令でない場合には（ステップＳ１０３否定）、受信した命令を先行サブスレッドとして選択して、Ｑｕｅｕｅ２２に送信する（ステップＳ１０４）。一方、先行サブスレッド識別回路２９は、受信した命令が、ストア命令または浮動小数点演算命令である場合には（ステップＳ１０３肯定）、Ｑｕｅｕｅ２２には送信しない（ステップＳ１０５）。そして、先行サブスレッド識別回路２９による選択処理を終了する。
【００８４】
［実施例１の効果］
上記したように、実施例１によれば、本スレッドの実行結果を解析して得られる命令各々間での関係ではなく、本スレッドを構成する命令各々が中央処理装置に指示する内容を判別して先行サブスレッドを選択するので、一度も実行していない本スレッドから、先行サブスレッドを選択することが可能である。
【００８５】
また、実施例１によれば、先行サブスレッド識別回路２９は、内容として、各々の命令種別を判別して先行サブスレッドを選択するので、命令種別を確認するだけで簡単に先行サブスレッドを選択することが可能である。
【００８６】
具体的には、従来の手法においては、本スレッドのリタイア命令のデータ依存解析結果に基づいて先行スレッド用命令を識別しているため、必要な回路規模が大きくなってしまう。このような従来の手法と比較して、本発明を適用することにより、先行サブスレッドを選択する際に必要な処理量や、処理に必要な回路の規模を小さくすることが可能である。この結果、例えば、本発明を簡単に実装することが可能である。
【００８７】
また、実施例１によれば、先行サブスレッド識別回路２９は、命令種別として、レジスタに格納されるデータをメモリに格納するストア命令または浮動小数点演算命令に該当するかを判別し、該当しない命令を選択することで先行サブスレッドを選択するので、ストア命令と浮動小数点命令とを除外するのみで、簡単に先行サブスレッドを選択することが可能である。
【実施例２】
【００８８】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。
【００８９】
例えば、実施例１では、ＣＭＰに本発明を適用した場合におけるＣＰＵ１００の構成について説明したが、本発明はこれに限定されるものではなく、ＳＭＴに本発明を適用してもよい。例えば、図８に示すように、ＤｅｃｏｄｅとＱｕｅｕｅとの間に先行サブスレッド識別回路を設けることによって、本発明を実施してもよい。
【００９０】
さらに詳細に説明すると、実施例１では、図２に示したＣＰＵ（ＣＭＰ）の構成において、上段部が、本スレッドの処理を行い、下段部が、先行サブスレッドの処理を司っている。ここで、実施例１においては、本スレッドは、上段部において従来技術通りに実行される。一方、実施例１においては、下段部は、上段部と同様に命令フェッチ、デコードを行うが、デコード結果は先行サブスレッド識別回路に送出され、該当回路が、命令デコード結果に基づき先行実行に必要な命令のみを先行サブスレッドとして選択し、Ｑｕｅｕｅに送出する場合について説明した。
【００９１】
本発明の実施は、このようなＣＭＰに本発明を適用した場合に限られるものではなく、図８に示すようなＳＭＴに本発明を適用してもよい。すなわち、本スレッドは、従来技術通りに実行される。その上で、先行サブスレッドは、本スレッドと同様に命令フェッチ、デコードされるが、デコード結果は先行サブスレッド識別回路に送出され、該当回路は命令デコード結果に基づき先行実行に必要な命令のみを選択し、Ｑｕｅｕｅに送出する。なお、図８において、ＰＣ２６ａとＲＦ２５ａとは、本スレッドを実行する構成部である。また、ＰＣ２６ｂとＲＦ２５ｂとは、マルチスレッド実行機能をするために付加されている構成であり、先行サブスレッドを選択して実行する処理に用いられる。
【００９２】
また、実施例では、先行サブスレッドを選択する際に、命令種別を用いる場合について説明したが、本発明はこれに限定されるものではなく、例えば命令実行結果を格納するレジスタ番号を用いるようにしてもよい。
【００９３】
また、実施例では、命令種別として、ストア命令と浮動小数点演算命令とを除いて先行サブスレッドを選択する場合を説明したが、本発明はこれに限定されるものではなく、例えばさらに整数除算命令を除いて先行サブスレッドを選択するようにしてもよい。
【００９４】
上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報（例えば、図１〜図６、図８）については、特記する場合を除いて任意に変更することができる。
【００９５】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる例えば、図２におけるＥＸ２８の機能において、「キューに記憶されている命令の中から実行できる命令を選択して、処理能力を割り当てる」機能と「本来の実行順番に対応する順番で、実行結果をＲＯＢ２４に記憶させる」機能とを分離してもよい。また、例えば、図２におけるＲＯＢ２４とＲＦ２５を統合してもよい。
【００９６】
（付記１）実行対象となる複数の命令で構成される本スレッドを実行し、並びに、所定のスレッドに必要な情報をプリフェッチする一つまたは複数の命令を先行サブスレッドとして当該本スレッドから選択して当該所定のスレッドに先行して実行する中央処理装置であって、
前記本スレッドの実行結果を解析して得られる命令各々間での関係ではなく、前記本スレッドを構成する命令各々が前記中央処理装置に指示する内容を判別して前記先行サブスレッドを選択する選択手段を備えることを特徴とする中央処理装置。
【００９７】
（付記２）前記選択手段は、前記内容として、前記スレッドを構成する各々の命令種別を判別して前記先行サブスレッドを選択することを特徴とする付記１に記載の中央処理装置。
【００９８】
（付記３）前記選択手段は、前記命令種別として、レジスタに格納されるデータをメモリに格納するストア命令または浮動小数点演算命令に該当するかを判別し、該当しない命令を選択することで前記先行サブスレッドを選択することを特徴とする付記２に記載の中央処理装置。
【００９９】
（付記４）実行対象となる複数の命令で構成される本スレッドを実行し、並びに、前記所定のスレッドに必要な情報をプリフェッチする一つまたは複数の命令を先行サブスレッドとして当該本スレッドから選択して当該所定のスレッドに先行して実行する中央処理装置に設けられた選択回路であって、
前記本スレッドの実行結果を解析して得られる命令各々間での関係ではなく、前記本スレッドを構成する命令各々が前記中央処理装置に指示する内容を判別して前記先行サブスレッドを選択する選択ステップを備えることを特徴とする選択回路。
【０１００】
（付記５）実行対象となる複数の命令で構成される本スレッドを実行し、並びに、前記所定のスレッドに必要な情報をプリフェッチする一つまたは複数の命令を先行サブスレッドとして当該本スレッドから選択して当該所定のスレッドに先行して実行する中央処理装置における選択方法であって、
前記本スレッドの実行結果を解析して得られる命令各々間での関係ではなく、前記本スレッドを構成する命令各々が前記中央処理装置に指示する内容を判別して前記先行サブスレッドを選択する選択ステップを含んだことを特徴とする選択方法。
【産業上の利用可能性】
【０１０１】
以上のように、本発明は、中央処理装置、選択回路および選択方法に有用であり、特に、実行対象となる複数の命令で構成される本スレッドを実行し、並びに、所定のスレッドに必要な情報をプリフェッチする一つまたは複数の命令を先行サブスレッドとして本スレッドから選択して所定のスレッドに先行して実行する中央処理装置であって、本スレッドの実行結果を解析して得られるスレッド各々間での関係ではなく、本スレッドを構成する命令各々が中央処理装置に指示する内容を判別して先行サブスレッドを選択する中央処理装置、選択回路および選択方法の実現に適する。
【図面の簡単な説明】
【０１０２】
【図１】先行サブスレッド識別回路の概要と特徴を説明するための図である。
【図２】中央処理装置（ＣＭＰ）の構成を示すブロック図である。
【図３】ソースおよび本スレッド列および先行サブスレッド列の一例を示す図である。
【図４】先行サブスレッド識別回路の回路図の一例を示す図である。
【図５】先行サブスレッド識別回路による効果を説明するための図である。
【図６】先行サブスレッド識別回路の処理の一例を示すフローチャートである。
【図７】命令種別の分布について説明するための図である。
【図８】中央処理装置（ＳＭＴ）の構成を示すブロック図である。
【図９】ＣＭＰおよびＳＭＴについて説明するための図である。
【符号の説明】
【０１０３】
１０  Ｄｅｃｏｄｅ
１１  先行サブスレッド識別回路
１２  Ｑｕｅｕｅ
２０  Ｌ２キャッシュ
２１  Ｉキャッシュ
２２  Ｑｕｅｕｅ
２３  Ｄキャッシュ
２４  ＲＯＢ
２５  ＲＦ
２６  ＰＣ
２７  Ｄｅｃｏｄｅ
２８  ＥＸ
２９  先行サブスレッド識別回路
【図１】
0005105359.tif 000002
【図２】
0005105359.tif 000003
【図３】
0005105359.tif 000004
【図４】
0005105359.tif 000005
【図５】
0005105359.tif 000006
【図６】
0005105359.tif 000007
【図７】
0005105359.tif 000008
【図８】
0005105359.tif 000009
【図９】
0005105359.tif 000010