(57)【要約】【課題】高効率なバリア同期処理を実現可能なマルチプロセッサシステムを提供する。【解決手段】各プロセッサＣＰＵ＃０〜＃７内に、バリアライトレジスタＢＡＲＷとバリアリードレジスタＢＡＲＲを設け、専用の配線ブロックＷＢＬＫ３を用いて各ＢＡＲＷを各ＢＡＲＲに配線する。例えば、ＣＰＵ＃０の１ビットのＢＡＲＷは、ＷＢＬＫ３を介してＣＰＵ＃０〜＃７に含まれる８ビットの各ＢＡＲＲの１ビット目に接続され、ＣＰＵ＃１の１ビットのＢＡＲＷは、ＷＢＬＫ３を介してＣＰＵ＃０〜＃７に含まれる８ビットの各ＢＡＲＲの２ビット目に接続される。例えば、ＣＰＵ＃０は、自身のＢＡＲＷに情報を書き込むことでＣＰＵ＃１〜＃７に同期待ちを通知し、自身のＢＡＲＲを読むことでＣＰＵ＃１〜＃７が同期待ちか否かを認識する。したがって、バリア同期処理に伴い、特殊な専用命令は不要であり、また高速に処理を行うことができる。【選択図】図３
2013137833.tif 000002
【特許請求の範囲】
【請求項１】
それぞれにバリアライトレジスタ及びバリアリードレジスタとを備える、第１からＮ（Ｎ≧２）のプロセッサと、
前記バリアライトレジスタから出力された信号を前記バリアリードレジスタへ入力する配線ブロックとを有し、
前記第１からＮのプロセッサの中のいずれかのプロセッサは、バリア同期を行う際に、自身に備えられたバリアライトレジスタにレジスタアクセス命令又はメモリアクセス命令を用いて第１情報を書きこみ、
前記第１情報は、前記配線ブロックを介して、前記第１からＮのプロセッサに備えられたバリアリードレジスタの所定の個所に書き込まれ、
前記第１からＮのプロセッサは、自身に備えられたバリアリードレジスタをレジスタアクセス命令又はメモリアクセス命令を用いて読み出すことで前記第１情報を検出することを特徴とするマルチプロセッサシステム。
【請求項２】
請求項１記載のマルチプロセッサシステムにおいて、
前記バリアライトレジスタは、１ビットレジスタであることを特徴とするマルチプロセッサシステム。
【請求項３】
請求項２記載のマルチプロセッサシステムにおいて、
前記バリアリードレジスタは、Ｎビットレジスタであり、
前記配線ブロックは、前記第１からＮのプロセッサに備えられたバリアライトレジスタのいずれかを前記第１からＮのプロセッサに備えられた各々のバリアリードレジスタが備えるＮビット中の特定の１ビットにブロードキャスト配線することを特徴とするマルチプロセッサシステム。
【請求項４】
請求項２記載のマルチプロセッサシステムにおいて、
前記第１のプロセッサに備えられるバリアリードレジスタは、（Ｎ−１）ビット以上のレジスタであり、
前記第２からＮのプロセッサに含まれるバリアリードレジスタは、１ビットレジスタであり、
前記配線ブロックは、前記第２からＮのプロセッサに備えられたバリアライトレジスタを前記第１のプロセッサに備えられたバリアリードレジスタの前記（Ｎ−１）ビットに１対１で配線し、前記第１のプロセッサに含まれるバリアライトレジスタを前記２からＮのプロセッサに備えられたバリアリードレジスタにブロードキャスト配線することを特徴とするマルチプロセッサシステム。
【請求項５】
請求項１記載のマルチプロセッサシステムにおいて、さらに、
前記１からＮのプロセッサに共通に接続されたシステムバスと、
前記システムバスに接続され、前記第１からＮのプロセッサで共通にアクセスされるメモリとを有することを特徴とするマルチプロセッサシステム。
【請求項６】
請求項１記載のマルチプロセッサシステムにおいて、
前記１からＮのプロセッサに備えられたバリアライトレジスタおよび前記第１からＮのプロセッサに備えられたバリアリードレジスタのそれぞれは、アドレスマップドレジスタであることを特徴とするマルチプロセッサシステム。
【請求項７】
請求項１記載のマルチプロセッサシステムにおいて、
前記第１からＮのプロセッサは、複数のクラスタに分割され、
前記配線ブロックは、前記複数のクラスタにそれぞれ対応して複数設けられ、
前記複数の配線ブロックのそれぞれは、自身のクラスタに含まれるバリアライトレジスタを自身のクラスタに含まれるバリアリードレジスタに配線し、前記自身のクラスタに含まれるバリアライトレジスタからの配線を自身以外のクラスタに延伸し、前記自身以外のクラスタから延伸されてきた前記自身以外のクラスタに含まれるバリアライトレジスタからの配線を前記自身のクラスタに含まれるバリアリードレジスタに配線することを特徴とするマルチプロセッサシステム。
【請求項８】
それぞれにＭセットのバリアライトレジスタとＭセットのバリアリードレジスタとを備える第１からＮ（Ｎ≧２）のプロセッサと、
前記（Ｍ×Ｎ）個のバリアライトレジスタから出力された信号を前記（Ｍ×Ｎ）個のバリアリードレジスタへ入力する配線ブロックとを有し、
前記第１からＮのプロセッサの中のいずれかのプロセッサは、バリア同期を行う際に、自身に備えられた第Ｋ（Ｋ≦Ｍ）セット目のバリアライトレジスタにレジスタアクセス命令又はメモリアクセス命令を用いて第１情報を書きこみ、
前記第１情報は、前記配線ブロックを介して、前記第１からＮのプロセッサに備えられた第Ｋセット目のバリアリードレジスタの所定の個所に書き込まれ、
前記第１からＮのプロセッサは、自身に備えられた前記第Ｋセット目のバリアリードレジスタをレジスタアクセス命令又はメモリアクセス命令を用いて読み出すことで前記第１情報を検出することを特徴とするマルチプロセッサシステム。
【請求項９】
請求項８記載のマルチプロセッサシステムにおいて、
前記第１からＮのプロセッサに備えられたＭセットのバリアライトレジスタのそれぞれは、１ビットレジスタであることを特徴とするマルチプロセッサシステム。
【請求項１０】
請求項８記載のマルチプロセッサシステムにおいて、さらに、
前記Ｎ個のプロセッサに共通に接続されたシステムバスと、
前記システムバスに接続され、前記Ｎ個のプロセッサで共通にアクセスされるメモリとを有することを特徴とするマルチプロセッサシステム。
【請求項１１】
請求項８記載のマルチプロセッサシステムにおいて、
前記第１からＮのプロセッサに備えられたＭセットのバリアライトレジスタおよび前記第１からＮのプロセッサに備えられたＭセットのバリアリードレジスタのそれぞれは、アドレスマップドレジスタであることを特徴とするマルチプロセッサシステム。
【請求項１２】
請求項８記載のマルチプロセッサシステムにおいて、
前記第１からＮのプロセッサは、複数のクラスタに分割され、
前記配線ブロックは、前記複数のクラスタにそれぞれ対応して複数設けられ、
前記複数の配線ブロックのそれぞれは、前記第１からＮのプロセッサのうち自身のクラスタに含まれるプロセッサに備えられたバリアライトレジスタを、前記第１からＮのプロセッサのうち自身のクラスタに含まれるプロセッサに備えられたバリアリードレジスタに配線し、前記自身のクラスタに含まれるプロセッサに備えられたバリアライトレジスタからの配線を自身以外のクラスタに延伸し、前記自身以外のクラスタから延伸されてきた前記自身以外のクラスタに含まれるプロセッサに備えられたバリアライトレジスタからの配線を前記自身のクラスタに含まれるプロセッサに備えられたバリアリードレジスタに配線することを特徴とするマルチプロセッサシステム。
【請求項１３】
それぞれにＭセットのバリアライトレジスタとＭセットのバリアリードレジスタとを備える第１からＮ（Ｎ≧２）のプロセッサと、
第１手段とを備え、
前記第１からＮのプロセッサの中のいずれかのプロセッサは、バリア同期を行う際に、自身に備えられた第Ｋ（Ｋ≦Ｍ）セット目のバリアライトレジスタにレジスタアクセス命令又はメモリアクセス命令を用いて第１情報を書き込み、
前記第１情報は、前記第１手段を介して、前記第１からＮのプロセッサに備えられた第Ｋセット目のバリアリードレジスタの所定の個所に書き込まれ、
前記第１からＮのプロセッサは、自身に備えられた前記第Ｋセット目のバリアリードレジスタをレジスタアクセス命令又はメモリアクセス命令を用いて読み出すことで前記第１情報を検出することを特徴とするマルチプロセッサシステム。
【請求項１４】
請求項１３記載のマルチプロセッサシステムにおいて、
前記第１手段は、前記第１からＮのプロセッサに備えられたＭセットのバリアライトレジスタを前記第１からＮのプロセッサに備えられたＭセットのバリアリードレジスタに直接的に配線することで実現されることを特徴とするマルチプロセッサシステム。
【請求項１５】
請求項１３記載のマルチプロセッサシステムにおいて、
前記第１からＮのプロセッサに備えられたＭセットのバリアライトレジスタのそれぞれは、１ビットレジスタであることを特徴とするマルチプロセッサシステム。
【請求項１６】
請求項１３記載のマルチプロセッサシステムにおいて、
前記第１からＮのプロセッサに備えられたＭセットのバリアライトレジスタのそれぞれは、複数ビットレジスタであることを特徴とするマルチプロセッサシステム。
【請求項１７】
それぞれにバリアライトレジスタとバリアリードレジスタとを備える、第１からＮ（Ｎ≧２）のプロセッサと、
第１手段とを備え、
前記第１からＮのプロセッサの中のいずれかのプロセッサは、バリア同期を行う際に、自身に備えられたバリアライトレジスタにレジスタアクセス命令又はメモリアクセス命令を用いて第１情報を書き込み、
前記第１情報は、前記第１手段を介して、前記第１からＮのプロセッサに備えられたバリアリードレジスタの所定の個所に書き込まれ、
前記バリアライトレジスタは、複数ビットレジスタであり、
前記第１情報には、前記複数ビットレジスタのビット数に応じて複数種類が設定でき、
前記第１からＮのプロセッサは、自身に備えられた前記バリアリードレジスタをレジスタアクセス命令又はメモリアクセス命令を用いて読み出すことで前記第１情報を検出することを特徴とするマルチプロセッサシステム。
【請求項１８】
請求項１７記載のマルチプロセッサシステムにおいて、
前記第１手段は、前記第１からＮのプロセッサに備えられたバリアライトレジスタを前記第１からＮのプロセッサに備えられたバリアリードレジスタに直接的に配線することで実現されることを特徴とするマルチプロセッサシステム。
【請求項１９】
それぞれにバリアライトレジスタとバリアリードレジスタとを備える第１からＮ（Ｎ≧２）のプロセッサと、
前記第１からＮのプロセッサの中のいずれかのプロセッサがバリア同期に伴い自身に備えられたバリアライトレジスタにレジスタアクセス命令又はメモリアクセス命令を用いて第１情報を書き込んだ際に、前記第１情報を前記第１からＮのプロセッサに備えられたバリアリードレジスタに伝送する第１手段とを用い、
前記第１からＮのプロセッサが、自身に備えられたバリアリードレジスタをレジスタアクセス命令又はメモリアクセス命令を用いて読み、前記第１情報の第１の値を同期ポイントとして自身以外のプロセッサの同期待ち状態を判別することで前記第１からＮのプロセッサのバリア同期処理を行う第１処理と、
前記第１処理の後に、前記第１からＮのプロセッサが、自身のバリアライトレジスタの値を反転またはインクリメントすることで自身のバリアライトレジスタにレジスタアクセス命令又はメモリアクセス命令を用いて前記第１情報の第２の値を設定する第２処理と、
前記第２処理の後に、前記第１からＮのプロセッサが、自身に備えられたバリアリードレジスタをレジスタアクセス命令又はメモリアクセス命令を用いて読み、前記第１情報の第２の値を同期ポイントとして自身以外のプロセッサの同期待ち状態を判別することで前記第１からＮのプロセッサのバリア同期処理を行う第３処理とを実行することを特徴とするマルチプロセッサシステムの同期方法。
【請求項２０】
それぞれにバリアライトレジスタとバリアリードレジスタとを備える、第１からＮ（Ｎ≧２）のプロセッサと、
前記第１からＮのプロセッサの中のいずれかのプロセッサがバリア同期に伴い自身に備えられたバリアライトレジスタにレジスタアクセス命令又はメモリアクセス命令を用いて第１情報を書き込んだ際に、前記第１情報を前記第１からＮのプロセッサに備えられたバリアリードレジスタに伝送する第１手段とを用い、
前記第２からＮのプロセッサ全てが自身のバリアライトレジスタにレジスタアクセス命令又はメモリアクセス命令を用いて前記第１情報を書き込んだことを、前記第１のプロセッサが、自身のバリアリードレジスタをレジスタアクセス命令又はメモリアクセス命令を用いて読み出すことで検出する第１処理と、
前記第１処理の後に、前記第１のプロセッサが自身のバリアライトレジスタにレジスタアクセス命令又はメモリアクセス命令を用いて前記第１情報を書き込む第２処理と、
前記第２処理と並行して、前記第１のプロセッサが自身のバリアライトレジスタに前記第１情報を書き込んだことを、前記第２からＮのプロセッサ全てが、自身のバリアリードレジスタをレジスタアクセス命令又はメモリアクセス命令を用いて読み出すことで検出する第３処理とを実行することを特徴とするマルチプロセッサシステムの同期方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサシステムおよびその同期方法に関し、特に、バリア同期処理をハードウェアで行うマルチプロセッサシステムおよびその同期方法に適用して有益な技術に関するものである。
【背景技術】
【０００２】
例えば、特許文献１には、放送機能付きのシステムバスにバスインタフェースを介して接続されたＮ個のプロセッサからなるマルチプロセッサシステムにおいて、各プロセッサ間の同期を行う方式が記載されている。具体的には、各プロセッサは、Ｎ個のプロセッサに各ビットが対応するＮビットの同期用レジスタを備える。各プロセッサは、自身のフェーズが完了した際に同期用レジスタの対応ビットに‘１’を設定すると共に、システムバスを介して他のプロセッサにも通知を行い、他のプロセッサは、この通知を受けて同期用レジスタの更新を行う。これによって、各プロセッサは、同期用レジスタの全ビットの‘１’を認識することで同期処理を行うことができる。
【０００３】
また、特許文献２には、それぞれが複数のプロセッサを含む複数のクラスタ間にクラスタ間通信レジスタを設けてクラスタ間のバリア同期を行う方式が記載されている。クラスタ間通信レジスタには、クラスタ数が設定され、各クラスタ内に存在する代表プロセッサがこのクラスタ数を１減算していくことで、０になった時点でバリア同期処理を完結することができる。
【０００４】
また、特許文献３および特許文献４には、マルチプロセッサシステムの共有メモリ上に各プロセッサ対応の同期フラグ領域を設けることでソフトウェア同期を行う方式が記載されている。さらに、特許文献５には、階層構造のキャッシュを備えたマルチプロセッサシステムにおいて、その階層構造のキャッシュを利用して同期を行う方式が記載されている。具体的には、例えば、プロセッサモジュール内で、ＣＰＵ０とＣＰＵ１にそれぞれ一次キャッシュが設けられ、この２つの一次キャッシュの上位に共通の二次キャッシュが設けられる場合、ＣＰＵ０で実行する複数スレッドの同期を一次キャッシュ上に確保したフラグ変数で行い、ＣＰＵ０とＣＰＵ１の同期を二次キャッシュ上に確保したフラグ変数で行う。
【０００５】
また、非特許文献１には、Ｐ個のプロセッサに対して共通に設けられる１個のＰビットレジスタと、このＰビットレジスタの値が全てゼロとなった場合を検出し、その際の検出信号をＰ個のプロセッサに向けて送信する検出回路等からなる構成が記載されている。Ｐ個のプロセッサで並列処理を実行した後にバリア同期を行う場合、各プロセッサは、自身の処理が終了した段階でＰビットレジスタの対応ビットにゼロを書き込む。全てのプロセッサの処理が完了した際には、全てのプロセッサに向けて検出信号が送信されるため、これによってバリア同期が可能となる。なお、非特許文献１には、多重ループを並列処理で行うため、（Ｐ−１）組のＰビットレジスタからなるレジスタアレイを設ける構成も示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平２−１０５９６１号公報
【特許文献２】特開平１０−９１５９１号公報
【特許文献３】特開２０００−３０５９１９号公報
【特許文献４】特開２００５−７１１０９号公報
【特許文献５】特開２００６−２５９８２１号公報
【非特許文献】
【０００７】
【非特許文献１】C.J.Beckmann, C.D.Polychronopoulos、「Fast barrier synchronization hardware」、Supercomputing '90. Proceedings of Publication、１９９０年１１月、ｐ．１８０−１８９
【発明の概要】
【発明が解決しようとする課題】
【０００８】
近年、半導体チップの微細化、高速化に伴うリーク電流や消費電力等の問題により、動作周波数の向上に代わる性能向上策としてマルチプロセッサ（又はマルチコア）技術が用いられてきている。マルチプロセッサシステムでは、通常、タスクやプロセス等と呼ばれる一つの処理内容をそれぞれスレッド等と呼ばれる複数の処理単位に分割し、この複数のスレッドを各プロセッサに適宜割り当てることで複数のプロセッサによる並列処理が実行される。したがって、複数のスレッド間には、例えばあるスレッドの処理結果を別のスレッドが用いて更なる処理を行うといったように依存関係が生じ、これに伴い、互いに依存した処理を行う複数のプロセッサが同期ポイントで待ち合わせを行うという所謂バリア同期が必要となる。
【０００９】
このようなバリア同期は、ハードウェアによってもソフトウェアによっても実現できる。例えば、前述した特許文献３、特許文献４および特許文献５には、ソフトウェアによるバリア同期の実現方法が記載されている。ソフトウェアによる方法は、要するに、各プロセッサで共有されるメモリ上にフラグ変数を設定するというものである。各プロセッサは、自身の処理が完了した際にこのフラグ変数を更新ならびに参照することで、自身以外のプロセッサの処理が終了しているかを認識することができる。
【００１０】
しかしながら、ソフトウェアによる方法では、各プロセッサが共有メモリ上の共通フラグ変数にアクセスすることになるため、バリア同期を完結するのに時間を要してしまう。すなわち、単純なメモリアクセス時間に加えて、共有メモリへのアクセス権を得るまでの調停時間も多く必要とされる。例えば、特許文献５に示されるように、特定したキャッシュメモリ上にフラグ変数を確保することである程度の高速化は図れるが、例えば、キャッシュメモリの特定手段が必要であったり、ライトバックが発生すると速度が低下することなどから特殊なキャッシュメモリの制御などが必要になると考えられる。
【００１１】
また、例えば、前述した特許文献１、特許文献２および非特許文献１には、ハードウェアによるバリア同期の実現方法が記載されている。特許文献２や非特許文献１の方法は、要するに、複数のプロセッサに対して共通のフラグレジスタを設け、このフラグレジスタの書き込みや参照によってバリア同期を行うものである。この場合、このフラグレジスタへのアクセスを排他的に制御する必要があるため、この処理に時間を要する恐れがある。一方、特許文献１の方法は、前述したフラグレジスタを各プロセッサが備え、それぞれのフラグレジスタのコヒーレンシ（一貫性）を共通のシステムバスを介して保つようなものとなっている。しかしながら、システムバスを用いると、バスのアクセス権を確保するための調停時間が必要となるため、高速なバリア同期処理が困難となる。
【００１２】
本発明は、このようなことを鑑みてなされたものであり、その目的の一つは、高効率なバリア同期処理を実現可能なマルチプロセッサシステムおよびその同期方法を提供することにある。本発明の前記ならびにその他の目的と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１３】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば、次の通りである。
【００１４】
本発明の一実施の形態によるマルチプロセッサシステムは、Ｎ（Ｎ≧２）個のプロセッサと、このＮ個のプロセッサ内にそれぞれ設けられたＮ個のバリアライトレジスタ（第１レジスタ）およびＮ個のバリアリードレジスタ（第２レジスタ）と、第１手段とを有するものとなっている。第１手段は、Ｎ個のプロセッサ内のいずれかのプロセッサがバリア同期に伴い自身に設けられたバリアライトレジスタに第１情報を書き込んだ際に、この第１情報を他のプロセッサに設けられたバリアリードレジスタに伝送するものとなっている。この第１手段は、例えば、Ｎ個のバリアライトレジスタをＮ個のバリアリードレジスタに直接的に配線する配線ブロックによって実現される。
【００１５】
このような構成を用いると、あるプロセッサが自身の同期待ちを意味する第１情報を自身のバリアライトレジスタに書き込むことで、この第１情報を即座に他のプロセッサのバリアリードレジスタに反映させることができる。したがって、他のプロセッサは、自身のバリアリードレジスタを読むことで、自身以外のプロセッサが同期待ちか否かを即座に知ることができるため、高速なバリア同期処理が実現可能となる。この際に、バリアライトレジスタからバリアリードレジスタへの情報伝送をシステムバスを介さずに専用の配線ブロックを用いて行うことで、高速化が図れる。
【００１６】
また、各プロセッサは、自身の同期待ちを他のプロセッサに通知する際には自身のバリアライトレジスタに第１情報を書き込み、他のプロセッサの同期待ちの状況を知る際には、自身のバリアリードレジスタを読めばよいため、ＣＰＵに特殊な命令セットを追加する必要がなく、低コストでバリア同期処理が実現可能となる。さらに、自身以外のプロセッサがバリアライトレジスタに第１情報を書き込んだ際に、この第１情報が、自身のプロセッサ内のバリアリードレジスタに向けて、割り込み等の間接的形態ではなく直接的に反映される構成となっているため、自身のプロセッサは、この反映に伴い自身が現在行っている処理を阻害されることはない。以上のようなことから、高効率なバリア同期処理が実現可能となる。
【００１７】
また、本発明の一実施の形態のマルチプロセッサシステムは、前述したようなバリアライトレジスタおよびバリアリードレジスタを、各プロセッサ内に複数セット備えたものとなっている。これによって、例えば、複数階層のバリア同期処理を含んだ処理内容を実行する際に、各階層毎に１個のセットを割り当てることができ、このようなバリア同期処理を容易に実現可能となる。
【００１８】
さらに、本発明の一実施の形態のマルチプロセッサシステムは、前述したようなバリアライトレジスタが複数ビットから構成されるものとなっている。これによって、同期ポイントをバージョンナンバーとして複数種類設定でき、高度または複雑なバリア同期処理に柔軟に対応可能となる。例えば、このバリアライトレジスタの複数ビットの各ビットに前述したような複数階層の各階層を割り当てることができる。また、前述したように、バリアライトレジスタおよびバリアリードレジスタを複数セット設け、加えて、前述したようなバージョンナンバーも併用すれば、より高度または複雑なバリア同期処理にも柔軟に対応可能となる。
【発明の効果】
【００１９】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば、次の通りである。
【００２０】
本発明の一実施の形態によるマルチプロセッサシステムを用いることで、高効率なバリア同期処理を実現可能となる。
【図面の簡単な説明】
【００２１】
【図１】本発明の実施の形態１によるマルチプロセッサシステムにおいて、その全体構成の一例を示すブロック図である。
【図２】本発明の実施の形態１によるマルチプロセッサシステムにおいて、その主要部の構成例を示す概略図である。
【図３】本発明の実施の形態１によるマルチプロセッサシステムにおいて、その主要部の他の構成例を示す概略図である。
【図４】図２および図３のマルチプロセッサシステムにおいて、その動作の一例を示す説明図である。
【図５】図４におけるバリア同期処理の詳細な処理内容の一例を示す説明図である。
【図６】図２および図３のマルチプロセッサシステムにおいて、その動作の他の一例を示す説明図である。
【図７】本発明の実施の形態２によるマルチプロセッサシステムにおいて、その主要部の構成例を示す概略図である。
【図８】本発明の実施の形態３によるマルチプロセッサシステムにおいて、その主要部の構成例を示す概略図である。
【図９】図８の構成例を用いた場合のバリア同期処理の動作例を示す説明図である。
【図１０】図９におけるバリア同期処理のより詳細な処理内容の一例を示す説明図である。
【図１１】本発明の実施の形態４によるマルチプロセッサシステムにおいて、その主要部の構成例を示す概略図である。
【図１２】図１１のマルチプロセッサシステムにおいて、その動作の一例を示す説明図である。
【図１３】図１１のマルチプロセッサシステムにおいて、その動作の他の一例を示す説明図である。
【図１４】図１１のマルチプロセッサシステムにおいて、その動作の更に他の一例を示す説明図である。
【図１５】本発明の実施の形態４によるマルチプロセッサシステムにおいて、図１２を変形した動作例を示す説明図である。
【図１６】本発明の実施の形態５によるマルチプロセッサシステムにおいて、その主要部の構成例を示す概略図である。
【図１７】図１６のマルチプロセッサシステムにおいて、その動作の一例を示す説明図である。
【図１８】図１６のマルチプロセッサシステムにおいて、その動作の他の一例を示す説明図である。
【図１９】図１８の動作例において、そのバリア同期処理で用いる詳細なソースコードの一例を示す説明図である。
【図２０】本発明の実施の形態６によるマルチプロセッサシステムにおいて、図１６の構成例を用いた他の動作の一例を示す説明図である。
【図２１】本発明の実施の形態７によるマルチプロセッサシステムにおいて、その主要部の構成例を示す概略図である。
【図２２】図２１のマルチプロセッサシステムにおいて、その使用例を示す説明図である。
【発明を実施するための形態】
【００２２】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。実施の形態を説明するための全図において、同一の部材には原則として同一の符号を付し、その繰り返しの説明は省略する。また、以下の実施の形態においては便宜上その必要があるときは、複数のセクションまたは実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部または全部の変形例、詳細、補足説明等の関係にある。
【００２３】
また、以下の実施の形態において、要素の数等（個数、数値、量、範囲等を含む）に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でも良い。さらに、以下の実施の形態において、その構成要素（要素ステップ等も含む）は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではないことは言うまでもない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数値および範囲についても同様である。
【００２４】
（実施の形態１）
図１は、本発明の実施の形態１によるマルチプロセッサシステムにおいて、その全体構成の一例を示すブロック図である。図１に示すマルチプロセッサシステムは、例えば、プロセッサ等を含む半導体チップＣＰと、ＳＲＡＭ（Static Random Access Memory）等の外部メモリＭＥＭ１およびＤＤＲ２−ＳＤＲＡＭ（Double Data Rate 2-Synchronous Dynamic Random Access Memory）等の外部メモリＭＥＭ２によって構成される。半導体チップＣＰは、特に制限されないが、シリコンなどの半導体基板に公知のＣＭＯＳ製造方法によって形成されている。
【００２５】
半導体チップＣＰには、特に制限されないが、システムバスＳＨＷＹが含まれる。このＳＨＷＹには、複数（ここでは２個）のクラスタＣＬＳ０，１、メモリコントローラＬＢＳＣ，ＤＢＳＣ、共有メモリＣＳＭ、ＤＭＡ（Direct Memory Access）コントローラＤＭＡＣ０，ＤＭＡＣ１、周辺バスブリッジＨＰＢ等が接続される。ＨＰＢを介した先には、クロック生成部ＣＰＧ、汎用ＩＯインタフェース部ＧＰＩＯ、タイマ部ＴＭＵ０〜３、割り込みコントローラＩＮＴＣなどが接続される。メモリコントローラＬＢＳＣは、外部メモリ（ＳＲＡＭ）ＭＥＭ１を制御し、メモリコントローラＤＢＳＣは、外部メモリ（ＤＤＲ２−ＳＤＲＡＭ）ＭＥＭ２を制御する。なお、クラスタとは、概念的には、所謂クラスタリングによって分散された個々のシステム単位を意味し、信頼性や高速性の観点から一般的に用いられている。
【００２６】
クラスタＣＬＳ０には、スヌープバスＳＮＢ０およびそれを制御するスヌープバスコントローラＳＮＣ０が含まれる。スヌープバスＳＮＢ０には、複数（ここでは４個）のプロセッサ（ＣＰＵ：Central Processing Unit）ＣＰＵ＃０〜＃３が接続される。ＳＮＢ０およびＳＮＣ０は、各ＣＰＵ＃０〜＃３に含まれるキャッシュメモリの更新動作等を監視し、各ＣＰＵ＃０〜＃３間でキャッシュメモリのコヒーレンシを維持できるように制御する。このように、システムバスＳＨＷＹを介さずにキャッシュメモリのコヒーレンシを制御することで、システム全体の高速化が図れる。また、クラスタＣＬＳ０には、デバッグコントローラＤＢＧ０なども含まれている。
【００２７】
各ＣＰＵ＃０〜＃３のそれぞれは、ＣＰＵモジュールＣＰＵ＿ＭＤ、浮動小数点数演算部ＦＰＵ、キャッシュコントローラＣＣＮ、システムバス用インタフェースＢＩＣ、ユーザメモリＵＲＡＭ、ローカルメモリＩＬ，ＯＬ、および一次キャッシュメモリＩ＄，Ｏ＄などを含んでいる。各ＣＰＵ＃０〜＃３は、自身の一次キャッシュメモリＩ＄，Ｏ＄を最下位メモリとして所望の処理を行う。この際に、上位メモリに対するライトバック等が生じると、ＳＨＷＹを介して外部メモリＭＥＭ１，ＭＥＭ２等へのアクセスが発生する。なお、ここでは、簡略的に一次キャッシュメモリのみを示しているが、勿論、クラスタＣＬＳ０内に各ＣＰＵ＃０〜＃３で共通となる二次キャッシュメモリ等を設けてもよい。
【００２８】
クラスタＣＬＳ１は、クラスタＣＬＳ０と同様の構成となっている。すなわち、クラスタＣＬＳ１には、スヌープバスＳＮＢ１およびスヌープバスコントローラＳＮＣ１が含まれ、ＳＮＢ１には、複数（ここでは４個）のプロセッサＣＰＵ＃４〜＃７が接続される。また、クラスタＣＬＳ１には、デバッグコントローラＤＢＧ１なども含まれている。各ＣＰＵ＃４〜＃７内の構成は、クラスタＣＬＳ０の場合と同様であるため詳細な説明は省略する。なお、ここでは、４ＣＰＵ×２クラスタのマルチプロセッサ（マルチコア）システムの構成例を示したが、勿論、クラスタ内のＣＰＵ数やクラスタ数等は適宜変更可能である。
【００２９】
図２は、本発明の実施の形態１によるマルチプロセッサシステムにおいて、その主要部の構成例を示す概略図である。図２に示すマルチプロセッサシステムは、図１に示したプロセッサＣＰＵ＃０〜＃３からなるクラスタＣＬＳ０と、プロセッサＣＰＵ＃４〜＃７からなるクラスタＣＬＳ１に加えて、配線ブロックＷＢＬＫ０，ＷＢＬＫ１を備えた構成となっている。各ＣＰＵ＃０〜＃７のそれぞれは、１ビットのバリアライトレジスタＢＡＲＷ（第１レジスタ）と、ＣＰＵ数（ここでは８個）に対応するビット数（ここでは８ビット）を持つバリアリードレジスタＢＡＲＲ（第２レジスタ）を備えている。
【００３０】
配線ブロックＷＢＬＫ０は、ＣＬＳ０内のＣＰＵ＃０〜＃３に含まれる各ＢＡＲＷからの配線（４ビット分）を、ＣＰＵ＃０〜＃３に含まれる各ＢＡＲＲ内の特定の４ビット（例えばビット［０］〜［３］）にそれぞれブロードキャストで接続すると共に配線ブロックＷＢＬＫ１に向けて延伸させる。同様に、配線ブロックＷＢＬＫ１は、ＣＬＳ１内のＣＰＵ＃４〜＃７に含まれる各ＢＡＲＷからの配線（４ビット分）を、ＣＰＵ＃４〜＃７に含まれる各ＢＡＲＲ内の特定の４ビット（例えばビット［４］〜［７］）にそれぞれブロードキャストで接続すると共に配線ブロックＷＢＬＫ０に向けて延伸させる。また、ＷＢＬＫ０は、ＷＢＬＫ１から延伸されてきた配線（４ビット分）を、ＣＰＵ＃０〜＃３に含まれる各ＢＡＲＲ内の残りの４ビット（例えばビット［４］〜［７］）にそれぞれブロードキャストで接続する。同様に、ＷＢＬＫ１は、ＷＢＬＫ０から延伸されてきた配線（４ビット分）を、ＣＰＵ＃４〜＃７に含まれる各ＢＡＲＲ内の残りの４ビット（例えばビット［０］〜［３］）にそれぞれブロードキャストで接続する。
【００３１】
したがって、例えば、ＣＰＵ＃０が自身のＢＡＲＷに情報を書き込んだ場合には、この書き込んだ情報が、ＣＰＵ＃０〜＃７に含まれる各ＢＡＲＲ内の特定の１ビット（例えばビット［０］）に配線ブロックＷＢＬＫ０，ＷＢＬＫ１を介して一斉に反映される。また、例えば、ＣＰＵ＃７が自身のＢＡＲＷに情報を書き込んだ場合には、この書き込んだ情報が、ＣＰＵ＃０〜＃７に含まれる各ＢＡＲＲ内の特定の１ビット（例えばビット［７］）に配線ブロックＷＢＬＫ０，ＷＢＬＫ１を介して一斉に反映される。なお、特に限定はされないが、ＷＢＬＫ０は、図１におけるスヌープバスコントローラＳＮＣ０内に形成し、ＷＢＬＫ１は、スヌープバスコントローラＳＮＣ１内に形成することができる。
【００３２】
図３は、本発明の実施の形態１によるマルチプロセッサシステムにおいて、その主要部の他の構成例を示す概略図である。図３に示すマルチプロセッサシステムは、図２の場合と異なり、８個のＣＰＵ＃０〜＃７がクラスタＣＬＳ０，ＣＬＳ１によって階層化されずにフラット状態である場合の構成例である。図３の構成例では、図２の場合と同様に、各ＣＰＵ＃０〜＃７に含まれる１ビットのバリアライトレジスタＢＡＲＷと８ビットのバリアリードレジスタＢＡＲＲが相互に接続されている。この際の接続関係は、実質的には図２の場合と同様であるが、レイアウト概念が図２の場合とは異なる。
【００３３】
すなわち、図２の場合では、複数のクラスタにそれぞれ対応して複数の配線ブロックを設けている。そして、あるクラスタに対応した配線ブロック内では、自身のクラスタ内に含まれるＢＡＲＷとＢＡＲＲの相互接続を行い、自身のクラスタにおけるＢＡＲＷの情報をクラスタ情報として束ねて他のクラスタへ伝送すると共に、他のクラスタからのクラスタ情報を受けて、自身のクラスタのＢＡＲＲに伝送する。一方、図３の場合では、各ＣＰＵ＃０〜＃７に対応して一つの配線ブロックＷＢＬＫ３を設けている。そして、ＷＢＬＫ３では、ＣＰＵ＃０〜＃７に含まれる各ＢＡＲＷからの配線（８ビット分）が、ＣＰＵ＃０〜＃７に含まれる各ＢＡＲＲの８ビットにそれぞれ接続されている。
【００３４】
なお、図２や図３の構成例において、バリアライトレジスタＢＡＲＷやバリアリードレジスタＢＡＲＲは、例えば、ＣＰＵがレジスタアクセス命令を実行することでアクセスが可能なコントロールレジスタ等で実現したり、あるいはＣＰＵがメモリアクセス命令を実行することでアクセスが可能なメモリマップドレジスタなどで実現することができる。メモリマップドレジスタを用いた場合には、ＣＰＵの命令セットなどを追加する必要がないため、コントロールレジスタ等で実現する場合と比べてコスト面又は容易性の観点から優位となる。メモリマップドレジスタは、特に限定はされないが、例えば、図１のキャッシュコントローラＣＣＮ内に設ける。
【００３５】
図４は、図２および図３のマルチプロセッサシステムにおいて、その動作の一例を示す説明図である。マルチプロセッサシステムでは、例えば、図４に示すような処理内容を用いることで、省電力化を図ることができる。図４において、まず、全てのＣＰＵ＃０〜＃７は、高速動作が必要な所定の処理（スレッド）を高速クロック周波数で並列に実行する（Ｓ４０１）。この際に、各ＣＰＵは、自身の処理を完了後に自身以外のＣＰＵと待ち合わせを行うバリア同期処理を実行する（Ｓ４０２）。バリア同期処理が完了すると、マスタＣＰＵ（例えばＣＰＵ＃０）等が、全てのＣＰＵのクロック周波数を下げる命令を発行する（Ｓ４０３）。これを受けて、例えば、図１のクロック生成部ＣＰＧなどがクロック周波数を低下させる。
【００３６】
続いて、全てのＣＰＵ＃０〜＃７は、高速動作が不必要な所定の処理（スレッド）を低速のクロック周波数を用いて並列に実行する（Ｓ４０４）。この際に、各ＣＰＵは、自身の処理を完了後に自身以外のＣＰＵと待ち合わせを行うバリア同期処理を実行する（Ｓ４０５）。バリア同期処理が完了すると、マスタＣＰＵ（例えばＣＰＵ＃０）等が、全てのＣＰＵのクロック周波数を上げる命令を発行する（Ｓ４０６）。その後、全てのＣＰＵ＃０〜＃７は、再び、高速動作が必要な所定の処理を高速クロック周波数で並列に実行する（Ｓ４０７）。
【００３７】
図５は、図４におけるバリア同期処理の詳細な処理内容の一例を示す説明図である。図５では、簡略化のため、全ＣＰＵ数が４個（ＣＰＵ＃０〜＃３）であるものと仮定して説明を行う。まず、各ＣＰＵが実行するコード内では、所定の処理を行うコード（「ｄｏ〜ｅｎｄｄｏ」に該当）の後にバリア同期処理の為のコードが付加されている。バリア同期処理の為のコードは、ここでは、「ｉｎｖ  ｒｍ」と「ｃｈｅｃｋ  ｒ０−ｒ３＝１１１１」となっている。
【００３８】
「ｉｎｖ  ｒｍ」は、バリアライトレジスタＢＡＲＷの情報を反転させる命令を意味する。「ｒｍ」はＢＡＲＷに対応するソフトウェア上のレジスタフィールドを意味し、添字「ｍ」はＣＰＵ番号を意味する。例えば、「ｉｎｖ  ｒ０」はＣＰＵ＃０のＢＡＲＷの情報を反転させる命令、「ｉｎｖ  ｒ１」はＣＰＵ＃１のＢＡＲＷの情報を反転させる命令となる。「ｃｈｅｃｋ  ｒ０−ｒ３＝１１１１」は、バリアリードレジスタＢＡＲＲの４ビットの情報が全て「１」となるまで待機させる命令を意味する。この命令では、レジスタフィールド「ｒ０−ｒ３」がＢＡＲＲを表すことになるが、ＢＡＲＷとＢＡＲＲは相互に接続されており、ソフトウェア的には、一つのレジスタフィールドで取り扱うことができる。すなわち、例えば、「ｒ０」は、ＣＰＵ＃０のＢＡＲＷであると共に、ＣＰＵ＃０〜＃３に含まれるＢＡＲＲのビット［０］でもあり、「ｒ３」は、ＣＰＵ＃３のＢＡＲＷであると共に、ＣＰＵ＃０〜＃３に含まれるＢＡＲＲのビット［３］でもある。
【００３９】
図５の例では、まず、最初に所定の処理を完了したＣＰＵ＃０が、その後の「ｉｎｖ  ｒｍ」命令に伴い自身のＢＡＲＷ（初期値はゼロとする）を反転させて「１」にする。この情報は、前述した配線ブロックＷＢＬＫを介して全ＣＰＵのＢＡＲＲに反映される（図５の例ではビット［０］に反映）。その後、ＣＰＵ＃０は、「ｃｈｅｃｋ  ｒ０−ｒ３＝１１１１」命令を実行するが、自身のＢＡＲＲの値が「１０００」であるため待機状態となる。次いで、所定の処理を完了したＣＰＵ＃２が、その後の「ｉｎｖ  ｒｍ」命令に伴い自身のＢＡＲＷ（初期値はゼロとする）を反転させて「１」にする。この情報は、前述した配線ブロックＷＢＬＫを介して全ＣＰＵのＢＡＲＲに反映される（図５の例ではビット［２］に反映）。その後、ＣＰＵ＃２は、「ｃｈｅｃｋ  ｒ０−ｒ３＝１１１１」命令を実行するが、自身のＢＡＲＲの値が「１０１０」であるため待機状態となる。同様に、ＣＰＵ＃０も、自身のＢＡＲＲの値が「１０１０」であるため待機状態を保つ。
【００４０】
続いて、所定の処理を完了したＣＰＵ＃１が、その後の「ｉｎｖ  ｒｍ」命令に伴い自身のＢＡＲＷ（初期値はゼロとする）を反転させて「１」にする。この情報は、前述した配線ブロックＷＢＬＫを介して全ＣＰＵのＢＡＲＲに反映される（図５の例ではビット［１］に反映）。その後、ＣＰＵ＃１は、「ｃｈｅｃｋ  ｒ０−ｒ３＝１１１１」命令を実行するが、自身のＢＡＲＲの値が「１１１０」であるため待機状態となる。同様に、ＣＰＵ＃０及びＣＰＵ＃２も、自身のＢＡＲＲの値が「１１１０」であるため待機状態を保つ。
【００４１】
最後に、所定の処理を完了したＣＰＵ＃３が、その後の「ｉｎｖ  ｒｍ」命令に伴い自身のＢＡＲＷ（初期値はゼロとする）を反転させて「１」にする。この情報は、前述した配線ブロックＷＢＬＫを介して全ＣＰＵのＢＡＲＲに反映される（図５の例ではビット［３］に反映）。その後、ＣＰＵ＃３は、「ｃｈｅｃｋ  ｒ０−ｒ３＝１１１１」命令を実行し、自身のＢＡＲＲの値が「１１１１」であるため以降の処理へと進む。同様に、ＣＰＵ＃０、ＣＰＵ＃１、およびＣＰＵ＃２も、自身のＢＡＲＲの値が「１１１１」であるため以降の処理へと進む。これによってバリア同期処理が完了する。
【００４２】
図６は、図２および図３のマルチプロセッサシステムにおいて、その動作の他の一例を示す説明図である。図６において、各ＣＰＵ＃０〜＃７は、所定の処理（Ｓ６０１）→バリア同期処理（Ｓ６０２）→所定の処理（Ｓ６０３）→バリア同期処理（Ｓ６０４）→所定の処理（Ｓ６０５）→バリア同期処理（Ｓ６０６）を行っている。各ＣＰＵ＃０〜＃７におけるバリアライトレジスタＢＡＲＷおよびバリアリードレジスタＢＡＲＲの初期値を「０」とすると、前述したように「ｉｎｖ  ｒｍ」命令を用いてバリア同期処理を行うと、バリア同期処理（Ｓ６０２）ではＢＡＲＲの８ビットが全て「１」の場合が同期ポイントとなる。そして、次のバリア同期処理（Ｓ６０４）では、ＢＡＲＲの８ビットが全て「０」の場合が同期ポイントとなり、更に次のバリア同期処理（Ｓ６０６）では、ＢＡＲＲの８ビットが全て「１」の場合が同期ポイントとなる。
【００４３】
このように、「１」と「０」を反転させながら同期ポイントを設定することで、例えば、同期ポイントを「１」に固定するような場合と比べてバリア同期処理の高速化が図れる。すなわち、あるバリア同期処理を完了後にバリアライトレジスタＢＡＲＷおよびバリアリードレジスタＢＡＲＲを「０」にリセットする処理が不必要となる。
【００４４】
以上のように、本実施の形態１のマルチプロセッサシステムは、各ＣＰＵ内に、自身の同期待ちの情報を他のＣＰＵに通知する第１レジスタ（ＢＡＲＷ）と、他のＣＰＵから通知されてきた第１レジスタの情報を保持する第２レジスタ（ＢＡＲＲ）を設け、この第１レジスタの情報が直接的な配線（例えばメタル配線層など）によって第２レジスタに反映されるものとなっている。なお、直接的な配線とは、必ずしも配線のみで構成するのではなく、例えば、駆動能力を調整するためのバッファ回路やフリップフロップ回路等を介する場合など、実質的にそうであるものも含まれる。このような構成を用いると、代表的には、（１）時間的に高効率なバリア同期処理を実現可能なる、（２）低コストなハードウェアでバリア同期処理が実現可能になる、などの効果が得られる。
【００４５】
（１）に関しては、図５に示したように、例えばＣＰＵ＃０が同期待ちを通知するために第１レジスタ（ＢＡＲＷ）に情報を書き込んだ場合、他のＣＰＵ＃１〜＃３内の第２レジスタ（ＢＡＲＲ）の情報が割り込み等のような間接的な方法ではなく、直接的な配線によって自動的に更新される。したがって、ＣＰＵ＃１〜＃３は、ＣＰＵ＃０から同期待ちの通知を受けても現在実行している処理を阻害されることはなく、高い処理効率を維持できる。また、最後に処理を完了したＣＰＵ＃３が第１レジスタ（ＢＡＲＷ）に情報を書き込みと、その情報が直接的な配線によって即座に各ＣＰＵの第２レジスタ（ＢＡＲＲ）に反映されるため、ＣＰＵ＃３の処理完了から全ＣＰＵによるバリア同期処理の完了までに要する時間を短くできる。さらに、このようなバリア同期処理に伴い、各ＣＰＵは、自身内部に設けられた第１および第２レジスタをアクセスすればよいため、自身以外の場所へアクセスする場合と比べてアクセス時間も短くできる。そして、図６に示したように、反転動作を行いながら同期ポイントを設定することでも時間的な効率化が図れる。
【００４６】
（２）に関しては、本実施の形態１のマルチプロセッサシステムは、各ＣＰＵの内部に第１レジスタ（ＢＡＲＷ）および第２レジスタ（ＢＡＲＲ）を設けて、この自身のレジスタ操作によってバリア同期処理が可能な構成となっている。したがって、自身以外の場所をアクセスするような特殊命令が不要となり、低コスト化が図れる。さらに、第１および第２レジスタをメモリマップドレジスタで実現することで、各ＣＰＵが一般的に備えているメモリアクセス命令を実行することでバリア同期処理が実現できるため、更なる低コスト化が図れる。
【００４７】
一方、比較例として、前述した特許文献１のような技術を用いた場合、この同期待ちの通知がシステムバス介して行われ、この通知が行われる度に他のＣＰＵの同期待ち状況を示す同期レジスタをチェックする構成となっているため、各ＣＰＵは、この通知に伴い現在実行している処理が阻害されることになる。更に、システムバスのバス権の調停に時間を要することになる。また、比較例として、前述した特許文献２や非特許文献１のような技術を用いた場合は、各ＣＰＵに対して共通のフラグレジスタにアクセスを行うため、自身内部のレジスタにアクセスする場合と比べて時間を要する恐れがあり、更にその排他制御に時間を要する恐れもある。なお、非特許文献１の技術において、フラグレジスタの各ビットを独立して並行にライトできるように構成すればレジスタアクセスの排他制御は不必要となる。ただし、別の問題として、この技術のように、ＣＰＵ外部に設けた共通のフラグレジスタに対してアクセスを行うような構成を用いると、各ＣＰＵの命令セットに特殊命令（バリア同期命令等）を実装する必要性が生じ、コストの増大が生じてしまう。
【００４８】
（実施の形態２）
図７は、本発明の実施の形態２によるマルチプロセッサシステムにおいて、その主要部の構成例を示す概略図である。前述した実施の形態１においては、バリアライトレジスタＢＡＲＷとバリアリードレジスタＢＡＲＲを別々のレジスタ（アドレスマップドレジスタの場合、個別にアドレスが割り当てられたレジスタ）とする構成例を示した。一方、図７に示すマルチプロセッサシステムは、前述した図３におけるバリアライトレジスタＢＡＲＷとバリアリードレジスタＢＡＲＲを統合して、共通のバリアレジスタＢＡＲとしたことが特徴となっている。図７において、複数（ここでは８個）のプロセッサＣＰＵ＃０〜＃７のそれぞれは、８ビットのバリアレジスタＢＡＲを備えている。各バリアレジスタＢＡＲにおける同一ビット同士は、配線ブロックＷＢＬＫ５による直接的な配線によって相互に接続される。すなわち、例えば、ＣＰＵ＃０〜＃７に含まれる８個のＢＡＲのビット［０］同士が相互に接続され、ビット［１］同士が相互に接続され、同様にビット［２］〜ビット［７］のそれぞれも相互に接続される。
【００４９】
各ＣＰＵ＃０〜＃７は、自身のバリアレジスタＢＡＲにおける自身に対応するビットのみにライトアクセスが可能となっており、また、ＢＡＲの８ビットを対してリードアクセスが可能となっている。すなわち、例えば、ＣＰＵ＃０は、自身のＢＡＲのビット［０］のみにライトアクセスが可能となっており、同様に、ＣＰＵ＃１、＃２、…、＃７は、それぞれ、自身のＢＡＲのビット［１］、［２］、…、［７］のみにライトアクセスが可能となっている。したがって、各ＣＰＵ＃０〜＃７が、実施の形態１でバリアライトレジスタＢＡＲＷをライトしたのと同様に、自身のＢＡＲにおける自身に対応するビットにライトを行うことで、実施の形態１の場合と同様にしてバリア同期処理を行うことが可能となる。
【００５０】
以上、本実施の形態２のマルチプロセッサシステムを用いることで、実施の形態１で述べたような各種効果に加えて、レジスタ等の面積コストを削減可能になり、ハードウェアコストの更なる低減が可能になる。ただし、例えば、マスクライト機能や、リードモディファイライト機能や、または各ビット毎にアドレスを割り当てて管理する機能等によって自身のＢＡＲの特定１ビットのみにライトできるように構成する必要があるため、場合によっては、新たな制御回路が必要になったり、１ビットライト命令の処理時間が長くなることもある。
【００５１】
（実施の形態３）
図８は、本発明の実施の形態３によるマルチプロセッサシステムにおいて、その主要部の構成例を示す概略図である。図８に示すマルチプロセッサシステムは、複数のプロセッサＣＰＵの一つ（ここではＣＰＵ＃０）をマスタとし、このマスタが主体的となって他のＣＰＵの同期待ちの状況を監視することで、前述した図３の場合と比べてバリアリードレジスタＢＡＲＲのビット数が削減されたことが特徴となっている。
【００５２】
図８において、マスタとなるＣＰＵ＃０は、１ビットのバリアライトレジスタＢＡＲＷと、７ビット（ここでは対応関係を判り易くするため、ビット［０］を省いてビット［１］〜［７］とする）のバリアリードレジスタＢＡＲＲを備える。一方、それ以外のＣＰＵ＃１〜＃７は、１ビットのバリアライトレジスタＢＡＲＷと、１ビットのバリアリードレジスタＢＡＲＲを備える。配線ブロックＷＢＬＫ６では、ＣＰＵ＃０における７ビットのＢＡＲＲの各ビットと、ＣＰＵ＃１〜＃７に含まれる各ＢＡＲＷとか直接的な配線によってそれぞれ接続される。すなわち、例えば、ＣＰＵ＃０のＢＡＲＲのビット［１］にＣＰＵ＃１のＢＡＲＷが接続され、同様に、ビット［２］、ビット［３］、…、ビット［７］に、それぞれ、ＣＰＵ＃２、ＣＰＵ＃３、…、ＣＰＵ＃７のＢＡＲＷが接続される。また、ＷＢＬＫ６では、ＣＰＵ＃０のＢＡＲＷが、ＣＰＵ＃１〜＃７にそれぞれ含まれる１ビットのＢＡＲＲに直接的な配線によってブロードキャストで接続される。
【００５３】
図９は、図８の構成例を用いた場合のバリア同期処理の動作例を示す説明図である。図９において、各ＣＰＵ＃０〜＃７は、所定の処理（スレッド）を実行した後（Ｓ９０１）、バリア同期処理を行う（Ｓ９０２）。バリア同期処理では、前述した図５および図６の場合と異なり、マスタとなるＣＰＵ＃０と、それ以外のＣＰＵ＃１〜＃７とでコードが異なっている。すなわち、簡単に説明すると、マスタとなるＣＰＵ＃０が、他のＣＰＵ＃１〜＃７の同期待ちを確認した後に自身のＢＡＲＷに同期待ちをセットし、このＣＰＵ＃０における同期待ちのセットを他のＣＰＵ＃１〜＃７が自身のＢＡＲＲで一斉に検出することでバリア同期処理が行われる。
【００５４】
図１０は、図９におけるバリア同期処理のより詳細な処理内容の一例を示す説明図である。ここでは、簡素化のため、４個のＣＰＵ＃０〜＃３の場合を仮定して説明を行う。図１０に示すように、マスタとなるＣＰＵ＃０は、所定の処理（「ｄｏ〜ｅｎｄｄｏ」に該当）を完了した後に、「ｃｈｅｃｋ  ｒ１−ｒ３＝１１１」命令、次いで「ｉｎｖ  ｒ０」命令を実行する。一方、他のＣＰＵ＃１〜＃３のそれぞれは、所定の処理（「ｄｏ〜ｅｎｄｄｏ」に該当）を完了した後に、「ｉｎｖ  ｒｍ」命令（ｍはＣＰＵ番号）、次いで「ｃｈｅｃｋ  ｒ０＝１」命令を実行する。
【００５５】
図１０の例では、まず、最初に所定の処理を完了したＣＰＵ＃０が、その後の「ｃｈｅｃｋ  ｒ１−ｒ３＝１１１」命令を実行するが、他のＣＰＵ＃１〜＃３のＢＡＲＷにまだ同期待ちフラグが設定されておらず、これに伴い自身のＢＡＲＲの値が「０００」（初期値はゼロとする）であるため待機状態となる。次いで、所定の処理を完了したＣＰＵ＃２が、その後の「ｉｎｖ  ｒｍ」命令に伴い自身のＢＡＲＷ（初期値はゼロとする）を反転させて「１」にする。この情報は、前述した配線ブロックＷＢＬＫ６を介してＣＰＵ＃０のＢＡＲＲに反映される（図１０の例ではビット［２］に反映）。その後、ＣＰＵ＃２は、「ｃｈｅｃｋ  ｒ０＝１」命令を実行するが、ＣＰＵ＃０がＢＡＲＷにまだ同期待ちフラグを設定しておらず、これに伴い自身のＢＡＲＲの値が「０」であるため待機状態となる。一方、ＣＰＵ＃０も、自身のＢＡＲＲの値が「０１０」であるため待機状態を保つ。
【００５６】
続いて、所定の処理を完了したＣＰＵ＃１が、その後の「ｉｎｖ  ｒｍ」命令に伴い自身のＢＡＲＷ（初期値はゼロとする）を反転させて「１」にする。この情報は、前述した配線ブロックＷＢＬＫ６を介してＣＰＵ＃０のＢＡＲＲに反映される（図１０の例ではビット［１］に反映）。その後、ＣＰＵ＃１は、「ｃｈｅｃｋ  ｒ０＝１」命令を実行するが、ＣＰＵ＃０がＢＡＲＷにまだ同期待ちフラグを設定しておらず、これに伴い自身のＢＡＲＲの値が「０」であるため待機状態となる。一方、ＣＰＵ＃０も、自身のＢＡＲＲの値が「１１０」であるため待機状態を保つ。
【００５７】
最後に、所定の処理を完了したＣＰＵ＃３が、その後の「ｉｎｖ  ｒｍ」命令に伴い自身のＢＡＲＷ（初期値はゼロとする）を反転させて「１」にする。この情報は、前述した配線ブロックＷＢＬＫ６を介してＣＰＵ＃０のＢＡＲＲに反映される（図１０の例ではビット［３］に反映）。その後、ＣＰＵ＃３は、「ｃｈｅｃｋ  ｒ０＝１」命令を実行するが、ＣＰＵ＃０がＢＡＲＷにまだ同期待ちフラグを設定しておらず、これに伴い自身のＢＡＲＲの値が「０」であるため待機状態となる。一方、ＣＰＵ＃０は、自身のＢＡＲＲの値が「１１１」となったため、その後の「ｉｎｖ  ｒ０」命令に伴い自身のＢＡＲＷ（初期値はゼロとする）を反転させて「１」とし、以降の処理へと進む。また、これと並行してＣＰＵ＃０のＢＡＲＷの情報は、前述した配線ブロックＷＢＬＫ６を介してＣＰＵ＃１〜＃３のＢＡＲＲに即座に反映される。これにより、待機状態であったＣＰＵ＃１〜＃３は、自身のＢＡＲＲが「１」となったため、以降の処理へと進む。このようにしてバリア同期処理が完了する。
【００５８】
以上、本実施の形態３のマルチプロセッサシステムを用いることで、実施の形態１で述べたような各種効果に加えて、レジスタの面積コストを大幅に削減可能になり、ハードウェアコストの更なる低減が可能になる。なお、実施の形態１の場合と比べると、最後のＣＰＵが処理を終えてから全てのＣＰＵが同期を完了するまでの時間が若干延びる可能性はあるが、それでもなお十分な高速性を確保できる。
【００５９】
（実施の形態４）
図１１は、本発明の実施の形態４によるマルチプロセッサシステムにおいて、その主要部の構成例を示す概略図である。図１１に示すマルチプロセッサシステムは、図２の構成例と比較して、各プロセッサＣＰＵ＃０〜＃７内にバリアライトレジスタＢＡＲＷおよびバリアリードレジスタＢＡＲＲを複数セット（ここでは３セット）備えたことが特徴となっている。
【００６０】
図１１のマルチプロセッサシステムは、図２の場合と同様に、ＣＰＵ＃０〜＃３からなるクラスタＣＬＳ０と、ＣＰＵ＃４〜＃７からなるクラスタＣＬＳ１とを含んでいる。各ＣＰＵ＃０〜＃７のそれぞれは、図２の場合と異なり、１ビット×３セットのバリアライトレジスタＢＡＲＷ［０］〜［２］と、８ビット×３セットのバリアリードレジスタＢＡＲＲ［０］〜［２］とを含んでいる。
【００６１】
クラスタＣＬＳ０用の配線ブロックＷＢＬＫ１０は、ＣＰＵ＃０〜＃３に含まれる各ＢＡＲＷ［０］からのセット［０］用の４ビット配線を、ＣＰＵ＃０〜＃３に含まれる各ＢＡＲＲ［０］内の特定の４ビット（例えばビット［０］〜［３］）にそれぞれブロードキャストで接続すると共に配線ブロックＷＢＬＫ１１に向けて延伸させる。また、同様にして、ＣＰＵ＃０〜＃３に含まれる各ＢＡＲＷ［１］からのセット［１］用の４ビット配線、及び各ＢＡＲＷ［２］からのセット［２］用の４ビット配線を、それぞれ、ＣＰＵ＃０〜＃３に含まれる各ＢＡＲＲ［１］内の例えばビット［０］〜［３］、及び各ＢＡＲＲ［２］内の例えばビット［０］〜［３］にそれぞれ接続する。そして、ＷＢＬＫ１０は、これらセット［１］用及びセット［２］用の４ビット配線を配線ブロックＷＢＬＫ１１に向けて延伸させる。
【００６２】
クラスタＣＬＳ１用の配線ブロックＷＢＬＫ１１は、ＣＰＵ＃４〜＃７に含まれる各ＢＡＲＷ［０］からのセット［０］用の４ビット配線を、ＣＰＵ＃４〜＃７に含まれる各ＢＡＲＲ［０］内の特定の４ビット（例えばビット［４］〜［７］）にそれぞれブロードキャストで接続すると共に配線ブロックＷＢＬＫ１０に向けて延伸させる。また、同様にして、ＣＰＵ＃４〜＃７に含まれる各ＢＡＲＷ［１］からのセット［１］用の４ビット配線、及び各ＢＡＲＷ［２］からのセット［２］用の４ビット配線を、それぞれ、ＣＰＵ＃４〜＃７に含まれる各ＢＡＲＲ［１］内の例えばビット［４］〜［７］、及び各ＢＡＲＲ［２］内の例えばビット［４］〜［７］に接続する。そして、ＷＢＬＫ１１は、これらセット［１］用およびセット［２］用の４ビット配線を配線ブロックＷＢＬＫ１０に向けて延伸させる。
【００６３】
ＷＢＬＫ１０は、ＷＢＬＫ１１から延伸されてきたセット［０］用の４ビット配線をＣＰＵ＃０〜＃３に含まれる各ＢＡＲＲ［０］内の特定の４ビット（例えばビット［４］〜［７］）にそれぞれブロードキャストで接続する。同様にして、ＷＢＬＫ１１から延伸されてきたセット［１］用の４ビット配線、及びセット［２］用の４ビット配線を、それぞれ、ＣＰＵ＃０〜＃３に含まれる各ＢＡＲＲ［１］内の例えばビット［４］〜［７］、及びＣＰＵ＃０〜＃３に含まれる各ＢＡＲＲ［２］内の例えばビット［４］〜［７］に接続する。ＷＢＬＫ１１は、ＷＢＬＫ１０から延伸されてきたセット［０］用の４ビット配線をＣＰＵ＃４〜＃７に含まれる各ＢＡＲＲ［０］内の特定の４ビット（例えばビット［０］〜［３］）にそれぞれブロードキャストで接続する。同様にして、ＷＢＬＫ１０から延伸されてきたセット［１］用の４ビット配線、及びセット［２］用の４ビット配線を、それぞれ、ＣＰＵ＃４〜＃７に含まれる各ＢＡＲＲ［１］内の例えばビット［０］〜［３］、及びＣＰＵ＃４〜＃７に含まれる各ＢＡＲＲ［２］内の例えばビット［０］〜［３］に接続する。
【００６４】
図１２は、図１１のマルチプロセッサシステムにおいて、その動作の一例を示す説明図である。図１２の例は、例えばあるループ処理を８個のＣＰＵで分担して実行する場合の動作例を示している。この場合、図１２に示すように、コンパイラによって、例えば、８個のＣＰＵで実行する第１階層のループ処理ＭＴ１の中に、４個のＣＰＵで実行する第２階層のループ処理ＭＴ２＿１，ＭＴ２＿２が含まれ、更に、その中に２個のＣＰＵで実行する第３階層のループ処理ＭＴ３＿１〜ＭＴ３＿４が含まれるように各ＣＰＵ毎の処理が割り当てられる。そうすると、各ループ階層毎に異なる資源を用いてバリア同期処理を行う必要がある。そこで、図１１に示すように、この階層数に応じたセット数のバリアライトレジスタＢＡＲＷおよびバリアリードレジスタＢＡＲＲを設けることで、このようなループ処理を容易に実現可能となる。
【００６５】
図１２においては、ＣＰＵ＃０，＃１が、それぞれ所定のループ処理（ｄｏ〜ｅｎｄｄｏ）を行った後、自身のセット［０］用のバリアライトレジスタＢＡＲＷ［０］およびバリアリードレジスタＢＡＲＲ［０］を用いてバリア同期処理（ＢＡＲＲＩＥＲ（０−１））を行う。同様に、ＣＰＵ＃２，＃３は、所定のループ処理（ｄｏ〜ｅｎｄｄｏ）を行った後、自身のＢＡＲＷ［０］およびＢＡＲＲ［０］を用いてバリア同期処理（ＢＡＲＲＩＥＲ（０−２））を行い、ＣＰＵ＃４，＃５およびＣＰＵ＃６，＃７も、同様にしてそれぞれバリア同期処理（ＢＡＲＲＩＥＲ（０−３））およびバリア同期処理（ＢＡＲＲＩＥＲ（０−４））を行う。
【００６６】
このようにして２個のＣＰＵ間のバリア同期処理が完了した後は、４個のＣＰＵ間でバリア同期処理を行う。すなわち、ＣＰＵ＃０〜＃３は、自身のセット［１］用のバリアライトレジスタＢＡＲＷ［１］およびバリアリードレジスタＢＡＲＲ［１］を用いてバリア同期処理（ＢＡＲＲＩＥＲ（１−１））を行う。同様に、ＣＰＵ＃４〜＃７は、自身のＢＡＲＷ［１］およびＢＡＲＲ［１］を用いてバリア同期処理（ＢＡＲＲＩＥＲ（１−２））を行う。４個のＣＰＵ間のバリア同期処理が完了した後は、８個のＣＰＵ間でバリア同期処理を行う。すなわち、ＣＰＵ＃０〜＃７は、自身のセット［２］用のバリアライトレジスタＢＡＲＷ［２］およびバリアリードレジスタＢＡＲＲ［２］を用いてバリア同期処理（ＢＡＲＲＩＥＲ（２））を行う。
【００６７】
ここで、バリア同期処理（ＢＡＲＲＩＥＲ（０−１））においては、ＣＰＵ＃０，＃１が、まず、例えば、「ｉｎｖ  ｒｍ［０］」命令によって、自身のＢＡＲＷ［０］の反転（初期値は‘０’）を行う。次いで、「ｃｈｅｃｋ  ｒ０［０］−ｒ１［０］＝１１」によって自身のＢＡＲＲ［０］の０ビット目（すなわちＣＰＵ＃０のＢＡＲＷ［０］）と１ビット目（すなわちＣＰＵ＃１のＢＡＲＷ［０］）が共に‘１’となるのを待つ。なお、図示はしないが、バリア同期処理（ＢＡＲＲＩＥＲ（０−２））においては、同様に、ＣＰＵ＃２，＃３が、「ｃｈｅｃｋ  ｒ２［０］−ｒ３［０］＝１１」によって自身のＢＡＲＲ［０］の２ビット目（すなわちＣＰＵ＃２のＢＡＲＷ［０］）と３ビット目（すなわちＣＰＵ＃３のＢＡＲＷ［０］）が共に‘１’となるのを待つことになる。
【００６８】
また、バリア同期処理（ＢＡＲＲＩＥＲ（１−１））においては、ＣＰＵ＃０〜＃３が、まず、例えば、「ｉｎｖ  ｒｍ［１］」命令によって、自身のＢＡＲＷ［１］の反転（初期値は‘０’）を行う。次いで、「ｃｈｅｃｋ  ｒ０［１］−ｒ３［１］＝１１１１」によって自身のＢＡＲＲ［１］の０ビット目（ＣＰＵ＃０のＢＡＲＷ［１］）、１ビット目（ＣＰＵ＃１のＢＡＲＷ［１］）、２ビット目（ＣＰＵ＃２のＢＡＲＷ［１］）、および３ビット目（ＣＰＵ＃３のＢＡＲＷ［１］）が共に‘１’となるのを待つ。さらに、バリア同期処理（ＢＡＲＲＩＥＲ（２））においては、ＣＰＵ＃０〜＃７が、まず、例えば、「ｉｎｖ  ｒｍ［２］」命令によって、自身のＢＡＲＷ［２］の反転（初期値は‘０’）を行う。次いで、「ｃｈｅｃｋ  ｒ０［２］−ｒ７［２］＝１１１１１１１１」によって自身のＢＡＲＲ［２］の０ビット目〜７ビット目（ＣＰＵ＃０〜＃７のＢＡＲＷ［２］に対応）が共に‘１’となるのを待つ。
【００６９】
このように、複数セットのバリアライトレジスタＢＡＲＷおよびバリアリードレジスタＢＡＲＲを設けることで、各ＣＰＵが、少ないＣＰＵ数で逐次同期（すなわちグルーピング）を行いながら最終的に全ＣＰＵで同期を行うような複数階層のバリア同期処理を含んだ処理内容（スレッド）を実行可能になる。なお、セット数としては、図１２に示すように、コンパイラが全体を２分割しながらそれぞれに階層を割り当てていく場合、ＣＰＵ数をｉとして、（ｌｏｇ２ｉ）セット以上設けることが望ましい。すなわちｉ＝８の場合は３セット以上設けることが望ましい。ただし、２個のＣＰＵ間では、ソフトウェアを用いた同期も容易に実現可能であるため、場合によっては（（ｌｏｇ２ｉ）−１）セット以上でもよい。すなわち、場合によってはｉ＝８に対して２セット以上であってもよい。
【００７０】
図１３は、図１１のマルチプロセッサシステムにおいて、その動作の他の一例を示す説明図であり、図１４は、図１１のマルチプロセッサシステムにおいて、その動作の更に他の一例を示す説明図である。図１３の例では、ＣＰＵ＃０とＣＰＵ＃１が、セット［０］用のＢＡＲＷ［０］およびＢＡＲＲ［０］を用いてバリア同期処理（ＢＡＲＲＩＥＲ（０−１））を行っている。その後、ＣＰＵ＃２とＣＰＵ＃３が加わり、ＣＰＵ＃０〜＃３が、セット［１］用のＢＡＲＷ［１］およびＢＡＲＲ［１］を用いてバリア同期処理（ＢＡＲＲＩＥＲ（１−１））を行っている。
【００７１】
一方、ＣＰＵ＃０〜＃３の処理と並行して、ＣＰＵ＃４とＣＰＵ＃５は、セット［１］用のＢＡＲＷ［１］およびＢＡＲＲ［１］を用いてバリア同期処理（ＢＡＲＲＩＥＲ（１−２））を行っている。そして、最終的には、ＣＰＵ＃６，＃７が加わり、ＣＰＵ＃０〜＃７が、セット［２］用のＢＡＲＷ［２］およびＢＡＲＲ［２］を用いてバリア同期処理（ＢＡＲＲＩＥＲ（２））を行っている。
【００７２】
図１４の例では、ＣＰＵ＃０とＣＰＵ＃１が、セット［０］用のＢＡＲＷ［０］およびＢＡＲＲ［０］を用いてバリア同期処理（ＢＡＲＲＩＥＲ（０））を行った後、セット［１］用のＢＡＲＷ［１］およびＢＡＲＲ［１］を用いてバリア同期処理（ＢＡＲＲＩＥＲ（１））を行っている。一方、これと並行して、ＣＰＵ＃２とＣＰＵ＃３は、セット［０］用のＢＡＲＷ［０］およびＢＡＲＲ［０］を用いてバリア同期処理（ＢＡＲＲＩＥＲ（０））を行った後、セット［１］用のＢＡＲＷ［１］およびＢＡＲＲ［１］を用いてバリア同期処理（ＢＡＲＲＩＥＲ（１））を行っている。さらに、これと並行して、ＣＰＵ＃４〜＃７は、セット［１］用のＢＡＲＷ［１］およびＢＡＲＲ［１］を用いてバリア同期処理（ＢＡＲＲＩＥＲ（１））を行っている。
【００７３】
その後、ＣＰＵ＃０，＃１は、セット［２］用のＢＡＲＷ［２］およびＢＡＲＲ［２］を用いてバリア同期処理（ＢＡＲＲＩＥＲ（２））を行い、同様に、ＣＰＵ＃２〜＃４およびＣＰＵ＃５〜＃７も、それぞれ、セット［２］用のＢＡＲＷ［２］およびＢＡＲＲ［２］を用いてバリア同期処理（ＢＡＲＲＩＥＲ（２））を行っている。そして、最終的に、ＣＰＵ＃０〜＃７は、セット［０］用のＢＡＲＷ［０］およびＢＡＲＲ［０］を用いてバリア同期処理（ＢＡＲＲＩＥＲ（０））を行っている。
【００７４】
以上のように、各ＣＰＵがそれぞれ複雑なグルーピングを行いながら最終的なバリア同期処理を行う場合にも、各ＣＰＵが複数セットのバリアライトレジスタＢＡＲＷおよびバリアリードレジスタＢＡＲＲを備えることで容易に対応可能となる。なお、図１１の例では、各ＣＰＵのバリアリードレジスタＢＡＲＲをＣＰＵ数に該当する８ビット構成としたが、勿論、実施の形態３（図８〜図１０）で説明したようにマスタのＣＰＵを定義してＢＡＲＲのビット数を削減することも可能である。また、実施の形態２（図７）で説明したようにバリアライトレジスタＢＡＲＷとバリアリードレジスタＢＡＲＲを統合することも可能である。ここで、実施の形態３のようにマスタのＣＰＵを定義した場合の構成例および動作例を以下に説明する。
【００７５】
図１５は、本発明の実施の形態４によるマルチプロセッサシステムにおいて、図１２を変形した動作例を示す説明図である。ここでは、例えば、ＣＰＵ数が４個で、４個のＣＰＵで実行するループ処理ＭＴ１の中に２個のＣＰＵで実行するループ処理ＭＴ２＿１，ＭＴ２＿２が含まれる場合を例として説明する。図１５において、ＣＰＵ＃０とＣＰＵ＃１は、所定のループ処理を行った後、バリア同期処理（ＢＡＲＲＩＥＲ（Ｂ１））を行う。
【００７６】
バリア同期処理（ＢＡＲＲＩＥＲ（Ｂ１））では、ＣＰＵ＃１が自身のループ処理を終えた後に「ｉｎｃ  ｒ１［１］」命令によって自身のＢＡＲＷ［１］を＋１増加する（言い換えればＢＡＲＷ［１］を反転する）。ＣＰＵ＃０は、マスタＣＰＵであり、自身のループ処理を終えた後に、「ｃｈｅｃｋ  ｒ１［１］」命令によってこのＣＰＵ＃１のＢＡＲＷ［１］の反転有無を確認する。反転有りであった場合、ＣＰＵ＃０は、自身のＢＡＲＷ［１］を＋１増加し（ＢＡＲＷ［１］を反転し）、ＣＰＵ＃１は、「ｃｈｅｃｋ  ｒ０［１］」命令によってこのＣＰＵ＃０のＢＡＲＷ［１］の反転を検出する。これによってバリア同期処理（ＢＡＲＲＩＥＲ（Ｂ１））が完了する。また、ＣＰＵ＃２およびＣＰＵ＃３も、同様に、例えばＣＰＵ＃２をマスタＣＰＵとしてバリア同期処理（ＢＡＲＲＩＥＲ（Ｂ２））を行う。
【００７７】
次いで、ＣＰＵ＃０〜＃３でバリア同期処理（ＢＡＲＲＩＥＲ（Ｂ３））を行う。バリア同期処理（ＢＡＲＲＩＥＲ（Ｂ３））では、ＣＰＵ＃１が「ｉｎｃ  ｒ１［０］」命令によって自身のＢＡＲＷ［０］を＋１増加する（ＢＡＲＷ［０］を反転し）、同様に、ＣＰＵ＃２およびＣＰＵ＃３も、それぞれ、「ｉｎｃ  ｒ２［０］」命令および「ｉｎｃ  ｒ３［０］」命令によって自身のＢＡＲＷ［０］を反転する。マスタＣＰＵとなるＣＰＵ＃０は、「ｃｈｅｃｋ  ｒ１［０］」命令、「ｃｈｅｃｋ  ｒ２［０］」命令、および「ｃｈｅｃｋ  ｒ３［０］」命令によって、このＣＰＵ＃１〜＃３のそれぞれによるＢＡＲＷ［０］の反転有無を確認する。全て反転有りであった場合、ＣＰＵ＃０は、自身のＢＡＲＷ［０］を＋１増加し（ＢＡＲＷ［０］を反転し）、ＣＰＵ＃１〜＃３は、「ｃｈｅｃｋ  ｒ０［０］」命令によってこのＣＰＵ＃０のＢＡＲＷ［０］の反転を検出する。これによって、バリア同期処理（ＢＡＲＲＩＥＲ（Ｂ３））が完了する。
【００７８】
したがって、このような４個のＣＰＵの場合においては、例えば、ＣＰＵ＃０は、ＣＰＵ＃１〜＃３のＢＡＲＷの値を読めればよく、ＣＰＵ＃１は、ＣＰＵ＃０のＢＡＲＷの値を読めればよく、ＣＰＵ＃２は、ＣＰＵ＃３とＣＰＵ＃０のＢＡＲＷの値を読めればよく、ＣＰＵ＃３は、ＣＰＵ＃２とＣＰＵ＃０のＢＡＲＷの値を読めればよい。また、８個のＣＰＵに拡張した場合は、例えば、ＣＰＵ＃０は、ＣＰＵ＃１〜＃７のＢＡＲＷの値を読めればよく、ＣＰＵ＃１は、ＣＰＵ＃０のＢＡＲＷの値を読めればよく、ＣＰＵ＃２は、ＣＰＵ＃３とＣＰＵ＃０のＢＡＲＷの値を読めればよく、ＣＰＵ＃３は、ＣＰＵ＃２とＣＰＵ＃０のＢＡＲＷの値を読めればよい。さらに、ＣＰＵ＃４は、ＣＰＵ＃５〜＃７とＣＰＵ＃０のＢＡＲＷの値を読めればよく、ＣＰＵ＃５は、ＣＰＵ＃４とＣＰＵ＃０のＢＡＲＷの値を読めればよく、ＣＰＵ＃６は、ＣＰＵ＃７とＣＰＵ＃４とＣＰＵ＃０のＢＡＲＷの値を読めればよく、ＣＰＵ＃７は、ＣＰＵ＃６とＣＰＵ＃４とＣＰＵ＃０のＢＡＲＷの値を読めればよい。したがって、これらに対応してＢＡＲＲのビット数を削減することができる。
【００７９】
以上、本実施の形態４のマルチプロセッサシステムを用いることで、これまでの実施の形態で述べたような各種効果に加えて、更に、複数階層のバリア同期処理を含んだ各ＣＰＵの処理内容（スレッド）にも容易に対応可能となる。特に、ＣＰＵ数が増加するにつれてこのような複数階層のバリア同期処理が不可欠になると考えられ、その場合に本実施の形態４のマルチプロセッサシステムを用いることで有益な効果を得ることができる。
【００８０】
（実施の形態５）
図１６は、本発明の実施の形態５によるマルチプロセッサシステムにおいて、その主要部の構成例を示す概略図である。図１６に示すマルチプロセッサシステムは、実施の形態１で述べた図２の構成例と比較して、各ＣＰＵ＃０〜＃７内のバリアライトレジスタＢＡＲＷのビット数をｎビット（ｎ≧２）とし、バリアリードレジスタＢＡＲＲのビット数を（８×ｎ）ビットとしたことが特徴となっている。すなわち、ＢＡＲＷに番号（バージョンナンバー）を設定できる構成例となっている。また、これに応じて、クラスタＣＬＳ０用の配線ブロックＷＢＬＫ２０からクラスタＣＬＳ１用の配線ブロックＷＢＬＫ２１に向かう配線本数およびＷＢＬＫ２１からＷＢＬＫ２０に向かう配線本数は、それぞれ（（８×ｎ）／２）本となる。更に、例えばＷＢＬＫ２０およびＷＢＬＫ２１内では、各ＣＰＵ＃０〜＃７内のＢＡＲＷのｎビットがＢＡＲＲ内の対応するｎビットの箇所にブロードキャストで配線されるため、明示はしないが図２と比較して配線本数が増加している。それ以外の構成に関しては、図２の場合と同様であるため詳細な説明は省略する。
【００８１】
図１７は、図１６のマルチプロセッサシステムにおいて、その動作の一例を示す説明図である。図１７においては、実施の形態４で述べた図１２の場合と同様に、各ＣＰＵ＃０〜＃７に対して第１階層のループ処理ＭＴ１、第２階層のループ処理ＭＴ２＿１，ＭＴ２＿２、第３階層のループ処理ＭＴ３＿１〜ＭＴ３＿４からなる処理内容が割り当てられている。図１２の例では、この３階層分の処理をそれぞれ異なるセットのＢＡＲＷおよびＢＡＲＲを用いることで実現したが、図１７の例では、この３階層分の処理をＢＡＲＷおよびＢＡＲＲ内のそれぞれ異なるビットを用いることで実現する。すなわち、図１６において、ｎ＝３とし、ＢＡＲＷの各ビットを１階層に対応させる。
【００８２】
図１７において、ＣＰＵ＃０とＣＰＵ＃１は、所定のループ処理を行った後にバリア同期処理（ＢＡＲＲＩＥＲ（０−１））を行う。同様に、ＣＰＵ＃２と＃３、ＣＰＵ＃４と＃５、ＣＰＵ＃６と＃７も、それぞれ、所定のループ処理を行った後にバリア同期処理（ＢＡＲＲＩＥＲ（０−２））、（ＢＡＲＲＩＥＲ（０−３））、（ＢＡＲＲＩＥＲ（０−４））を行う。これら第３階層目のバリア同期処理は、ＢＡＲＷのｎビット（３ビット）に“ｘｘ１（ｘは任意の値）”がセットされた場合を同期ポイントとして行う。
【００８３】
すなわち、例えば、バリア同期処理（ＢＡＲＲＩＥＲ（０−１））においては、ＣＰＵ＃０とＣＰＵ＃１のそれぞれが、自身のループ処理を終えた後に、まず、「ｉｎｖ  ｒｍ」命令によって自身のＢＡＲＷにおける３ビット中の特定の１ビット（ここでは右端のビットとする）を反転させる。反転が行われると、各ＣＰＵ＃０〜＃７のＢＡＲＲにおけるＣＰＵ＃０とＣＰＵ＃１に対応するレジスタフィールド（ｒ０とｒ１に該当）のそれぞれの３ビット値は、配線ブロックＷＢＬＫを介して“ｘｘ１”となる。次いで、ＣＰＵ＃０とＣＰＵ＃１のそれぞれは、「ｃｈｅｃｋ  ｒ０−ｒ１＝ａｌｌ“ｘｘ１”」命令によって、ＢＡＲＲにおけるＣＰＵ＃０とＣＰＵ＃１に対応するレジスタフィールド（ｒ０とｒ１に該当）の両方の３ビット値が、“ｘｘ１”となるまで待ち合わせを行う。そして、ｒ０およびｒ１共に“ｘｘ１”となった段階でバリア同期処理（ＢＡＲＲＩＥＲ（０−１））が完了する。
【００８４】
このようにして第３階層目のバリア同期処理が行われた後は、第２階層目のバリア同期処理を行う。すなわち、ＣＰＵ＃０〜＃３がバリア同期処理（ＢＡＲＲＩＥＲ（０−５））を行い、ＣＰＵ＃４〜＃７がバリア同期処理（ＢＡＲＲＩＥＲ（０−６））を行う。これら第２階層目のバリア同期処理は、ＢＡＲＷのｎビット（３ビット）に“ｘ１ｘ”がセットされた場合を同期ポイントとして行う。
【００８５】
例えば、バリア同期処理（ＢＡＲＲＩＥＲ（０−５））においては、ＣＰＵ＃０〜＃３のそれぞれが、まず、「ｉｎｖ  ｒｍ」命令によって自身のＢＡＲＷにおける３ビット中の特定の１ビット（ここでは真ん中のビットとする）を反転させる。この第２階層目に伴う反転が行われると、各ＣＰＵ＃０〜＃７のＢＡＲＲにおけるＣＰＵ＃０〜＃３に対応するレジスタフィールド（ｒ０〜ｒ３に該当）のそれぞれの３ビット値は、“ｘ１ｘ”となる。次いで、ＣＰＵ＃０〜＃３のそれぞれは、「ｃｈｅｃｋ  ｒ０−ｒ３＝ａｌｌ“ｘ１ｘ”」命令によって、ＢＡＲＲにおけるＣＰＵ＃０〜＃３に対応するレジスタフィールド（ｒ０〜ｒ３に該当）のそれぞれの３ビット値が、全て“ｘ１ｘ”となるまで待ち合わせを行う。そして、ｒ０〜ｒ３の全てが“ｘ１ｘ”となった段階でバリア同期処理（ＢＡＲＲＩＥＲ（０−５））が完了する。
【００８６】
このようにして第２階層目のバリア同期処理が行われた後は、第１階層目のバリア同期処理を行う。すなわち、ＣＰＵ＃０〜＃７がバリア同期処理（ＢＡＲＲＩＥＲ（０−７））を行う。この第１階層目のバリア同期処理は、ＢＡＲＷのｎビット（３ビット）に“１ｘｘ”がセットされた場合を同期ポイントとして行う。
【００８７】
バリア同期処理（ＢＡＲＲＩＥＲ（０−７））においては、ＣＰＵ＃０〜＃７のそれぞれが、まず、「ｉｎｖ  ｒｍ」命令によって自身のＢＡＲＷにおける３ビット中の特定の１ビット（ここでは左端のビットとする）を反転させる。この第１階層目に伴う反転が行われると、各ＣＰＵ＃０〜＃７のＢＡＲＲにおけるＣＰＵ＃０〜＃７に対応するレジスタフィールド（ｒ０〜ｒ７に該当）のそれぞれの３ビット値は、“１ｘｘ”となる。次いで、ＣＰＵ＃０〜＃７のそれぞれは、「ｃｈｅｃｋ  ｒ０−ｒ７＝ａｌｌ“１ｘｘ”」命令によって、ＢＡＲＲにおけるＣＰＵ＃０〜＃７に対応するレジスタフィールド（ｒ０〜ｒ７に該当）のそれぞれの３ビット値が、全て“１ｘｘ”となるまで待ち合わせを行う。そして、ｒ０〜ｒ７の全てが“１ｘｘ”となった段階でバリア同期処理（ＢＡＲＲＩＥＲ（０−７））が完了する。
【００８８】
なお、図示はしないが、その後の処理で、例えば、ＢＡＲＷの３ビット中の右端のビットを再び用いてバリア同期処理を行う場合には、前述した第３階層目のバリア同期処理によってＢＡＲＷの当該ビットが既に‘１’となっているため、今度はＢＡＲＷの３ビットに“ｘｘ０（ｘは任意の値）”がセットされた場合を同期ポイントとする。これによって、実施の形態１で述べたように、反転したビットを元に戻すようなリセット動作を省略でき、高速化が図れる。
【００８９】
図１８は、図１６のマルチプロセッサシステムにおいて、その動作の他の一例を示す説明図である。図１８は、実施の形態３で述べたようにマスタＣＰＵを定義した場合での動作例を示している。ここでは、ＣＰＵ数が４個の場合を例として説明を行う。図１８においては、ＣＰＵ＃０〜＃３で実行する第１階層のループ処理ＭＴ１の中に、ＣＰＵ＃０，＃１で実行する第２階層のループ処理ＭＴ２＿１と、ＣＰＵ＃２，＃３で実行する第２階層のループ処理ＭＴ２＿２が含まれている。また、レジスタフィールドは、ＣＰＵ数が４個の場合、ｒ０〜ｒ３であり、ｒ０〜ｒ３のそれぞれの中に２ビット（ｌｏｇ２４）が含まれることになる。
【００９０】
ＣＰＵ＃０，＃１は、所定のループ処理を終えた後に第２階層目のバリア同期処理（ＢＡＲＲＩＥＲ（Ｂ１））を行う。バリア同期処理（ＢＡＲＲＩＥＲ（Ｂ１））では、まず、ＣＰＵ＃１が、所定のループ処理を終えた後に「ｉｎｖ  ｒ１（１）」命令によって自身のＢＡＲＷにおける２ビット中の一方のビットを反転させる。ＣＰＵ＃０は、マスタＣＰＵであり、所定のループ処理を終えた後に「ｃｈｅｃｋ  ｒ１（１）」命令によって前述したＣＰＵ＃１によるＢＡＲＷのビット反転の有無を確認する。ビット反転が有りの場合、ＣＰＵ＃０は「ｉｎｖ  ｒ０（１）」命令によって自身のＢＡＲＷにおける２ビット中の一方のビットを反転させる。そして、ＣＰＵ＃１が、「ｃｈｅｃｋ  ｒ０（１）」命令によって、このＣＰＵ＃０によるＢＡＲＷのビット反転動作を検出した段階でバリア同期処理（ＢＡＲＲＩＥＲ（Ｂ１））が完了する。また、ＣＰＵ＃２，＃３も同様にして第２階層目のバリア同期処理（ＢＡＲＲＩＥＲ（Ｂ２））を行う。
【００９１】
第２階層目のバリア同期処理が完了すると、ＣＰＵ＃０〜＃３は、第１階層目のバリア同期処理（ＢＡＲＲＩＥＲ（Ｂ３））を行う。バリア同期処理（ＢＡＲＲＩＥＲ（Ｂ３））では、ＣＰＵ＃１が「ｉｎｖ  ｒ１（０）」命令によって自身のＢＡＲＷにおける２ビット中の他方のビットを反転し、同様に、ＣＰＵ＃２およびＣＰＵ＃３も、それぞれ、「ｉｎｖ  ｒ２（０）」命令および「ｉｎｖ  ｒ３（０）」命令によって自身のＢＡＲＷにおける２ビット中の他方のビットを反転する。マスタＣＰＵとなるＣＰＵ＃０は、「ｃｈｅｃｋ  ｒ１（０）」命令、「ｃｈｅｃｋ  ｒ２（０）」命令、および「ｃｈｅｃｋ  ｒ３（０）」命令によって、このＣＰＵ＃１〜＃３のそれぞれがＢＡＲＷにおける２ビット中の他方のビットを反転したかを確認する。全て反転有りであった場合、ＣＰＵ＃０は、自身のＢＡＲＷにおける２ビット中の他方のビットを反転し、ＣＰＵ＃１〜＃３は、「ｃｈｅｃｋ  ｒ０（０）」命令によってこのＣＰＵ＃０によるＢＡＲＷのビット反転動作を検出する。これによって、バリア同期処理（ＢＡＲＲＩＥＲ（Ｂ３））が完了する。
【００９２】
図１９は、図１８の動作例において、そのバリア同期処理（ＢＡＲＲＩＥＲ（Ｂ１））で用いる詳細なソースコードの一例を示す説明図である。図１９において、ＣＰＵ＃１は変数「ｖｅｒ」と「１」とのＥＸＯＲ演算を行い、その結果として得られた「ｖｅｒ」の値を変数「ｒ１」に代入している。すなわち「ｖｅｒ」の値が“００”であった場合、ＥＸＯＲ演算を介して「ｒ１」に“０１”が代入され、逆に、「ｖｅｒ」の値が“０１”であった場合、ＥＸＯＲ演算を介して「ｒ１」に“００”が代入される。これは、図１８における「ｉｎｖ  ｒ１（１）」命令に該当する。
【００９３】
一方、ＣＰＵ＃０も変数「ｖｅｒ」と「１」とのＥＸＯＲ演算を行い、その結果を「ｖｅｒ」に代入している。そして、ＣＰＵ＃０は、「ｗｈｉｌｅ」文によって、このＥＸＯＲ演算結果となる「ｖｅｒ」の値とＣＰＵ＃１で得られた「ｒ１」の値とが一致するまで待機する。すなわち、例えば、ＣＰＵ＃０の演算によって得られた「ｖｅｒ」＝“０１”の値を期待値として、ＣＰＵ＃１が「ｒ１」に“０１”を設定するのを待つ。これは、図１８における「ｃｈｅｃｋ  ｒ１（１）」命令に該当する。ＣＰＵ＃１が「ｒ１」に“０１”を設定すると、ＣＰＵ＃０は「ｗｈｉｌｅ」文を抜け、変数「ｒ０」に「ｖｅｒ」の値を設定する。すなわち、例えば「ｒ０」に“０１”を設定する。一方、ＣＰＵ＃１は、「ｗｈｉｌｅ」文を用いて「ｒ０」に“０１”が設定されるのを待っており、この設定動作を検出することでバリア同期処理が完了となる。
【００９４】
以上、本実施の形態５のマルチプロセッサシステムを用いることで、これまでの実施の形態で述べたような各種効果に加えて、更に、複数階層のバリア同期処理を含んだ各ＣＰＵの処理内容（スレッド）にも容易に対応可能となる。特に、ＣＰＵ数が増加するにつれてこのような複数階層のバリア同期処理が不可欠になると考えられ、その場合に本実施の形態５のマルチプロセッサシステムを用いることで有益な効果を得ることができる。なお、図１６では、バリアライトレジスタＢＡＲＷとバリアリードレジスタＢＡＲＲを別々のレジスタとしたが、勿論、実施の形態２の図７に示したように、統合した一つのレジスタＢＡＲとすることも可能である。
【００９５】
（実施の形態６）
図２０は、本発明の実施の形態６によるマルチプロセッサシステムにおいて、図１６の構成例を用いた他の動作の一例を示す説明図である。ここでは、図１６におけるバリアライトレジスタＢＡＲＷ等のｎビット（すなわちバージョンナンバー）を、実施の形態５で述べたような階層の切り分け用途以外で利用する場合の動作例が示されている。
【００９６】
図２０において、各ＣＰＵ＃０〜＃７は、所定の処理を行った後（Ｓ２００１）、同期ポイントを‘１’としてバリア同期処理（ＢＡＲＲＩＥＲ（０−１））を行う。次いで、所定の処理を行った後（Ｓ２００２）、今度は同期ポイントを‘２’としてバリア同期処理（ＢＡＲＲＩＥＲ（０−２））を行う。その後、所定の処理を行った後（Ｓ２００３）、今度は同期ポイントを‘３’としてバリア同期処理（ＢＡＲＲＩＥＲ（０−３））を行う。これによって、例えばバリア同期処理を行う回数などを管理することができる。
【００９７】
例えば、バリア同期処理（ＢＡＲＲＩＥＲ（０−３））では、各ＣＰＵ＃０〜＃７が「ｉｎｃ  ｒｍ」命令によって自身のＢＡＲＷの値に＋１を加え、その後、「ｃｈｅｃｋ  ｒ０−ｒ７＝ａｌｌ‘３’」命令によって、各ＣＰＵ＃０〜＃７のＢＡＲＷの値が全て‘３’となるのを待つ。図１６において、例えばＢＡＲＷ等のｎビットが２ビットの場合には、‘０’〜‘３’までのバージョンナンバーを使用できる。この場合、図２０における‘３’の次はまた‘０’に戻ってバリア同期処理を行うことになる。このような動作を用いると、実施の形態１で述べたように、バージョンナンバーをリセットするような動作は行わないため、高速化が図れる。
【００９８】
また、このようなバージョンナンバーを用いることで、複雑なバリア同期処理に柔軟に対応することが可能となる。例えば、バージョンナンバーを直値で指定することで、あるＣＰＵと他のＣＰＵをバージョンナンバー‘１’で同期させ、あるＣＰＵと更に他のＣＰＵをバージョンナンバー‘２’で同期させることなどが可能となる。この場合、バージョンナンバーで同期を管理することで、１ビットの情報しかない場合と比べて容易に同期処理を行うことが可能となる。
【００９９】
（実施の形態７）
図２１は、本発明の実施の形態７によるマルチプロセッサシステムにおいて、その主要部の構成例を示す概略図である。図２１に示すマルチプロセッサシステムは、実施の形態４で述べた図１１の構成例と比較して、ＣＰＵ＃０〜＃７内のバリアライトレジスタＢＡＲＷ［０］，［１］，［２］のそれぞれのビット数をｎビット（ｎ≧２）とし、バリアリードレジスタＢＡＲＲ［０］，［１］，［２］のそれぞれのビット数を（８×ｎ）ビットとしたことが特徴となっている。すなわち、実施の形態４で述べたように、ＢＡＲＷおよびＢＡＲＲを複数セット設ける構成に加えて、さらに各セット内で、実施の形態５，６で述べたようなバージョンナンバーも設定できる構成例となっている。
【０１００】
このような構成を用いると、実施の形態４で述べたように各セットの数に応じて複数階層に対応でき、更に実施の形態５で述べたようにバージョンナンバーのビット数に応じて複数階層に対応できるため、その組合せにより例えば３階層を超えたような場合にも対応可能となる。すなわち、例えば、図１２に対して、ＣＰＵ＃０とＣＰＵ＃２からなる第４階層のループ処理が加わったような場合にも対応可能となる。
【０１０１】
図２２は、図２１のマルチプロセッサシステムにおいて、その使用例を示す説明図である。ここでは、ＣＰＵ数が４個の場合を例として説明を行う。図２２においては、ＣＰＵ＃０〜＃３によって実行される第１階層のループ処理ＭＴ１の中に、ＣＰＵ＃０と＃１によって実行される第２階層のループ処理ＭＴ２＿１と、ＣＰＵ＃２と＃３によって実行される第２階層のループ処理ＭＴ２＿２とが含まれている。ＣＰＵ＃０，＃１は、所定のループ処理を終えた後に第２階層目のバリア同期処理（ＢＡＲＲＩＥＲ（Ｂ１））を行い、ＣＰＵ＃２，＃３も、所定のループ処理を終えた後に第２階層目のバリア同期処理（ＢＡＲＲＩＥＲ（Ｂ２））を行う。そして、第２階層目のバリア同期処理を終えた後、ＣＰＵ＃０〜＃３は、第１階層目のバリア同期処理（ＢＡＲＲＩＥＲ（Ｂ３））を行う。
【０１０２】
このようにＣＰＵ数が４個の場合、２階層に対応して例えばＢＡＲＷおよびＢＡＲＲのセットを２セット設ける。そして、各セットにおいては、各ＣＰＵに含まれるＢＡＲＷ等にｎビット（ｎ≧２）のバージョンナンバーが設定可能な構成となっている。この場合、図２２に示すように、各階層のループ処理ＭＴ，ＭＴ２＿１，ＭＴ２＿２に対して、各ループ処理の回転数をバージョンナンバーを用いて管理することができる。例えば、バリア同期処理（ＢＡＲＲＩＥＲ（Ｂ１））を２回行った（すなわちループ処理ＭＴ２＿１を２回転した）段階でＭＴ２＿１を抜け、ループ処理ＭＴ２＿２を３回転した段階でＭＴ２＿２を抜け、ループ処理ＭＴ１を４回転した段階でＭＴ１を抜けるような動作を行うことが可能となる。
【０１０３】
また、各ループ処理を回転する毎にバージョンナンバーを更新していくことで、例えば、このバージョンナンバーをプログラムデバッグ時のブレークポイントの停止条件として使用することもできる。更には、ホットスポットの動的抽出等を行う際に活用することなども可能となる。なお、例えば、バージョンナンバーを用いずに、その分セット数を増やしたり、逆にセット数を１セットとして、その分バージョンナンバーのビット数を増やすことなどでも、より高度なバリア同期処理に対応可能となる。ただし、この場合、プログラムの可読性の低下などを招く恐れがあり、この観点から、セットとバージョンナンバーを併用した構成とする方が望ましい。
【０１０４】
以上、本実施の形態７のマルチプロセッサシステムを用いることで、これまでの実施の形態で述べたような各種効果に加えて、更に、より複雑又は高度なバリア同期処理を行いたい場合にも柔軟に対応することが可能となる。特に、ＣＰＵ数が増加するにつれて、より高度なバリア同期処理が必要になると考えられ、その場合に本実施の形態７のマルチプロセッサシステムを用いることで有益な効果を得ることができる。
【０１０５】
以上、本発明者よりなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
【産業上の利用可能性】
【０１０６】
本発明の一実施の形態によるマルチプロセッサシステムは、特に、組み込み用途向けのシステムなどのようにハードウェアコストや開発期間の制約が大きい分野向けのシステムに適用して有益な技術であり、これに限らず、マルチプロセッサシステム全般に対して広く適用可能である。
【符号の説明】
【０１０７】
ＣＰ  半導体チップ
ＣＬＳ  クラスタ
ＳＮＢ  スヌープバス
ＳＮＣ  スヌープバスコントローラ
ＣＰＵ  プロセッサ
ＣＰＵ＿ＭＤ  ＣＰＵモジュール
ＦＰＵ  浮動小数点数演算部
Ｉ＄，Ｏ＄  一次キャッシュメモリ
ＣＣＮ  キャッシュコントローラ
ＩＬ，ＯＬ  ローカルメモリ
ＢＩＣ  システムバス用インタフェース
ＵＲＡＭ  ユーザメモリ
ＤＢＧ  デバッグコントローラ
ＩＮＴＣ  割り込みコントローラ
ＳＨＷＹ  システムバス
ＬＢＳＣ，ＤＢＳＣ  メモリコントローラ
ＣＳＭ  共有メモリ
ＤＭＡＣ  ＤＭＡコントローラ
ＨＰＢ  周辺バスブリッジ
ＣＰＧ  クロック生成部
ＧＰＩＯ  汎用ＩＯインタフェース部
ＴＭＵ  タイマ部
ＭＥＭ  外部メモリ
ＢＡＲＷ  バリアライトレジスタ
ＢＡＲＲ  バリアリードレジスタ
ＷＢＬＫ  配線ブロック
ＢＡＲ  バリアレジスタ
【図１】
2013137833.tif 000003
【図２】
2013137833.tif 000004
【図３】
2013137833.tif 000005
【図４】
2013137833.tif 000006
【図５】
2013137833.tif 000007
【図６】
2013137833.tif 000008
【図７】
2013137833.tif 000009
【図８】
2013137833.tif 000010
【図９】
2013137833.tif 000011
【図１０】
2013137833.tif 000012
【図１１】
2013137833.tif 000013
【図１２】
2013137833.tif 000014
【図１３】
2013137833.tif 000015
【図１４】
2013137833.tif 000016
【図１５】
2013137833.tif 000017
【図１６】
2013137833.tif 000018
【図１７】
2013137833.tif 000019
【図１８】
2013137833.tif 000020
【図１９】
2013137833.tif 000021
【図２０】
2013137833.tif 000022
【図２１】
2013137833.tif 000023
【図２２】
2013137833.tif 000024