(57)【要約】  【課題】簡単な回路構造の工夫によって、並列処理されるスレッド間にデータ依存がある場合であっても、プロセッサの処理効率を低下させることなく、依存データの受け渡しを高速に行うことができるマルチプロセッサシステムを提供する。  【解決手段】レジスタファイルは、フレームデータに含まれる出力元情報と入力先情報とが一致するか異なるかを検出する機能を備えるサーキュラバッファによって構成されている。また、全てのプロセッサが有するレジスタファイルが、レジスタファイルから出力されたデータを一方向にシフトするリングバスによって接続されている。出力元情報と入力先情報とが異なることが検出された場合、入力先情報とともに依存データがリングバス上に出力される。各々のプロセッサは、入力先情報が自分自身のプロセッサの識別情報と一致する場合に入力先情報に対応する依存データを受け取る。【選択図】図１
2006331281.tif 000002
【特許請求の範囲】
【請求項１】
マルチスレッド化されたプログラムの各々のスレッドを複数のプロセッサで並列処理するマルチプロセッサシステムであって、
各々の前記プロセッサは、所定数のレジスタを含むレジスタファイルを有し、各々の前記レジスタは、自分自身のプロセッサで処理されるスレッドに対応して、前記複数のプロセッサで並列処理されるスレッド間の依存データ、該依存データの出力元情報および入力先情報を含むフレームデータを保持し、前記レジスタファイルは、前記フレームデータに含まれる出力元情報と入力先情報とが一致するか異なるかを検出する機能を備えるサーキュラバッファによって構成され、
全ての前記プロセッサが有するレジスタファイルが、該レジスタファイルから出力されたデータを一方向にシフトするリングバスによって接続され、
さらに、各々の前記プロセッサは、前記サーキュラバッファの機能によって前記フレームデータに含まれる出力元情報と入力先情報とが異なることが検出された場合、該フレームデータに含まれる入力先情報とともに依存データを前記リングバス上に出力し、該リングバス上に出力された入力先情報が自分自身のプロセッサの識別情報と一致する場合、該入力先情報に対応する依存データを受け取るリングバス制御回路を有することを特徴とするマルチプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチスレッド化されたプログラムの各々のスレッドを複数のプロセッサで並列処理するマルチプロセッサシステムに関するものである。
【背景技術】
【０００２】
従来、処理能力の向上を目的として、半導体装置の基本クロックの動作周波数を引き上げる競争が行われてきた。しかし、半導体製造プロセスの微細化が進み、半導体装置の集積度が高くなるとともに、その消費電力や発熱量の増大が問題となっている。この問題を解決する１つの手法として、マルチスレッド化されたプログラムの各々のスレッドを複数のプロセッサで並列処理するマルチプロセッサシステムが利用されている。
【０００３】
マルチプロセッサシステムは、例えば、上記複数のプロセッサと、これら複数のプロセッサから共通にアクセスが可能なグローバルメモリとによって構成される。このマルチプロセッサシステムでは、コンパイラ等によって作成され、グローバルメモリに格納されたプログラムの各々のスレッドから複数のプロセッサに命令が取り込まれ、全てのプロセッサにおいてスレッドが並列処理される。
【０００４】
ところで、上記マルチプロセッサシステムには、並列処理されるスレッド間にデータの依存関係が存在すると、その依存データを必要とするスレッドの処理が中断されるという問題がある。例えば、スレッド１，２，３，…が並列に実行中であり、スレッド１が、スレッド３の処理結果（依存データ）を使用して何らかの処理を行う場合、スレッド１は、スレッド３の処理が終了するまで自分自身の処理を実行することができない。
【０００５】
このため、スレッド１を処理中のプロセッサでは、処理が何も行われない空き時間が生じ、その分だけ処理効率が低下する。これを防止するために、処理が中断されたスレッド１が、他のスレッドとデータの依存関係のないスレッド４と入れ替えられ（インターリーブ）、スレッド４が先に処理される。一方、処理が中断されたスレッド１は、スレッド３の処理が終了して、依存データが使用可能となった後で処理が再開される。
【０００６】
この場合、例えば、スレッド３を処理したプロセッサから依存データが一旦グローバルメモリに保存され（ストアされ）、グローバルメモリからスレッド１を処理するプロセッサに依存データが取り込まれて（ロードされて）スレッド１の処理が再開される。しかし、グローバルメモリは、プロセッサ内部のレジスタやローカルメモリ（キャッシュメモリ）と比べて非常に動作速度が遅いため、処理効率が著しく低下するという問題がある。
【０００７】
これに対し、例えばコンパイラ等によってマルチスレッド化されたプログラムを作成する時に、あらかじめデータ依存によって処理が中断されないようにスレッドの処理の順序をシリアライズする（処理順序を入れ替える）ことが可能である。しかし、シリアライズを行うことによってインターリーブが制限され、プロセッサの空き時間が増えるため、同様に処理効率が低下するという問題がある。
【０００８】
また、クロスバーでプロセッサ間を相互に接続して、クロスバーの交差ポイントに各々クロスバースイッチを設けておき、スレッド間にデータ依存がある場合に、依存関係のあるプロセッサ間に存在するクロスバースイッチだけをオンにして直接相互に接続し、依存データの受け渡しを行う手法がある。しかし、この手法では、プロセッサの個数をＮとすると、クロスバーの構造や制御の複雑さがＮ2で増加するという問題がある。
【０００９】
なお、本発明の出願時に、本発明に関わる先行技術文献は存在していない。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
本発明の目的は、前記従来技術に基づく問題点を解消し、簡単な回路構造の工夫によって、並列処理されるスレッド間にデータ依存がある場合であっても、プロセッサの処理効率を低下させることなく、依存データの受け渡しを高速に行うことができるマルチプロセッサシステムを提供することにある。
【課題を解決するための手段】
【００１１】
上記目的を達成するために、本発明は、マルチスレッド化されたプログラムの各々のスレッドを複数のプロセッサで並列処理するマルチプロセッサシステムであって、
各々の前記プロセッサは、所定数のレジスタを含むレジスタファイルを有し、各々の前記レジスタは、自分自身のプロセッサで処理されるスレッドに対応して、前記複数のプロセッサで並列処理されるスレッド間の依存データ、該依存データの出力元情報および入力先情報を含むフレームデータを保持し、前記レジスタファイルは、前記フレームデータに含まれる出力元情報と入力先情報とが一致するか異なるかを検出する機能を備えるサーキュラバッファによって構成され、
全ての前記プロセッサが有するレジスタファイルが、該レジスタファイルから出力されたデータを一方向にシフトするリングバスによって接続され、
さらに、各々の前記プロセッサは、前記サーキュラバッファの機能によって前記フレームデータに含まれる出力元情報と入力先情報とが異なることが検出された場合、該フレームデータに含まれる入力先情報とともに依存データを前記リングバス上に出力し、該リングバス上に出力された入力先情報が自分自身のプロセッサの識別情報と一致する場合、該入力先情報に対応する依存データを受け取るリングバス制御回路を有することを特徴とするマルチプロセッサシステムを提供するものである。
【発明の効果】
【００１２】
本発明によれば、リングバスを使用することによって、コンパイラでスレッドのシリアライズを行ったり、構造や制御が複雑なクロスバーを使用することなく、プロセッサ間で高速に効率よく依存データの受け渡しを行うことができる。また、本発明によれば、レジスタファイルをサーキュラバッファで構成したことによって、自分自身のプロセッサの別のスレッドで必要となる依存データがリングバス上に出力されるのを防止できるので、リングバスを効率よく使用することができる。
【発明を実施するための最良の形態】
【００１３】
以下に、添付の図面に示す好適実施形態に基づいて、本発明のマルチプロセッサシステムを詳細に説明する。
【００１４】
図１は、本発明のマルチプロセッサシステムの構成を表す一実施形態の概略図である。同図に示すマルチプロセッサシステム１０は、複数のプロセッサＰＥ１，ＰＥ２，…，ＰＥｎと、これら複数のプロセッサＰＥ１，ＰＥ２，…，ＰＥｎから共通にアクセスが可能なグローバルメモリＧＭとによって構成されている。マルチプロセッサシステム１０は、グローバルメモリＧＭに保持された、マルチスレッド化されたプログラムの各々のスレッドを複数のプロセッサＰＥ１，ＰＥ２，…，ＰＥｎで並列処理する。
【００１５】
以下、主にプロセッサＰＥ１を代表例として説明するが、他のプロセッサＰＥ２，…，ＰＥｎも同様である。
【００１６】
プロセッサＰＥ１は、図２に示すように、プログラムカウンタレジスタＰＣ、命令キャッシュＩ／Ｃ、レジスタファイルＲＦ、データキャッシュＤ／Ｃ、演算ユニットＥ／Ｕなどの構成要素を含んでいる。なお、実際には、命令フェッチユニットや命令デコードユニットなどの他の多くの構成要素がプロセッサの内部に含まれているが、ここでは説明を簡単にするために省略してある。
【００１７】
プロセッサＰＥ１からは、グローバルメモリＧＭのアドレスを指定するアドレス信号が出力され、アドレスバスを介してグローバルメモリＧＭに入力されている。また、プロセッサＰＥ１とグローバルメモリＧＭはデータバスを介して相互に接続されている。プロセッサＰＥ１は、アドレス信号によって指定されるグローバルメモリＧＭのアドレスに対し、データバスを介してデータの読み出し（リード）／書き込み（ライト）を行う。
【００１８】
また、図１に示すように、全てのプロセッサＰＥ１，ＰＥ２，…，ＰＥｎのレジスタファイルＲＦは、各々のレジスタファイルＲＦから出力されたデータを一方向にシフトするリングバスによってリング状に接続されている。本実施形態では、クロックサイクル毎に、リングバス上で、図１中左側のプロセッサから右側のプロセッサにデータがシフトされる。また、右端のプロセッサから出力されるデータは左端のプロセッサに入力される。
【００１９】
プロセッサＰＥ１では、プログラムカウンタレジスタＰＣから出力されるアドレス信号で指定されるグローバルメモリＧＭのアドレスに記憶されているスレッドの命令が命令キャッシュＩ／Ｃに入力される。命令キャッシュＩ／Ｃは、命令を一時的に保持する高速ローカルメモリである。命令キャッシュＩ／Ｃに保持された命令はレジスタファイルＲＦに入力される。また、命令が入力される毎に、レジスタファイルＲＦの各々のレジスタに後述するフレームデータが保持される。
【００２０】
実行ユニットＥ／Ｕは、レジスタファイルＲＦに入力された命令に対応する処理を行い、その処理結果を対応するフレームデータ内に格納するか、データキャッシュＤ／Ｃに格納する。データキャッシュＤ／Ｃは、各種のデータを一時的に保持する高速ローカルメモリである。フレームデータ内に保持された処理結果は、アドレス信号によって指定されるグローバルメモリＧＭのアドレスに書き込まれる（ライトバック）か、リングバス上に出力され、他のプロセッサに直接入力される。
【００２１】
次に、レジスタファイルＲＦについて説明する。
【００２２】
図３に示すように、本実施形態のレジスタファイルＲＦは、３２ビット幅の６４個のレジスタ０〜６３を含むサーキュラバッファ（循環型バッファ）によって構成されている。
【００２３】
前述のように、命令キャッシュＩ／ＣからレジスタファイルＲＦに命令が入力される毎に、レジスタファイルＲＦの各々のレジスタにはフレームデータが書き込まれる。この時、１番目のフレームデータはレジスタ０に書き込まれる。また、２番目のフレームデータは、レジスタ０に書き込まれた１番目のフレームデータがレジスタ１にシフトされるのと同時に、レジスタ０に書き込まれる。
【００２４】
以下同様にして、フレームデータは、レジスタ０〜６２に書き込まれたフレームデータが１つ上位の番号を持つレジスタ１〜６３に各々シフトされるのと同時にレジスタ０に書き込まれる。サーキュラバッファに最大６４個のフレームデータが書き込まれた後は、フレームデータが書き込まれる毎に、レジスタ６３に書き込まれたフレームデータがシフトされてサーキュラバッファから順次出力され、データキャッシュＤ／Ｃに保持される。
【００２５】
一方、フレームデータが読み出されると、フレームデータが読み出されたレジスタよりも上位の番号を持つ全てのレジスタに書き込まれたフレームデータが１つ下位の番号を持つレジスタに各々シフトされる。この時、レジスタ６３からシフトして出力されてデータキャッシュＤ／Ｃ内に保持されたフレームデータがある場合、最後に保持されたフレームデータから順に、データキャッシュＤ／Ｃからレジスタ６３にシフトして入力される。
【００２６】
上記のように、レジスタファイルＲＦとしてサーキュラバッファを用いることによって、その実質的なレジスタ数を増やすことができる。例えば、レジスタ数を増やすために、複数のレジスタファイルを設けると、回路規模が大きく、リード／ライトポートが多くなって、その制御も複雑になるが、既存のサーキュラバッファを用いることによって、非常に簡単な回路で実質的なレジスタ数を簡単に増やすことができる。
【００２７】
次に、前述のフレームデータについて説明する。
【００２８】
図４に示すように、グローバルメモリＧＭには、マルチスレッド化されたプログラムの各々のスレッド０，１，…，ｎが保持されている。前述の通り、スレッドの命令がグローバルメモリＧＭから命令キャッシュＩ／Ｃに入力され、命令キャッシュＩ／Ｃに保持された命令がレジスタファイルＲＦに入力されると、レジスタファイルＲＦには、スレッドに対応するフレームデータが書き込まれる。
【００２９】
すなわち、各々のフレームデータは、自分自身のプロセッサで処理される各々のスレッドに対応するもので、複数のプロセッサで並列処理されるスレッド間の依存データ、依存データの出力元情報および入力先情報を含む。
【００３０】
ここで、出力元情報は、依存データを作成するプロセッサの識別情報であり、入力先情報は、依存データを必要とするプロセッサの識別情報である。各々のプロセッサＰＥ１，ＰＥ２，…，ＰＥｎは固有の識別情報を持っている。従って、各々のプロセッサＰＥ１，ＰＥ２，…，ＰＥｎは、入力先情報と自分自身の識別情報とを比べることによって、依存データが、自分自身に入力されるべきものなのか否かを判断することができる。
【００３１】
出力元情報および入力先情報は、例えばコンパイラ等によってプログラムを作成する時に自動生成され、命令キャッシュＩ／ＣからレジスタファイルＲＦに命令が入力される時にフレームデータ内に設定される。また、依存データは、実行ユニットＥ／Ｕによって、レジスタファイルＲＦに入力された命令に対応する処理が行われた結果作成され、その命令に対応するフレームデータ内に書き込まれる。
【００３２】
次に、リングバスについて説明する。
【００３３】
図５に示すように、各々のプロセッサＰＥ１，ＰＥ２，…，ＰＥｎは、リングバスの動作を制御するリングバス制御回路１２を備えている。リングバス制御回路１２は、識別情報比較回路１４と、制御信号生成回路１６と、シフト制御回路１８とによって構成されている。
【００３４】
識別情報比較回路１４は、前段のプロセッサＰＥｎ−１からシフトして入力されてくる入力先情報と自分自身のプロセッサの識別情報とを比較する。両者が一致する場合、識別情報比較回路１４からは、前段のプロセッサＰＥｎ−１からシフトして入力されてくる依存データを対応するフレームデータ内に格納する指示信号をレジスタファイルＲＦに与えるとともに、次に述べるリングシフトレシーブフラグＲＳＲＦを生成する指示信号を制御信号生成回路１６に与える。
【００３５】
制御信号生成回路１６は、リングシフトイネーブルフラグＲＳＥＦと、上記リングシフトレシーブフラグＲＳＲＦと、ノーオペレーション信号ＮＯＰとを生成する。これらのフラグおよび信号はシフト制御回路１８に入力される。
【００３６】
リングシフトイネーブルフラグＲＳＥＦは、依存データが、あるプロセッサからリングバス上に出力されたことを他のプロセッサに通知するための信号であり、依存データをリングバス上に出力するプロセッサから出力される。一方、リングシフトレシーブフラグＲＳＲＦは、依存データを受け取ったことを表す信号であり、依存データを受け取ったプロセッサから出力される。
【００３７】
ノーオペレーション信号ＮＯＰは、例えばコンパイラのフェイル、分岐命令の発生などのように、それ以降の処理が無効となる状況が発生した場合に各々のプロセッサから出力される。あるプロセッサからノーオペレーション信号ＮＯＰが出力されると、このプロセッサから依存データが出力されるのを待機していた他のプロセッサは、待機するのを中止したり、さらに長時間待機したりというように、その処理を変更することができる。
【００３８】
シフト制御回路１８は、クロックサイクル毎に、前段のプロセッサＰＥｎ−１からシフトして入力されてくる依存データを受け取って保持するとともに、１つ前のクロックで受け取った依存データをシフトして後段のプロセッサＰＥｎ＋１に出力する。また、シフト制御回路１８は、制御信号生成回路１６から入力されるリングシフトイネーブルフラグＲＳＥＦ、リングシフトレシーブフラグＲＳＲＦ、ノーオペレーション信号ＮＯＰを、必要に応じてリングバス上に出力する。
【００３９】
入力先情報とともに依存データがレジスタファイルＲＦからシフト制御回路１８に入力され、リングバス制御回路１２によって、クロックサイクル毎に、リングバス上で順次後段のプロセッサにシフトされる。依存データがリングバス上に出力される時同時に、依存データを出力したプロセッサからリングシフトイネーブルフラグＲＳＥＦがリングバス上に出力される。リングシフトイネーブルフラグＲＳＥＦによって、他のプロセッサは依存データがリングバス上に出力されたことを認識する。
【００４０】
一方、前段のプロセッサＰＥｎ−１から入力されてきた入力先情報はレジスタファイルＲＦおよび識別情報比較回路１４に入力される。入力先情報が自分自身のプロセッサの識別情報と一致する場合、リングバス制御回路１２は、この入力先情報に対応する依存データを対応するフレームデータ内に格納し、リングシフトレシーブフラグＲＳＲＦをリングバス上に出力する。リングシフトレシーブフラグＲＳＲＦによって、他のプロセッサは、依存データが自分以外のプロセッサで受け取られたことを認識する。
【００４１】
また、サーキュラバッファは、フレームデータに含まれる出力元情報と入力先情報が一致しているか、異なっているかを検出する機能を備えている。
【００４２】
このサーキュラバッファの機能によって、出力元情報と入力先情報が一致していることが検出されると、依存データはリングバス上に出力されない。この場合、依存データは、同じプロセッサで処理される別のスレッドで使用される。このように、同じプロセッサの別のスレッドで使用される依存データはリングバス上に出力されないので、その分、リングバスが混雑するのを軽減することができ、リングバスをより効率よく使用することができる。
【００４３】
一方、出力元情報と入力先情報が異なっていることが検出されると、依存データは、入力先情報とともにリングバス上に出力される。この場合、依存データは、他のプロセッサで処理される別のスレッドで使用される。リングバスを使用することによって、依存データを一旦グローバルメモリＧＭにストアし、ロードすることなく、プロセッサ間で高速に依存データの受け渡しを行うことができる。また、リングバスの構造や制御の複雑さは、プロセッサ数Ｎに比例するので、クロスバーと比べて、その構造や制御が簡単であるという利点がある。
【００４４】
なお、本発明は、上記実施形態に限定されない。例えば、プロセッサの個数は２個以上であればよく、その上限はない。また、全てのプロセッサが同一構成のものである必要はなく、レジスタファイルＲＦがサーキュラバッファで構成され、リングバス制御回路１２を備えているものであればよい。また、レジスタファイルＲＦに含まれるレジスタ数や、レジスタのビット幅なども何ら制限はない。
【００４５】
また、リングバスは、上記実施形態では特に明記していないが、シリアルバスであっても、パラレルバスであってもよい。また、パラレルバスの場合、一度に１つの依存データを出力可能としてもよいし、複数の依存データを同時に出力可能としてもよい。
【００４６】
本発明は、基本的に以上のようなものである。
以上、本発明のマルチプロセッサシステムについて詳細に説明したが、本発明は上記実施形態に限定されず、本発明の主旨を逸脱しない範囲において、種々の改良や変更をしてもよいのはもちろんである。
【図面の簡単な説明】
【００４７】
【図１】本発明のマルチプロセッサシステムの構成を表す一実施形態の概略図である。
【図２】プロセッサ内部の構成を表す概略図である。
【図３】レジスタファイルの構成を表す概略図である。
【図４】スレッドとフレームデータとの関係を表す概念図である。
【図５】リングバス制御回路の構成を表す概略図である。
【符号の説明】
【００４８】
１０  マルチプロセッサシステム
ＰＥ  プロセッサ
ＧＭ  グローバルメモリ
ＰＣ  プログラムカウンタレジスタ
Ｉ／Ｃ  命令キャッシュ
ＲＦ  レジスタファイル
Ｄ／Ｃ  データキャッシュ
Ｅ／Ｕ  演算ユニット
１２  リングバス制御回路
１４  識別情報比較回路
１６  制御信号生成回路
１８  シフト制御回路
【図１】
2006331281.tif 000003
【図２】
2006331281.tif 000004
【図３】
2006331281.tif 000005
【図４】
2006331281.tif 000006
【図５】
2006331281.tif 000007