(57)【要約】【課題】プロセッサの演算処理を停止させることなく、コンテキストの入替やコンテキストスイッチングを行うことができるマルチプロセッサを提供する。【解決手段】スピル／フィルキャッシュレジスタは、自分自身以外の全ての複数のプロセッサユニット、および、自分自身のプロセッサエレメントがキャッシュメモリにアクセスしていない期間に、別系統の内部バスを使用してキャッシュメモリにアクセスし、レジスタファイルに格納されているデータの数が、上限値〜下限値の範囲内となるように、プロセッサエレメントの演算処理と並行してデータの入替処理を行う。コンテキストスイッチコントローラは、コンテキストポインタレジスタが保持するコンテキストポインタの値に基づいて、プロセッサエレメントがスレッドを切替る時に、切替前のスレッドに対応するコンテキストを、切替後のスレッドに対応するコンテキストに切替る。【選択図】図１
2008059455.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサユニットと、該複数のプロセッサユニットの各々からアクセスされるキャッシュメモリとを備え、
前記プロセッサユニットは、スレッドを演算処理するプロセッサエレメントと、少なくとも１つのレジスタファイルメカニズムを含むスピル／フィルキャッシュレジスタと、コンテキストスイッチコントローラとを備え、
前記レジスタファイルメカニズムは、複数のレジスタを含むレジスタファイルと、該レジスタファイルのレジスタに格納されるデータの数の上限値および下限値が設定されるオーバーフローレジスタおよびアンダーフローレジスタと、前記スレッドに対応するコンテキストが格納されているレジスタグループを指定するコンテキストポインタの値を保持する少なくとも１つのコンテキストポインタレジスタと、前記プロセッサエレメントと前記キャッシュメモリとの間でアクセスを行うための内部バスとは別系統の内部バスを使用して、前記レジスタファイルと前記キャッシュメモリとの間で前記データのアクセスを行う、前記コンテキストポインタレジスタと同数のバスインタフェイスとを備え、
前記スピル／フィルキャッシュレジスタは、自分自身以外の全ての前記プロセッサユニット、および、自分自身の前記プロセッサユニットのプロセッサエレメントが前記キャッシュメモリにアクセスしていない期間に、前記別系統の内部バスを使用して前記キャッシュメモリにアクセスし、前記レジスタファイルに格納されているデータの数が、前記上限値〜前記下限値の範囲内となるように、前記プロセッサエレメントの演算処理と並行して前記データの入替処理を行い、
前記コンテキストスイッチコントローラは、前記コンテキストポインタレジスタが保持するコンテキストポインタの値に基づいて、前記プロセッサエレメントが前記スレッドを切替る時に、切替前のスレッドに対応するコンテキストを、切替後のスレッドに対応するコンテキストに切替るコンテキストスイッチングを行うことを特徴とするマルチプロセッサ。
【請求項２】
前記レジスタファイルは、その全てのレジスタを含む１つのレジスタグループとされ、１つの前記コンテキストポインタレジスタを備え、
前記コンテキストスイッチコントローラは、前記１つのコンテキストポインタレジスタのコンテキストポインタの値を切替ることによって、前記コンテキストスイッチングを行うことを特徴とする請求項１に記載のマルチプロセッサ。
【請求項３】
前記レジスタファイルは、各々所定数のレジスタを含む複数のレジスタグループに分割され、該レジスタグループと同数の複数の前記コンテキストポインタレジスタを備え、
前記コンテキストスイッチコントローラは、前記複数のコンテキストポインタレジスタを切替ることによって、前記コンテキストスイッチングを行うことを特徴とする請求項１に記載のマルチプロセッサ。
【請求項４】
前記プロセッサユニットは、自分自身以外の全ての前記プロセッサユニット、および、自分自身の前記プロセッサエレメントが前記キャッシュメモリをアクセス中か否かを判断し、前記スピル／フィルキャッシュレジスタにイネーブル信号を通知することによって、前記複数のプロセッサユニット間および各々の前記プロセッサユニット内の内部バスのバスアービタ機能を実現することを特徴とする請求項１〜３のいずれかに記載のマルチプロセッサ。
【請求項５】
前記スピル／フィルキャッシュレジスタは、前記イネーブル信号の状態に基づいて、前記自分自身以外の全ての前記プロセッサユニット、および、自分自身の前記プロセッサエレメントが前記キャッシュメモリにアクセスしていない期間を認識することを特徴とする請求項４に記載のマルチプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサユニット（ＰＵ）を備え、各々のＰＵにおいて、プログラムを複数のスレッドに細分化し、所定数のスレッドを順次並列に演算処理する（マルチスレッド）マルチプロセッサ（ＭＰ）に関するものである。
【背景技術】
【０００２】
９０ｎｍや６５ｎｍ等の半導体プロセス技術の恩恵によって、例えば数百万ゲートを半導体チップ上に集積するための面積的な制約はなくなってきた。一方で、アプリケーションのパフォーマンス（処理能力）に対する要求は増加している。そのため、例えば組込型のＳＯＣ（システム・オン・チップ）のデザイン（設計）においては、ＭＰを使用することが一般的になってきている。
【０００３】
複雑なリアルタイムシステムにおいて、パフォーマンスの割り当ての問題、つまり、応答時間の問題は、ＭＰを用いることで簡単に解決できることが多い。組込型のアプリケーションは、多くの場合、非常に高いスレッド（１つの処理単位）への分割の柔軟性と、明確な並列実行性を持つ。それらは、アプリケーションをＭＰにマッピングして（割り当てて）、並列処理することを容易にする。
【０００４】
しかし、単にパフォーマンスの理由だけではなく、新しい半導体プロセス技術において、アイドル（休止）状態のハードウェアのリソースは、頻繁にリークの電力消費の原因となる。従って、ＭＰのリソースをフルに活用する必要性がある。
【０００５】
例えば、外部メインメモリからのデータがないか、現在実行中の他のスレッドからの制御依存、命令依存、データ依存等があって、あるスレッドが実行不可能な場合、プロセッサは、その実行不可能なスレッドを、実行可能な他のスレッドに切替ることで、プロセッサのフル活用は容易に達成できる。スレッドの切替時には、後述するコンテキストスイッチング（ＣＳ）が行われる。
【０００６】
また、Ｌ１（レベル１）／Ｌ２（レベル２）キャッシュ（キャッシュメモリ（ＣＭ））などの複数レベルの階層構造を有する共有メモリを搭載するＭＰでプログラム（スレッド）を並列処理すると、プロセッサの使用率が向上し、プロセッサ周辺の回路網と外部メインメモリの使用率も向上する。
【０００７】
従って、ＭＰは、一般的に、スレッドの切替時に、コンテキストスイッチング（ＣＳ）と呼ばれる、スレッドの切替に対応するコンテキスト（プロセッサの内部レジスタ等の状態を表すデータ）の入替を行うことで、キャッシュミスによる外部メインメモリへのアクセスのための長い遅延時間の問題や、制御依存、命令依存、データ依存および機能上の動作遅延のための同期不良の問題等を回避する。
【０００８】
従来、スレッドの切替時に、切替前のスレッドに対応するコンテキストは、後述するマルチレジスタファイル（ＭＲＦ）や、コンテキストキャッシュ（ＣＣ）などのレジスタファイル（ＲＦ）にストアされる（書き込まれる）。ＭＲＦやＣＣは、キャッシュミスや同期不良等の問題の発生時に、切替前のスレッドに対応するコンテキストをストアするために有効な手段である。
【０００９】
しかし、同期不良の問題が発生した時、スレッドの切替時に、問題の発生したスレッドはＣＭにストアされ、実行可能な他のスレッドがＣＭからロードされる（読み出される）。また、ロードされたスレッドに対応するコンテキストがＣＭからＲＦに格納される。一般的に、ＭＰは、スレッドの切替時すなわちＣＳ時に、ＣＭの操作の間、その演算処理が停止されるように設計されている。
【００１０】
以下、従来のＣＳ技術の問題点について述べる。
【００１１】
従来のエブリサイクル方式、または、ファイングレイン方式のスイッチング技術は、ラウンドロビンスケジュールを用いて、クロックサイクル毎にスレッドをインターリーブ（順次切替）することでＣＳのオーバーヘッドをゼロにする。また、スレッドの切替時に、切替前のスレッドに対応するコンテキストは、前述のように、ＭＲＦやＣＣなどのＲＦにストアされる。
【００１２】
１．ＭＲＦを採用するＭＰの場合
【００１３】
ＭＲＦは、プロセッサのパイプラインの段数（ステージ数）分のＲＦによって構成される。ＭＲＦを採用するＭＰでは、同期不良の問題が発生した時、その演算処理が停止され、スレッドの切替時に、問題の発生したスレッドがプロセッサのＲＦからＣＭにストアされ、実行可能な他のスレッドがＣＭからプロセッサのＲＦにロードされる。また、ロードされた切替後のスレッドに対応するコンテキストがＣＭからＲＦに格納される。
【００１４】
ＭＲＦを採用するＭＰの問題点の１つは、並列処理されるスレッドに対応する固定数のＲＦが必要となるため、パイプライン段数分のＲＦが必要なことである。また、もう１つの問題点は、同期不良の問題が発生すると、スレッドの切替時に、ＣＳを行うために、プロセッサの演算処理を停止しなければならず、スレッドの切替回数が多くなるに従って、その使用率が次第に低下することである。
【００１５】
２．ＣＣを採用するＭＰの場合
【００１６】
ＣＣは、所定数のＲＦと、使用するＲＦの位置を指定するコンテキストポインタ（ＣＰ）を格納する所定数のコンテキストポインタレジスタ（ＣＰＲ）とによって構成される。ＣＣを採用するＭＰでは、並列処理されるスレッド数以上のコンテキスト数を格納できるので、少ない個数のＲＦで多くのスレッドに対応できる。また、ＣＰの値を変更することで簡単にＣＳを行うことができる。
【００１７】
ＣＣを採用するＭＰでは、並列処理されるスレッド数よりも多いコンテキスト数を格納できるので、ＣＳの時にプロセッサの演算処理が停止されることは皆無である。コンテキストの入替はプロセッサの空き時間に行われるが、スレッドの切替が頻繁に発生すると、ＣＳが頻繁に発生して、コンテキストの入替が間に合わなくなると、プロセッサの演算処理を停止させる必要が生じる可能性がないとは言えない。
【００１８】
なお、本発明に関わる先行技術文献には、非特許文献１，２などがある。
【００１９】
【非特許文献１】Peter R. Nuth and William J. Dally著、"A Mechanism for Efficient Context Switching"、"ACM SIGARCH and IEEE Workshop on Multithreaded Computers, Supercomputing '91"、１９９１年１１月
【非特許文献２】D.M. Tullsen, S.J. Eggers, and H.M. Levy著、"Simultaneous multithreding: Maximizing on-chip parallelism"、"Int. Symp. on Computer Architecture"、１９９５年６月、ｐ．３９２−４０３
【発明の開示】
【発明が解決しようとする課題】
【００２０】
本発明の目的は、前記従来技術に基づく問題点を解消し、プロセッサの演算処理を停止させることなく、コンテキストの入替やコンテキストスイッチングを行うことができるマルチプロセッサを提供することにある。
【課題を解決するための手段】
【００２１】
上記目的を達成するために、本発明は、複数のプロセッサユニットと、該複数のプロセッサユニットの各々からアクセスされるキャッシュメモリとを備え、
前記プロセッサユニットは、スレッドを演算処理するプロセッサエレメントと、少なくとも１つのレジスタファイルメカニズムを含むスピル／フィルキャッシュレジスタと、コンテキストスイッチコントローラとを備え、
前記レジスタファイルメカニズムは、複数のレジスタを含むレジスタファイルと、該レジスタファイルのレジスタに格納されるデータの数の上限値および下限値が設定されるオーバーフローレジスタおよびアンダーフローレジスタと、前記スレッドに対応するコンテキストが格納されているレジスタグループを指定するコンテキストポインタの値を保持する少なくとも１つのコンテキストポインタレジスタと、前記プロセッサエレメントと前記キャッシュメモリとの間でアクセスを行うための内部バスとは別系統の内部バスを使用して、前記レジスタファイルと前記キャッシュメモリとの間で前記データのアクセスを行う、前記コンテキストポインタレジスタと同数のバスインタフェイスとを備え、
前記スピル／フィルキャッシュレジスタは、自分自身以外の全ての前記プロセッサユニット、および、自分自身の前記プロセッサユニットのプロセッサエレメントが前記キャッシュメモリにアクセスしていない期間に、前記別系統の内部バスを使用して前記キャッシュメモリにアクセスし、前記レジスタファイルに格納されているデータの数が、前記上限値〜前記下限値の範囲内となるように、前記プロセッサエレメントの演算処理と並行して前記データの入替処理を行い、
前記コンテキストスイッチコントローラは、前記コンテキストポインタレジスタが保持するコンテキストポインタの値に基づいて、前記プロセッサエレメントが前記スレッドを切替る時に、切替前のスレッドに対応するコンテキストを、切替後のスレッドに対応するコンテキストに切替るコンテキストスイッチングを行うことを特徴とするマルチプロセッサを提供するものである。
【００２２】
ここで、前記レジスタファイルは、その全てのレジスタを含む１つのレジスタグループとされ、１つの前記コンテキストポインタレジスタを備え、
前記コンテキストスイッチコントローラは、前記１つのコンテキストポインタレジスタのコンテキストポインタの値を切替ることによって、前記コンテキストスイッチングを行うことが好ましい。
【００２３】
あるいは、前記レジスタファイルは、各々所定数のレジスタを含む複数のレジスタグループに分割され、該レジスタグループと同数の複数の前記コンテキストポインタレジスタを備え、
前記コンテキストスイッチコントローラは、前記複数のコンテキストポインタレジスタを切替ることによって、前記コンテキストスイッチングを行うことが好ましい。
【００２４】
また、前記プロセッサユニットは、自分自身以外の全ての前記プロセッサユニット、および、自分自身の前記プロセッサエレメントが前記キャッシュメモリをアクセス中か否かを判断し、前記スピル／フィルキャッシュレジスタにイネーブル信号を通知することによって、前記複数のプロセッサユニット間および各々の前記プロセッサユニット内の内部バスのバスアービタ機能を実現することが好ましい。
【００２５】
また、前記スピル／フィルキャッシュレジスタは、前記イネーブル信号の状態に基づいて、前記自分自身以外の全ての前記プロセッサユニット、および、自分自身の前記プロセッサエレメントが前記キャッシュメモリにアクセスしていない期間を認識することが好ましい。
【発明の効果】
【００２６】
スピル／フィルキャッシュレジスタ（ＳＦＣＲ）は、自分自身以外の全てのプロセッサユニット、および、自分自身のプロセッサエレメント（ＰＥ）がＣＭにアクセスしていない期間に、ＰＥが使用する内部バスとは別系統の内部バスを使用してＣＭにアクセスし、ＲＦに格納されているデータの数が、上限値〜下限値の範囲内となるように、ＰＥの演算処理と並行してデータの入替処理を行う。
【００２７】
その結果、ＳＦＣＲは、ＰＥの処理内容に応じて多少の増減はあるものの、ＰＥの全処理時間のうちの約７５％の時間をデータの入替処理に使用することができる。
【００２８】
従来のＭＲＦでは、ＣＳの時にプロセッサの処理を停止させる必要があった。また、ＣＣでは、プロセッサがアイドル期間に、データの入替処理が行われていた。これに対し、本発明のマルチプロセッサでは、ＰＥの処理を停止させることなく、ＳＦＣＲによって、ＰＥの演算処理と並行してデータの入替処理やＣＳを実行することができるので、その処理効率を従来よりも向上させることができる。
【００２９】
また、オーバーフローレジスタおよびアンダーフローレジスタを設けることによって、ＲＦに格納されるデータの数を常に最適数に保つことができる。また、ＳＦＣＲが、無駄にＣＭにアクセスし、消費電力が増大するのを防止することができる。
【発明を実施するための最良の形態】
【００３０】
以下に、添付の図面に示す好適実施形態に基づいて、本発明のマルチプロセッサを詳細に説明する。
【００３１】
図１は、本発明のマルチプロセッサの構成を表す一実施形態の概念図である。同図に示すマルチプロセッサ（ＭＰ）１０は、複数のプロセッサユニット（ＰＵ）１２と、キャッシュメモリ（ＣＭ）１４とによって構成されている。また、ＭＰ１０は、外部バス１６を介して外部メインメモリと相互に接続されている。なお、図１では、紙面の都合上、代表的に１つのＰＵ１２のみを表している。
【００３２】
なお、ＭＰ１０に搭載されるＰＵ１２の個数は、２つ以上であれば良く、その個数の上限はない。
【００３３】
ＭＰ１０において、複数のＰＵ１２の各々は、プロセッサエレメント（ＰＥ）１８と、スピル／フィルキャッシュレジスタ（ＳＦＣＲ）２０と、コンテキストスイッチコントローラ（ＣＳＣ）２２とによって構成されている。
【００３４】
まず、ＰＥ１８について説明する。
【００３５】
ＰＥ１８は、４段のパイプラインを備えており、４つのスレッドを順次演算処理（パイプライン処理）する。すなわち、ＰＥ１８では、４つの命令が順次パイプライン処理される。この時、ＰＥ１８は、命令をＣＭ１４から順次フェッチし、デコードし、実行（演算処理）することを繰り返し行う。また、複数のＰＵ１２のＰＥ１８によって複数のスレッドが並列処理（マルチスレッド）される。
【００３６】
ＰＥ１８は、命令の実行に必要なデータがあれば、ＳＦＣＲ２０→ＣＭ１４の順序で検索し、そのどちらかに必要なデータ存在すれば、そこからデータをロードする。両者ともに必要なデータが存在しない場合、キャッシュミス、同期不良等の問題が生じていることになる。一方、ＰＥ１８は、処理結果のデータを、ＳＦＣＲ２０にストアする。
【００３７】
ＰＥ１８は、キャッシュミスや同期不良等の問題が発生すると、その問題の発生したスレッドの処理を停止し、優先順位に応じてスレッドを切替る。この時、問題の発生した切替前のスレッドのコンテキストは、後述するレジスタファイル（ＲＦ）２６またはデータキャッシュ（ＤＣ）４４ｂにストアされ、切替後のスレッドに対応するコンテキストがＲＦ２６またはＤＣ４４ｂからロードされる。
【００３８】
また、ＰＥ１８は、図１では図示を省略しているが、ＳＦＣＲ２０にイネーブル信号ＥＮを通知する。その詳細は後述するが、イネーブル信号ＥＮによって、複数のＰＵ１２間および各々のＰＵ１２内の内部バスのバスアービタ機能が実現される。
【００３９】
なお、ＰＥ１８のパイプライン段数は２段以上であれば良く、その段数に上限はない。通常、ＰＥ１８は、図示以外の様々な構成要素を含む。また、ＣＭ１４と外部メインメモリとの間のアクセスは、一般的に、キャッシュコントローラ等によって制御される。しかし、図１では、説明を簡単に行うために、本発明の説明に必要と考えられる構成要素のみを示している。
【００４０】
続いて、ＳＦＣＲ２０について説明する。
【００４１】
ＳＦＣＲ２０は、ＭＰ１０の特徴的な構成要素であって、ＰＥ１８のパイプライン段数に相当する４つのレジスタファイルメカニズム（ＲＦＭ）２４（図２参照）によって構成されている。ここで、スピルはストア、フィルはロードと同意語である。
【００４２】
各々のＲＦＭ２４は、図２に示すように、３２ビットの、６４個のレジスタ０〜６３を含むレジスタファイル（ＲＦ）２６と、オーバーフローレジスタ（ＯＦＲ）２８と、アンダーフローレジスタ（ＵＦＲ）３０と、第１および第２のコンテキストポインタレジスタ（ＣＰＲ）３２ａ、３２ｂと、第１および第２のセレクタ＆バッファ（Ｓ＆Ｂ）３４ａ、３４ｂとによって構成されている。
【００４３】
ＲＦ２６は、レジスタ０〜３１を含む第１のレジスタグループと、レジスタ３２〜６３を含む第２のレジスタグループに分割されている。各々のレジスタには、所定のスレッドに対応するコンテキストが格納される。スレッドの切替時に同時に、後述するＣＳＣ２２によって、切替前のスレッドに対応するコンテキストは、切替後のスレッドに対応するコンテキストに切替られる（コンテキストスイッチング（ＣＳ））。
【００４４】
本実施形態では、第１のレジスタグループの各々のレジスタには、コンテキスト０のグループのデータが格納される。一方、第２のレジスタグループの各々のレジスタには、コンテキスト１のグループのデータが格納される。コンテキスト０，１は、スレッドの切替時に、ＣＳＣ２２によって切替られるデータのグループを表現したものである。コンテキスト０，１は、スレッドの切替時に交互に切替られる。
【００４５】
ＯＦＲ２８およびＵＦＲ３０には、それぞれＲＦ２６のレジスタに格納されるデータ数の上限値および下限値が設定される。ＳＦＣＲ２０は、その詳細は後述するが、自分自身のＰＵ１２を含む全てのＰＵ１２が、ＣＭ１４（ＤＣ４４ｂ）をアクセスしていない期間にＤＣ４４ｂをアクセスし、ＲＦ２６に格納されるデータの数が、上述する上限値〜下限値の範囲内となるように、データの入替処理を行う。
【００４６】
ＲＦ２６の各々のレジスタに格納されているデータは、スレッドの切替時にＤＣ４４ｂにストアされる。一方、ＳＦＣＲ２０は、前述のようにデータの入替処理を随時行う。従って、ＲＦ２６内のデータ数は常に増減する。
【００４７】
例えば、上限値および下限値として、それぞれＲＦ２６のレジスタ数の７０％の数および３０％の数が設定された場合、ＳＦＣＲ２０は、ＲＦ２６の各々のレジスタに格納されているデータの数が、レジスタ数の７０％の数を上回ると、ＤＣからデータのロードを停止する。一方、レジスタ数の３０％の数を下回ると、ＤＣからデータのロードを開始する。
【００４８】
ＯＦＲ２８およびＵＦＲ３０を設けることによって、ＲＦ２６に格納されるデータの数を常に最適数に保つことができる。また、ＳＦＣＲ２０が、無駄にＣＭ１４にアクセスし、消費電力が増大するのを防止することができる。
【００４９】
なお、上限値は、ＲＦ２６のレジスタ数以下の値、下限値は、１以上の値であり、上限値＞下限値である。上記例では、上限値および下限値を％で表しているが、レジスタ数などの他のパラメータで設定しても良い。
【００５０】
第１および第２のＣＰＲ３２ａ、３２ｂは、それぞれ第１および第２のレジスタグループ（ＲＦ）に含まれる３２個のレジスタの中から、切替後のスレッドに対応するデータが格納されている先頭レジスタを指定するコンテキストポインタ（ＣＰ）の値を保持する。
【００５１】
本実施形態の場合、スレッドの切替時には、ＣＳＣ２２によって、第１および第２のＣＰＲ３２ａ、３２ｂが交互に切替られる。これによって、前述のように、ＣＳが瞬時に行われる。
【００５２】
ＰＥ１８は、内部バス３８ａ（ＰＥ１８が使用する内部バス）を使用してＣＭ１４（ＩＣ４４ａおよびＤＣ４４ｂ）との間でアクセスを行う。第１および第２のＳ＆Ｂ３４ａ、３４ｂは、ＰＥ１８が使用する内部バス３８ａとは別系統の内部バス３８ｂを使用して、ＲＦ２６とＤＣ４４ｂとの間でデータのアクセスを行うためのバスインタフェイスである。
【００５３】
第１のＳ＆Ｂ３４ａは、一方（図中左側）で、第１の内部バス３６ａを介してレジスタ０〜３１と接続され、第２のＳ＆Ｂ３４ｂは、一方（同左側）で、第２の内部バス３６ｂを介してレジスタ３２〜６３と接続されている。また、Ｓ＆Ｂ３４ａ、３４ｂは、その他方（図中右側）で、ＰＥ１８が使用する内部バス３８ａとは別系統の内部バス３８ｂを介してＤＣ４４ｂに接続されている。
【００５４】
なお、内部バス３６ａ、３６ｂは、パラレルバスであっても良いし、シリアルバスであっても良い。
【００５５】
Ｓ＆Ｂ３４ａ、３４ｂにおいて、セレクタは、Ｓ＆Ｂ３４ａ、３４ｂのどちらが内部バス３８ｂを使用してＤＣ４４ｂにアクセスするのかを選択する制御を行う。前述の通り、スレッドの切替時にＣＳが行われ、ＣＰＲ３２ａ、３２ｂが交互に切替られる。ＣＰＲ３２ａに切替られるとＳ＆Ｂ３４ａが選択され、ＣＰＲ３２ｂに切替されるとＳ＆Ｂ３４ｂが選択される。また、バッファは、データをバッファリング出力する。
【００５６】
一般的に、ＲＩＳＣなどのプロセッサでは、ＰＥ１８がＣＭ１４をアクセスする時間は、全処理時間のうちの約２５％である。つまり、残りの約７５％の時間は、ＰＥ１８はＣＭ１４をアクセスしていない。
【００５７】
ＳＦＣＲ２０は、自分自身以外の全てのＰＵ１２、および、自分自身のＰＵ１２のＰＥ１８がＣＭ１４にアクセスしていない期間に、ＰＥ１８が使用する内部バス３８ａとは別系統の内部バス３８ｂを使用してＤＣ４４ｂにアクセスし、ＲＦ２６に格納されているデータの数が、前述の上限値〜下限値の範囲内となるように、ＰＥ１８の演算処理と並行してデータの入替処理を行う。
【００５８】
その結果、ＳＦＣＲ２０は、ＰＥ１８がＣＭ１４をアクセスする時間の増減に応じて多少の時間の減増はあるものの、ＰＥ１８の全処理時間のうちの約７５％の時間をデータの入替処理に使用することができる。
【００５９】
従来のＭＲＦでは、ＣＳの時にプロセッサの処理を停止させる必要があった。また、ＣＣでは、プロセッサがアイドル状態の期間に、データの入替処理が行われていた。これに対し、ＭＰ１０では、ＰＥ１８の処理を停止させることなく、ＰＥ１８の演算処理と並行してデータの入替処理やＣＳを実行することができるので、その処理効率を従来よりも向上させることができる。
【００６０】
続いて、ＣＳＣ２２について説明する。
【００６１】
ＣＳＣ２２は、第１および第２のＣＰＲ３２ａ、３２ｂのいずれかに保持されているＣＰの値に基づいて、ＰＥ１８がスレッドを切替る時に、切替前のスレッドに対応するコンテキストを、切替後のスレッドに対応するコンテキストに切替る制御（ＣＳ）を行う。本実施形態では、ＣＳ時に、ＣＳＣ２２によって、使用するＣＰＲ３２ａ、３２ｂを切替ることでコンテキスト０，１のグループが交互に切替られる。
【００６２】
例えば、ＣＳの時に、ＣＳＣ２２によって、第１のＣＰＲ３２ａから第２のＣＰＲ３２ｂに切替られると、ＲＦＭ２４では、切替前に使用されていたＣＰＲ３２ａのＣＰの値で指定されるＲＦ２６のレジスタを先頭とするレジスタグループに格納されているコンテキストから、ＣＰＲ３２ｂのＣＰの値で指定されるＲＦ２６のレジスタを先頭とするレジスタグループに格納されているコンテキストに切替られる。ＣＰＲ３２ｂからＣＰＲ３２ａに切替られる場合も同様である。
【００６３】
図１では、２つのコンテキスト０，１を示している。スレッドが切替られると、ＣＳＣ２２は、例えば切替前のスレッドに対応するコンテキスト０のグループから、切替後のスレッドに対応するコンテキスト１のグループに切替る。図１に示すコンテキスト０，１のグループは、それぞれのＲＦＭ２４のＲＦ２６の第１および第２のレジスタグループに含まれるコンテキスト０，１のグループを概念的に表したものである。
【００６４】
つまり、ＭＰ１０では、スレッドの切替時に、ＣＳＣ２２によって、使用するＣＰＲ３２ａ、３２ｂを切替ることでＣＳが行われる。ＲＦＭ２４では、切替前のＣＰＲのＣＰの値で指定されるレジスタを先頭とするレジスタグループに格納されているコンテキストがＤＣ４４ｂにストアされ、その空き状態となったレジスタグループに次のコンテキストのレジスタグループがＤＣ４４ｂからロードされる。
【００６５】
上記のように、ＭＰ１０では、ＲＦ２６を２つのレジスタグループに分け、各々のレジスタグループに対応する２つのＣＰＲ３２ａ、３２ｂを設けて、スレッドに対応するコンテキストが格納されているレジスタを指定する。また、ＰＥ１８が使用する内部バス３８ａとは別系統の内部バス３８ｂを設け、ＰＥ１８がＣＭ１４をアクセスしていない期間にＤＣ４４ｂをアクセスして、データの入替処理を行う。
【００６６】
なお、ＲＦ２６に含まれるレジスタは２個以上であれば良く、その上限もビット幅の制限もない。また、レジスタグループの個数も適宜変更することができる。例えば、ＲＦ２６全体を１つのレジスタグループとしても良いし、あるいは、３つ以上のレジスタグループに分割しても良い。この場合、レジスタグループの個数、ＣＰＲやＳ＆Ｂの個数、ＲＦとＳ＆Ｂとの間を接続する内部バスの本数を同数にする必要がある。
【００６７】
また、本実施形態のように、複数のＣＰＲの中から使用するＣＰＲを変更することでもＣＳを行うことができるし、あるいは、現在使用中のＣＰＲのＣＰの値を変更することでもＣＳを行うことができる。例えば、ＲＦ２６全体が３２個のレジスタを含むレジスタグループ１つで構成される場合、ＣＰＲ３２ａのＣＰの値を変更することで簡単にＣＳを行うことができる。
【００６８】
また、ＳＦＣＲ２０では、従来のＣＣと同様に、ＣＰを使用して、演算処理されるスレッドに対応するコンテキストを指定するため、パイプライン段数分のＲＦＭ２４（ＲＦ２６）は必要ない。すなわち、ＣＰＲの個数を変更することによって、演算処理されるスレッドに対応する個数のコンテキストを指定することができるため、ＲＦＭ２４（ＲＦ２６）は、少なくとも１つあれば良い。
【００６９】
つまり、ＣＰＲの個数×ＲＦＭ２４の個数が、パイプライン段数と同数以上あればよい。従って、本実施形態のように、ＰＥ１８のパイプライン段数が４段の場合、ＲＦＭ２４の個数を１つにすると、ＣＰＲは４個以上必要となる。また、ＲＦＭ２４の個数をパイプライン段数と同数の４つにすると、ＣＰＲは、各々のＲＦＭ２４について１個以上必要となる。
【００７０】
ＰＵ１２は、以上のようなものである。
次に、ＣＭ１４について説明する。
【００７１】
ＣＭ１４は、複数のＰＵ１２の各々からアクセスされる共有メモリであって、Ｌ１キャッシュ４０と、Ｌ２キャッシュ４２とによって構成されている。Ｌ１キャッシュ４０は、命令を保持するインストラクションキャッシュ（ＩＣ）４４ａと、データを保持するデータキャッシュ（ＤＣ）４４ｂとによって構成されている。また、Ｌ２キャッシュ４２は、命令とデータの両方を保持する統合型のＣＭである。
【００７２】
複数のＰＵ１２は、ＣＭ１４にアクセスする時、Ｌ１キャッシュ４０→Ｌ２キャッシュ４２の順に命令およびデータの検索を行い、そのいずれかに目的とする命令およびデータがあれば、そこから命令およびデータをロードする。そのどちらにも目的とする命令およびデータがない場合はキャッシュミスである。命令およびデータのストアも、Ｌ１キャッシュ４０→Ｌ２キャッシュ４２の順に行われる。
【００７３】
なお、ＣＭ１４は、Ｌ１キャッシュだけを設けても良いし、本実施形態のように、Ｌ１キャッシュ／Ｌ２キャッシュを設けても良いし、Ｌ３キャッシュ以上の複数のＣＭを設ける構成としても良い。
【００７４】
次に、複数のＰＵ１２間の関係について説明する。
【００７５】
既に述べた通り、図１に示すＭＰ１０には、図３に示すように、複数（０〜ｎ：ｎは１以上の整数）のＰＵ１２が搭載されている。各々のＰＵ１２の構成は上記の通りである。図３に示すように、複数のＰＵ１２は、ＰＥ１８が使用する内部バス３８ａとは別系統の内部バス３８ｂおよび内部グローバルバス４６を介してＤＣ４４ｂに接続されている。内部グローバルバス４６には、ＰＥ１８が使用する内部バス３８ａも接続されている。
【００７６】
ここで、複数のＰＵ１２の各々が同時にＤＣ４４ｂにアクセスすると、内部グローバルバス４６上で衝突が発生する。そのため、各々のＰＵ１２において、ＰＥ１２とＳＦＣＲ２０との間で、ＤＣ４４ｂへのアクセスを許可するか禁止するかを指示するイネーブル信号ＥＮが使われる。イネーブル信号ＥＮを用いることによって、ＰＵ１２間およびＰＵ１２内の内部バスのバスアービタ機能が実現できる。
【００７７】
イネーブル信号ＥＮがイネーブル状態（許可状態）のＳＦＣＲ２０だけが、内部バス３８ｂおよび内部グローバルバス４６を介してＤＣ４４ｂにアクセスすることができる。これに対し、イネーブル信号ＥＮがディスエーブル状態（禁止状態）のＳＦＣＲ２０は、内部バス３８ｂおよび内部グローバルバス４６を使用する権利がなく、ＤＣ４４ｂにアクセスすることはできない。
【００７８】
また、各々のＰＵ１２では、他のＰＵ１２がＣＭ１４をアクセス中か否かを判断してイネーブル信号ＥＮを通知する。従って、あるＰＵ１２でイネーブル信号ＥＮがイネーブル状態となる場合、そのＰＵ１２自身のＰＥ１８はＣＭ１４をアクセスしていないし、それ以外の全てのＰＵ１２もＣＭ１４をアクセスしていないことが保証される。これによって、ＰＵ１２間およびＰＵ１２内両方のバスアービタ機能が実現される。
【００７９】
次に、ＭＰ１０の動作を、その特徴部分を中心に説明する。
【００８０】
複数のＰＵ１２の各々のＰＥ１８では、ＣＭ１４に格納されている命令およびデータ、ならびに、ＳＦＣＲ２０に格納されているデータを使用して、順次パイプライン処理が行われる。また、ＭＰ１０では、キャッシュミスや同期不良等の問題が発生すると、その問題が発生したＰＵ１２において、ＰＥ１８によってスレッドの切替が行われ、それと同時にＣＳＣ２２によってＣＳが行われる。
【００８１】
複数のＰＵ１２の各々では、他のＰＵ１２がＣＭ１４をアクセス中か否かの判断が行われる。その結果、他のどのＰＵ１２もＣＭ１４をアクセスしていないと判断すると、そのＰＵ１２では、ＰＥ１８がＣＭ１４をアクセスしていない期間に、ＰＥ１８からＳＦＣＲ２０に対して、アクティブ状態のイネーブル信号ＥＮが通知される。これによって、ＳＦＣＲ２０は、ＤＣ４４ｂにアクセスしてコンテキストの入替処理を行う。
【００８２】
上記のように、ＭＰ１０では、複数のＰＵ１２の各々が、衝突を起こすことなく、しかもＰＥ１８の演算処理と並行して、コンテキストの入替処理およびＣＳを行うことができる。従って、ＭＰ１０では、ＰＥ１８の演算処理を停止させることなく、コンテキストの入替処理およびＣＳをすることができるので、ＭＰ１０の処理能力を最大限に引き出すことができる。
【００８３】
本発明は、基本的に以上のようなものである。
以上、本発明のマルチプロセッサについて詳細に説明したが、本発明は上記実施形態に限定されず、本発明の主旨を逸脱しない範囲において、種々の改良や変更をしてもよいのはもちろんである。
【図面の簡単な説明】
【００８４】
【図１】本発明のマルチプロセッサの構成を表す一実施形態の概念図である。
【図２】図１に示すスピル／フィルキャッシュレジスタに含まれる１つのレジスタファイルメカニズムの構成を表す概念図である。
【図３】図１に示すプロセッサユニットの構成を表す概念図である。
【符号の説明】
【００８５】
１０  マルチプロセッサ（ＭＰ）
１２  プロセッサユニット（ＰＵ）
１４  キャッシュメモリ（ＣＭ）
１６  外部バス
１８  プロセッサエレメント（ＰＥ）
２０  スピル／フィルキャッシュレジスタ（ＳＦＣＲ）
２２  コンテキストスイッチコントローラ（ＣＳＣ）
２４  レジスタファイルメカニズム（ＲＦＭ）
２６  レジスタファイル（ＲＦ）
２８  オーバーフローレジスタ（ＯＦＲ）
３０  アンダーフローレジスタ（ＵＦＲ）
３２ａ、３２ｂ  コンテキストポインタレジスタ（ＣＰＲ）
３４ａ、３４ｂ  セレクタ＆バッファ（Ｓ＆Ｂ）
３６ａ、３６ｂ、３８ａ、３８ｂ  内部バス
４０  Ｌ１キャッシュ
４２  Ｌ２キャッシュ
４４ａ  インストラクションキャッシュ（ＩＣ）
４４ｂ  データキャッシュ（ＤＣ）
４６  内部グローバルバス
【図１】
2008059455.tif 000003
【図２】
2008059455.tif 000004
【図３】
2008059455.tif 000005