(57)【特許請求の範囲】
【請求項１】
複数のステージに分けて命令を処理するために用意された、各ステージに対応する複数の処理ユニットと、
前段ステージ用の処理ユニットが複数の命令の処理を連続して行った後に、後段ステージ用の処理ユニットが、前記前段ステージ用の処理ユニットによる処理が終了した前記複数の命令の処理を連続して行うように、前記複数の処理ユニットを制御する制御手段と、
を備えるプロセッサー。
【請求項２】
複数のスレッドを実行するための複数の実行コンテキストを更に備え、
前記制御手段は、前記複数のスレッドが実行の対象となっている場合に、前段ステージ用の処理ユニットが前記複数のスレッドのうちの少なくとも２以上のスレッドに係る命令の処理を連続して行った後に、後段ステージ用の処理ユニットが、前記前段ステージ用の処理ユニットによる処理が終了した前記２以上のスレッドに係る命令の処理を連続して行うように、前記複数の処理ユニットを制御する、
請求項１に記載のプロセッサー。
【請求項３】
前記複数のスレッドは、複数のグループの何れかに割り当てられており、
前記制御手段は、互いに異なるグループに割り当てられたスレッドの命令を、同一の時点において実行するように、前記複数の処理ユニットを制御する、
請求項２に記載のプロセッサー。
【請求項４】
前記グループに割り当てられるスレッドの数は、設定により変更可能である、
請求項３に記載のプロセッサー。
【請求項５】
前記グループは、該プロセッサーに備えられた処理ユニット数に基づいた数用意される、
請求項３または４に記載のプロセッサー。
【請求項６】
前記制御手段は、第一のグループに割り当てられた２以上のスレッドに係る命令の処理が終了した後、該第一のグループに割り当てられた２以上のスレッドに係る命令が他の処理ユニットによって処理されている間、第二のグループに割り当てられた２以上のスレッドに係る命令を処理するように、前記複数の処理ユニットを制御する、
請求項３から５の何れか一項に記載のプロセッサー。
【請求項７】
前記制御手段は、前段ステージ用の処理ユニットが処理対象の全てのスレッドに係る命令の処理を連続して行った後に、後段ステージ用の処理ユニットが処理対象の全てスレッドに係る命令の処理を連続して行うように、前記複数の処理ユニットを制御する、
請求項２から６の何れか一項に記載のプロセッサー。
【請求項８】
複数のステージに分けて命令を処理するために用意された、各ステージに対応する複数の処理ユニットを備えるプロセッサーの制御方法であって、
前記複数の処理ユニットのうち前段ステージ用の処理ユニットに、複数の命令の処理を連続して行わせるステップと、
前記前段ステージ用の処理ユニットが前記複数の命令の処理を連続して行った後に、後段ステージ用の処理ユニットに、該複数の命令の処理を連続して行わせるステップと、
を備える、プロセッサーの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサーに関する。
【背景技術】
【０００２】
従来、実行パイプライン内のバブルの発生を減らす実行コア・アーキテクチャを提供するために、ディスパッチ回路がバッファ内のどの命令が実行の準備ができているかどうかを判定し、準備ができた命令を実行のために発行し、あるスレッドからの命令を、別のスレッドからの命令の前に、どちらの命令が最初にバッファにフェッチされたかに無関係に発行し、特定のスレッドからの命令が発行されると、フェッチ回路が、そのスレッドからの次の命令によって、使用可能なバッファ充てんする技術が提案されている（特許文献１を参照）。【０００３】
また、スレッド機能停止につながるブロック状態が生じることを防止する目的で、マルチスレッド・プロセッサの複数のハードウェア・スレッド・ユニットの各々が、そのハードウェア・スレッド・ユニットで更新可能な対応するローカルレジスタを含むことができ、ハードウェア・スレッド・ユニットの特定のもののローカルレジスタが、その特定のハードウェア・スレッド・ユニットが１つまたは複数の命令を発行した後で１つまたは複数の命令を発行することが許される次のスレッドを識別する値を格納するプロセッサーが提案されている（特許文献２を参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−１８２８２５号公報
【特許文献２】特表２００６−５０２５０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等のプロセッサーが処理を行う場合に、命令スループット（単位時間あたりに実行できる命令数）を向上させる目的で、所謂命令パイプラインが採用されている。ここで、命令パイプラインには、単一のスレッドを一連の命令パイプラインで実行する型のパイプラインと、複数のスレッドを一連の命令パイプラインにおいて順次循環させながら実行する所謂「循環パイプライン」型のパイプラインとがある。【０００６】
図６は、従来の循環パイプライン型の命令パイプラインの概念を示す図である。命令パイプラインは、各命令の処理を、独立して実行できる複数のステージ（処理要素）に分割し、各ステージが、前段のステージの出力を自身の入力とし、自身の出力を後段のステージの入力とするように相互接続されることで各ステージにおける処理を並列化し、全体としての命令スループットを削減するものである。図６には、各ステージに係る処理を行うための処理ユニットが、５つのスレッドＴ１からＴ５に係る命令を並行して処理する例が示されている。【０００７】
しかし、あるステージの処理は、必ずしも１クロックで完了しない。このため、従来の命令パイプラインでは、例えば、メモリアクセス等のレスポンス待ちに予測困難な長い時間がかかる等の原因によって、当該ステージまたは他のステージにおいて処理が行われない状態（所謂バブル）が発生することがあり、これによって並列処理の効率が悪化する。【０００８】
本発明は、上記した問題に鑑み、プロセッサーによる並列処理をより効率的に行うことを課題とする。
【課題を解決するための手段】
【０００９】
本発明は、上記した課題を解決するために、以下の手段を採用した。即ち、本開示の一例は、複数のステージに分けて命令を処理するために用意された、各ステージに対応する複数の処理ユニットと、前段ステージ用の処理ユニットが複数の命令の処理を連続して行った後に、後段ステージ用の処理ユニットが、前記前段ステージ用の処理ユニットによる処理が終了した前記複数の命令の処理を連続して行うように、前記複数の処理ユニットを制御する制御手段と、を備えるプロセッサーである。【００１０】
また、前記プロセッサーは、複数のスレッドを実行するための複数の実行コンテキストを更に備え、前記制御手段は、前記複数のスレッドが実行の対象となっている場合に、前段ステージ用の処理ユニットが前記複数のスレッドのうちの少なくとも２以上のスレッドに係る命令の処理を連続して行った後に、後段ステージ用の処理ユニットが、前記前段ステージ用の処理ユニットによる処理が終了した前記２以上のスレッドに係る命令の処理を連続して行うように、前記複数の処理ユニットを制御してもよい。【００１１】
また、前記複数のスレッドは、複数のグループの何れかに割り当てられており、前記制御手段は、互いに異なるグループに割り当てられたスレッドの命令を、同一の時点において実行するように、前記複数の処理ユニットを制御してもよい。【００１２】
また、前記グループに割り当てられるスレッドの数は、設定により変更可能であってもよい。【００１３】
また、前記グループは、該プロセッサーに備えられた処理ユニット数に基づいた数用意されてもよい。【００１４】
また、前記制御手段は、第一のグループに割り当てられた２以上のスレッドに係る命令の処理が終了した後、該第一のグループに割り当てられた２以上のスレッドに係る命令が他の処理ユニットによって処理されている間、第二のグループに割り当てられた２以上のスレッドに係る命令を処理するように、前記複数の処理ユニットを制御してもよい。【００１５】
また、前記制御手段は、前段ステージ用の処理ユニットが処理対象の全てのスレッドに係る命令の処理を連続して行った後に、後段ステージ用の処理ユニットが処理対象の全てスレッドに係る命令の処理を連続して行うように、前記複数の処理ユニットを制御してもよい。【００１６】
なお、本発明は、コンピューターシステム、情報処理装置、コンピューターによって実行される方法、またはコンピューターに実行させるプログラムとして把握することが可能である。また、本発明は、そのようなプログラムをコンピューターその他の装置、機械等が読み取り可能な記録媒体に記録したものとしても把握できる。ここで、コンピューター等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピューター等から読み取ることができる記録媒体をいう。
【発明の効果】
【００１７】
本発明によれば、プロセッサーによる並列処理をより効率的に行うことが可能となる。
【図面の簡単な説明】
【００１８】
【図１】実施形態に係るシステムの概略を示す図である。
【図２】実施形態に係るＣＰＵの構成を示す図である。
【図３】実施形態においてＣＰＵによる処理の対象となる実行コンテキストの構成を示す図である。
【図４】実施形態に係る、各処理ユニットにおける制御の流れを示すフローチャートである。
【図５】実施形態に係る制御を行った場合のクロックサイクルの一例を示す図である。
【図６】従来の循環パイプライン型の命令パイプラインの概念を示す図である。
【発明を実施するための形態】
【００１９】
以下、本開示に係るプロセッサーおよび方法の実施の形態を、図面に基づいて説明する。但し、以下に説明する実施の形態は、実施形態を例示するものであって、本開示に係るプロセッサーおよび方法を以下に説明する具体的構成に限定するものではない。実施にあたっては、実施形態に応じた具体的構成が適宜採用され、また、種々の改良や変形が行われてよい。
【００２０】
＜システム構成＞
図１は、本実施形態に係るシステムの概略を示す図である。本実施形態に係るシステムは、ＣＰＵ１１およびメモリ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ、ＲＡＭ）１２を備える。そして、メモリ１２は、ＣＰＵ１１に、読み書き可能に直接接続される。本実施形態では、メモリ１２とＣＰＵ１１との接続方法として、ＣＰＵ１１が備えるポート（処理ユニット側ポート）と、メモリ１２が備えるポート（記憶装置側ポート）とが、シリアル接続される方法が採用される。但し、メモリ１２とＣＰＵ１１との接続方法には、本実施形態における例以外の接続方法が採用されてもよい。例えば、接続には、その一部または全部に光接続が採用されてもよい。また、ＣＰＵ１１とメモリ１２との間の接続は、物理的にはバス等を用いて共有されていてもよい。また、本実施形態では、メモリ１２が１のＣＰＵ１１によって利用される例について説明しているが、メモリ１２は、２以上のＣＰＵによって共有されてもよい。
【００２１】
また、本実施形態に係るＣＰＵ１１は、複数の処理ユニット、および複数の実行コンテキストを備えることで、各命令（ｉｎｓｔｒｕｃｔｉｏｎ）の処理を、独立して実行できるステージ（処理要素）に分割し、各ステージが、前段のステージの出力を自身の入力とし、自身の出力を後段のステージの入力とするように相互接続されることで各ステージにおける処理を並列化することが出来るＣＰＵである。
【００２２】
図２は、本実施形態に係るＣＰＵ１１の構成を示す図である。本実施形態において、命令を処理するための複数のステージには、命令フェッチ、命令デコード（およびレジスタフェッチ）、命令の実行、メモリアクセス、およびレジスタへのライトバックがあり、これらのステージはここに記載された順序で処理される。そして、これらのステージに係る処理を行うために、ＣＰＵ１１は、命令フェッチを行うための処理ユニットＩＦ、命令デコードを行うための処理ユニットＩＤ、命令を実行するための処理ユニットＥＸ、メモリアクセスを行うための処理ユニットＭＥＭ、およびレジスタへのライトバックを行うための処理ユニットＷＢを備える。各ステージが上記順序で処理されることから、本開示では、相対的な関係においてステージを特定する際に「前段ステージ」および「後段ステージ」との語を用いる。例えば、処理ユニットＩＦと処理ユニットＩＤとの関係では、処理ユニットＩＦが前段ステージ用の処理ユニットであり、処理ユニットＩＤが後段ステージ用の処理ユニットである。
【００２３】
ＣＰＵ１１は、更に、先述の複数の処理ユニットを制御する制御部１３を備える。制御部１３は、前段ステージ用の処理ユニットが複数の命令の処理を連続して行った後に、後段ステージ用の処理ユニットが、前段ステージ用の処理ユニットによる処理が終了した複数の命令の処理を連続して行うように、複数の処理ユニットを制御する。また、制御部１３は、互いに異なるグループに割り当てられたスレッドの命令を、同一の時点において実行するように、複数の処理ユニットを制御する。このグループについては後述する。
【００２４】
図３は、本実施形態においてＣＰＵ１１による処理の対象となる実行コンテキストの構成を示す図である。なお、本実施形態では、実行コンテキスト毎に１のスレッドが割り当てられる例について説明する。各スレッドには、当該スレッドにおいて実行されるプログラムに含まれる命令が実行すべき順に含まれている。
【００２５】
また、本実施形態では、夫々の処理ユニットによって連続して実行される複数のスレッドがグルーピングされる。以下、スレッドがグルーピングされる（割り当てられる）単位を「バンク」または「グループ」と称する。同時に処理できるグループの数は処理ユニットの数（従来の命令パイプラインにおけるステージ数）と同数となるため、本実施形態において、バンク数は処理ユニット数と同一である。
【００２６】
ＣＰＵ１１における実行コンテキストの数（並列的に実行されるスレッドの数）は、バンク数（パイプラインのステージ数、処理ユニット数）および１バンクあたりの実行コンテキスト数に基づいて決定される。実行コンテキスト数は、以下に示す式で表される。
【００２７】
実行コンテキスト数＝「バンク数」＊「１バンクあたりの実行コンテキスト数」
【００２８】
先述の通り、バンク数は処理ユニット数と同数となるため、本実施形態におけるバンク数は５である。また、本実施形態では、１バンクあたりの実行コンテキスト数として４が設定される。このため、本実施形態では、１のＣＰＵ１１に２０（＝５＊４）の実行コンテキストが用意され、これらの実行コンテキストに割り当てられた２０のスレッドが並列的に実行される。
【００２９】
なお、本実施形態ではバンク数は５であるが、バンク数は５に限定されず、採用されるＣＰＵが備える処理ユニット数に応じて決定される。また、本実施形態では、１バンクあたりの実行コンテキスト数が４である場合について説明するが、１バンクあたりの実行コンテキスト数は、その他の数であってもよいし、設定により変更可能であってもよい。但し、設定される実行コンテキスト数には、ＣＰＵ１１のハードウェア上の制限（ＣＰＵ１１上に作成された回路の数）により、設定可能な上限がある。
【００３０】
本実施形態では、理解を容易にするため、各実行コンテキストに割り当てられるスレッドを、バンク番号とバンク内のスレッド番号との組み合わせで示す。例えば、図３に示す例では、スレッドＢ１Ｔ１は、バンク１の１つ目のスレッドであり、スレッドＢ５Ｔ４は、バンク５の４つ目のスレッドである。
【００３１】
＜処理の流れ＞
上述の通り、本実施形態に係るＣＰＵ１１は、命令を処理する際に、１の命令を複数のステージ（処理要素）に分け、各ステージのために用意された処理ユニットに実行させる。複数の処理ユニットは同時に動作することが可能であるため、各ステージの処理のタイミングをずらすことで複数の命令を並行して処理する、循環パイプライン型の命令パイプラインが従来用いられている。本実施形態では、このような命令パイプラインにおいて、処理対象のスレッドを変更しながら複数スレッドの処理を連続して行った後に、これらの複数スレッドの後段のステージに係る処理を、後段のステージに係る処理ユニットが、処理対象のスレッドを変更しながら連続して行うように制御することとした。図４に示すフローチャートは、このような制御を実現するための処理の流れの一例である。
【００３２】
図４は、本実施形態に係る、各処理ユニットにおける制御の流れを示すフローチャートである。本フローチャートに示された制御は、本実施形態に係るＣＰＵ１１が並列処理を行う間、ＣＰＵ１１が備える５つの処理ユニットの夫々によって、１クロック毎に繰り返し実行される。
【００３３】
各処理ユニットにおける制御において、ＣＰＵ１１は、現クロックにおいて処理の対象となっているバンク（例えば、バンク１）に、処理すべき命令を含むスレッドが有るか否かを判定する（ステップＳ１０１）。ここで、処理すべき命令を含むスレッドが有る場合（換言すれば、当該バンクに続けて実行すべきスレッドが残っている場合）には、ＣＰＵ１１は、現在処理の対象となっているバンクの、処理すべき命令を含むスレッド（例えば、スレッドＢ１Ｔ２）の命令を処理する（ステップＳ１０２）。一方、当該バンクに処理すべき命令を含むスレッドが無い場合（換言すれば、当該バンクにおけるスレッドの連続実行が終了した場合）には、ＣＰＵ１１は、処理の対象を次のバンク（例えば、バンク２）に切り替える（ステップＳ１０３）。そして、ＣＰＵ１１は、新たに処理の対象となったバンクの、処理すべき命令を含むスレッド（例えば、スレッドＢ２Ｔ１）の命令を処理する（ステップＳ１０４）。
【００３４】
図５は、本実施形態に係る制御を行った場合のクロックサイクルの一例を示す図である。例えば、図３に示したスレッドの構成に対して図４に示した制御が行われることで、処理ユニットＩＦがバンク１の４つのスレッドＢ１Ｔ１からＢ１Ｔ４を処理した後に、これらのスレッドＢ１Ｔ１からＢ１Ｔ４を、後段の処理ユニットＩＤが処理する、という順序での処理が実現される。なお、処理ユニットＩＤによる処理が終了すると、スレッドＢ１Ｔ１からＢ１Ｔ４は、処理ユニットＥＸによって処理される。以降、処理は各処理ユニットがスレッドＢ１Ｔ１からＢ１Ｔ４の処理を完了する毎に後段の処理ユニットに引き継がれる。
【００３５】
このようにして、制御部１３は、複数のスレッドが実行の対象となっている場合に、前段ステージ用の処理ユニットが複数のスレッドのうちの少なくとも２以上のスレッド（本実施形態では、第一のバンクに割り当てられた２以上のスレッド）に係る命令の処理を連続して行った後に、後段ステージ用の処理ユニットが、前段ステージ用の処理ユニットによる処理が終了した２以上のスレッドに係る命令の処理を連続して行うように、複数の処理ユニットを制御する。
【００３６】
本実施形態によれば、各命令に係るステージ毎の処理を少なくとも４クロック（バンクあたりの実行コンテキスト数）ずつ遅延させることが出来る。例えば、スレッドＢ１Ｔ１の命令は、クロックｎで処理ユニットＩＦによって命令フェッチされた後、クロックｎ＋４で処理ユニットＩＤによって命令デコードおよびレジスタフェッチされ、クロックｎ＋８で処理ユニットＥＸによって実行され、クロックｎ＋１２で処理ユニットＭＥＭによってメモリアクセスされ、クロックｎ＋１６で処理ユニットＷＢによってライトバックされることで、処理が完了する。このような制御が行われることで、前段ステージと後段ステージとの間に十分な時間的余裕が出来、メモリアクセス等のレスポンス待ちに長い時間がかかるような処理を行う場合にも、無駄の少ない命令パイプラインを構成することが出来る。
【００３７】
なお、図５に示した例は、全ての処理ユニットにおいて、全ての命令の処理が１クロックで終了する場合のクロックサイクルである。何らかの理由で処理ユニットによる処理が１クロックで完了しないこともあり得、クロックサイクルは図５に示した例に限定されない。
【００３８】
また、制御部１３は、第一のバンクに割り当てられた２以上のスレッドに係る命令の処理が終了した後、第一のバンクに割り当てられた２以上のスレッドに係る命令が他の処理ユニットによって処理されている間、第二のバンクに割り当てられた２以上のスレッドに係る命令を処理するように、複数の処理ユニットを制御する。即ち、ある処理ユニットがあるバンクのスレッドを処理している間には、当該バンクの処理を完了した前段の処理ユニットは、次のバンクのスレッドを処理する。例えば、処理ユニットＩＤがバンク１のスレッド（スレッドＢ１Ｔ１からＢ１Ｔ４）を処理している間には、バンク１の処理を完了した処理ユニットＩＦは、バンク２のスレッドＢ２Ｔ１からＢ２Ｔ４を処理する。このため、本実施形態によれば、前記したような処理の遅延を可能としつつ、全体のスループットを向上させることが出来る。
【００３９】
図５に示されたクロックサイクルが１周すると、再びスレッドＢ１Ｔ１が処理ユニットＩＦによって処理される。ここで、各スレッドには、上述の通り当該スレッドにおいて実行されるプログラムに含まれる命令が実行すべき順に含まれているため、次のクロックサイクルにおいて処理される命令は、スレッドＢ１Ｔ１に含まれる、前のクロックサイクルにおいて処理された命令の次の命令である。
【００４０】
上記説明した実施形態によれば、前段ステージと後段ステージとの間に十分な時間的余裕が出来、メモリアクセス等のレスポンス待ちに長い時間がかかるような処理を行う場合にも、無駄の少ない命令パイプラインを構成することが出来、ＣＰＵ１１による並列処理をより効率的に行うことが出来る。
【００４１】
また、従来、メモリアクセスの処理に多くのクロックを消費して前記したような状態が発生してしまうことを避けるために、プロセッサー内に一時メモリを設けてデータをキャッシュする仕組みがあるが、このような仕組みによってプロセッサーが複雑化するという問題もあった。上記説明した実施形態によれば、全体のスループットを下げることなく各命令に係る処理を遅延させることが可能であるため、プロセッサー内に従来設けられていた一時メモリを省略し、プロセッサーの構成が複雑化することを防ぐことも可能である。但し、本開示の実施に際して、一時メモリは省略されなくてもよい。
【００４２】
更に、上記説明した実施形態によれば、バンク毎にスレッドを並行して処理するため、処理ユニットを無駄なく用いることが出来、プロセッサー全体のスループットを向上させることも可能である。
【００４３】
なお、上述の通り、上記に説明した実施の形態は、例示であって、本開示に係るプロセッサーおよび方法を具体的構成に限定するものではない。実施にあたっては、実施形態に応じた具体的構成が適宜採用され、また、種々の改良や変形が行われてよい。例えば、上記開示は、シングルコアのＣＰＵに採用されてもよいし、マルチコアのＣＰＵに採用されてもよい。
【符号の説明】
【００４４】
１１  ＣＰＵ
１２  メモリ
【要約】
プロセッサーによる並列処理をより効率的に行うことを課題とし、プロセッサーに、複数のステージに分けて命令を処理するために用意された、各ステージに対応する複数の処理ユニットと、前段ステージ用の処理ユニットが複数の命令の処理を連続して行った後に、後段ステージ用の処理ユニットが、前段ステージ用の処理ユニットによる処理が終了した複数の命令の処理を連続して行うように、複数の処理ユニットを制御する制御手段と、を備えた。【図１】
0005630798.tif 000002
【図２】
0005630798.tif 000003
【図３】
0005630798.tif 000004
【図４】
0005630798.tif 000005
【図５】
0005630798.tif 000006
【図６】
0005630798.tif 000007