(57)【特許請求の範囲】
【請求項１】
バリアを有するコンピューティングデバイスであって、
− メモリ（ＲＡＭ、２０２）と、
− さまざまなプロセッサ（ＰＺ、２００）でマルチプロセスを処理することができ、プロセス（Ｐ）によるブロック（Ｂ）の並列実行を可能にする処理ユニットであって、前記ブロック（Ｂ）が一連のジョブステップ（Ｗ）のグループに関連する処理ユニットと、
−１つのバスによって前記処理ユニットの前記プロセッサ（ＰＺ、２００）と接続された１つのハードウェア回路（ＨＢＭ、４００）によって実行されるバリアと、を有するコンピューティングデバイスであって、
前記ハードウェア回路（ＨＢＭ、４００）は、前記バス専用とされた、使用可能なアドレス空間内に１つのアドレスを有し、実行中のブロック（Ｂ）の実行が完了したことを示す各プロセス（Ｐ）からの呼び出しを受信することができ、各呼び出しが、前記バスを介して送信される読み取り／書き込み命令に対応し、および、データを含み、前記ハードウェア回路（ＨＢＭ、４００）が、実行中のジョブステップ（Ｗ）のブロック（Ｂ）全体が実行されたときに、そのあとのジョブステップのブロック（Ｂ）の実行を許可するように配置され、各呼び出しの前記データから引き出されるセグメントによってアドレス空間にアクセスし、前記各呼び出しの前記データは、使用可能なアドレス空間における前記ハードウェア回路のアドレスを含むことを特徴とするコンピューティングデバイス。
【請求項２】
前記ハードウェア回路は、少なくとも１つの呼び出しのデータから引き出した処理を実行するためのマイクロプログラム（ｍｉｃｒｏ−Ｐｒｏｇ、４０２）を有する、請求項１に記載のコンピューティングデバイス。
【請求項３】
前記処理は、すべてのプロセス（Ｐ）が実行中のジョブステップ（Ｗ）のブロック（Ｂ）の実行が完了したことを表示したのを示す完了条件を確認するまで、各呼び出しへの応答を保留する段階を含む、請求項２に記載のコンピューティングデバイス。
【請求項４】
すべてのプロセスが実行中のジョブステップ（Ｗ）のブロック（Ｂ）の実行が完了したことを表示したとき、ハードウェア回路（ＨＢＭ、４００）はデータ（Ｄ）の出力部から各呼び出しに応答するように配置され、プロセス（Ｐ）に対してそのあとのジョブステップ（Ｗ）に移ることを許可する、請求項２または３に記載のコンピューティングデバイス。
【請求項５】
前記処理は、最初の呼び出しからプロセス数を抽出したのち、前記完了条件を確認するまでほかの呼び出しから前記数を逆算する工程を含む、請求項３に記載のコンピューティングデバイス。
【請求項６】
各呼び出しは、前記プロセス数を示す、請求項５に記載のコンピューティングデバイス。
【請求項７】
呼び出しの集合は、各呼び出しのデータによって定義される同じタイプ（ＥＮＲＥＧＩＳＲＴＥＲ）のものである、請求項２から６のいずれか一項に記載のコンピューティングデバイス。
【請求項８】
前記コンピューティングデバイスは、複数のハードウェア回路を有することができ、各呼び出しの前記データから引き出されたセグメントによってアドレス空間にアクセスする、請求項１〜７のいずれか一項に記載のコンピューティングデバイス。
【請求項９】
前記ハードウェア回路のそれぞれが同じ１つの回路に接続される、請求項８に記載のコンピューティングデバイス。
【請求項１０】
前記ハードウェア回路のそれぞれが別の回路に接続される、請求項８に記載のコンピューティングデバイス。
【請求項１１】
前記コンピューティングデバイスはさらに、ソフトウェアによるバリアを有して前記ハードウェア回路と併用して演算する、請求項１〜１０のいずれか一項に記載のコンピューティングデバイス。
【請求項１２】
前記コンピューティングデバイスはさらに、前記メモリ（ＲＡＭ、２０２）と、前記処理ユニットの前記プロセッサ（ＰＺ、２００）との間に、メモリへのアクセスマネージャ（ＣＡＣＨＥ ＣＯＨＥＲ ＭＧＲ、２０６）を有し、前記ハードウェア回路（ＨＢＭ、４００）に対する、前記プロセッサ（ＰＺ、２００）からの呼び出しは直接行われ、前記マネージャのメモリへのアクセスを回避する、請求項１〜１１のいずれか一項に記載のコンピューティングデバイス。
【請求項１３】
前記コンピューティングデバイスはさらに、前記マイクロプログラム（ｍｉｃｒｏ−Ｐｒｏｇ、４０２）と接続する専用メモリ（Ｄｅｄ＿ＭＥＭ、４０４）を有する、請求項２から７のいずれか一項に記載のコンピューティングデバイス。
【請求項１４】
プロセス階層での情報処理方法であって、
ａ．１つのタスク（Ｔ）を一連のブロック（Ｂ）からなるプロセス（Ｐ）として、処理ユニットのさまざまなプロセッサ（ＰＺ、２００）よって実行されるサブタスクに分解するステップと、
ｂ．１つのバスによって前記処理ユニットの前記プロセッサ（ＰＺ、２００）と接続された１つのハードウェア回路（ＨＢＭ、４００）によって実行される物理バリアマネージャ（ＨＢＭ、４００）に、プロセス（Ｐ）の数に関係するカウンタ（ＣＮＴ、４０６）を備えるバリア（ＢＳ、１００）を設定するステップであって、前記ハードウェア回路（ＨＢＭ、４００）は、前記バス専用とされた、使用可能なアドレス空間内に１つのアドレスを有している、バリア（ＢＳ、１００）を設定するステップと、
ｃ．各プロセス（Ｐ）に、最初のブロック（Ｂ）を実行中のブロックと定義してこれを実行するとともに、実行中のこのブロック（Ｂ）の実行が終了した際に前記カウンタ（ＣＮＴ、４０６）をデクリメントするために前記バリア（ＢＳ、１００）にアクセスするステップであって、各プロセス（Ｐ）から前記バリアへのアクセスは、呼び出しを用いて実施され、各呼び出しが、前記バスを介して送信される読み取り／書き込み命令に対応し、および、データを含み、前記各呼び出しの前記データは、使用可能なアドレス空間における前記ハードウェア回路のアドレスを含む、前記バリア（ＢＳ、１００）にアクセスするステップと、
ｄ．実行中のブロック（Ｂ）の実行が終了した各プロセス（Ｐ）で前記バリア（ＢＳ、１００）からの応答を待つステップであって、現在のブロック（Ｂ）すべてが実行されていることをカウンタが示すと、この応答がカウンタ（ＣＮＴ、４０６）に直接つながって発信されるステップと、
ｅ．現在のブロック（Ｂ）すべてが実行されているときに、実行中のブロック（Ｂ）を各プロセス（Ｐ）の次のブロックに基づいて再度定義し、これらの新たな実行中のブロック（Ｂ）でステップｃおよびｄを繰り返すステップ
とを含むタイプの情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列実行されるプロセス処理に関する。
【背景技術】
【０００２】
コンピュータのソフトウェアまたはプログラムのなかには、与えられたタスクを実行または達成するのに膨大な時間がかかるものがある。効率を上げ、計算時間を短縮するため、このようなプログラムは、実行されるコンピュータの並列性から利点を引き出すことができる。コンピュータの並列性とは、複数のプロセッサあるいは複数のコアを有する少なくとも１つのプロセッサ、または複数の実行ファイル（スレッド、ｔｈｒｅａｄｓ）を有する少なくとも１つのプロセッサが搭載されているコンピュータのことである。
【０００３】
並列性を活かすため、コンピュータプログラムがタスク（またはメインタスク）を複数のサブタスクに分割し、さまざまなプロセスによって計算を並列実行することができる。そのため、各プロセスは、このサブタスクのうちの１つを実行してこれを完了することを目的とする。プロセスが実行中のサブタスクを終了すると、完了すべき第２のサブタスクをこのプロセスに割り当てることが可能となり、その後は必要に応じて次のサブタスクを割り当て、このように次々と割り当てることができる。
【０００４】
多数のプロセスを使用することにより（マルチプロセス処理）、これらのプロセスの同期をとる必要が生じる。この同期は、とりわけサブタスクが完了した際にメインタスクを順序付けして再編成できるようにすることを目的とする。
【０００５】
このような同期は一般に、いわゆる「プロセス間同期機構」という機構によって行われる。この機構は、並列実行されるプロセスを使用することによって引き出される時間上の利点を無駄にしないために迅速である必要がある。
【０００６】
上述した同期を実施するにあたり、「バリア機構」と呼ばれるソフトウェアの性質を持つ機構が知られている。この機構は、以下で説明する同じ主要図に沿うさまざまなアルゴリズムに基づくものとすることができる。
【０００７】
はじめに、１つのタスクを完了するように設計されているコンピュータプログラムがｎ個のプロセスを介して実行され、これらのプロセス自体もサブタスク全体を実行することができる。各サブタスクは、たとえば中間計算などのジョブステップを完了するように設計されている一連のブロックに分割される。そのため、さまざまに異なるプロセスのブロックまたは中間計算は並列実行される。１つのブロックを終了した各プロセスは、ほかのプロセスのほかの並列ブロックがすべて終了して自らがバリアに到達するまでバリア（同期バリア）で待ち状態となる。これは、すべてのプロセスがバリアに到達したときのみに、次のブロックが次のジョブステップで実行される。この原理については、タイムチャートを用いて以下で説明する。
【０００８】
図１は、バリア機構およびバリアの一般的動作を示す。メインタスクＴから始まり、プロセスマネージャＰＭがまずタスクＴをｎ個のサブタスクＳＴに分解する。このｎ個のサブタスクＳＴは、ｎ個のプロセスＰによって実行される。換言すると、複合的なメインタスクＴは複数の単一のサブタスクＳＴに分解され、これらのサブタスクのそれぞれが別々のプロセスによって完了される。
【０００９】
プロセスＰによって実行されるさまざまに異なるサブタスクＳＴから得られる結果は、メインタスクＴを完了するために最終的には統合される。
【００１０】
プロセスマネージャＰＭの概念は広い意味で解釈するべきであることに注意する。そのため、マネージャＰＭは必ずしもユニット自体である必要はない。実際に、プロセスマネージャは一般に、プロセス同士がサブタスクを互いに分類することができるように、コンピュータプログラムが受動または能動的な分割方法を実装する処理能力と考えることができる。処理能力は、プロセスのうちの１つによって決定される暗黙的なものか、ユーザがあらかじめ定義した一区分に相当することもある。
【００１１】
上で言及したように、１つのタスクを多数のプロセスＰｊに分解する際に、このさまざまなプロセスの並列実行に同期が必要となる。そのため、ｎ個のプロセス自体もブロックＢに分割され、時間内に順次実行されていく。同時に実行されている（かつさまざまなプロセスＰに属する）ブロックＢの部分集合は、ジョブステップＷを構成する。その結果、同一列ｉのブロックＢの各集合は別々のジョブステップＷを構成する。
【００１２】
Ｗｉと表記している列ｉのジョブステップのブロックＢｉは、並列実行される。さまざまなプロセスＰ１に属するブロックＢを実行する時間ｔはさまざまに異なる。前述の同期を行うため、ブロックＢをバリアＢＳ（１００）で同期させる。各プロセスＰが実行中のブロックＢｉを実行し終わると、このバリアＢＳ（１００）は各プロセスＰから呼び出される。次列のブロックＢｉ＋１への移行を許可するのはこのバリアＢＳ（１００）であり、これは、実行中のブロックＢｉすべてがバリアに「到達」したときのみ、すなわちこのバリアに実行が終了したことを通知したときのみに許可される。
【００１３】
終了した第１のブロックＢ、すなわち最短の実行時間ｔのブロックは、要求によってバリアＢＳ（１００）に自らのジョブが終了したことを通知するとともに、同じジョブステップで残っている実行中のブロック数を通知する。一般に、ジョブステップでのブロック数は、プロセスＰの数ｎと同数である。
【００１４】
バリアは、通常カウンタを備えている。カウンタは、第１のブロックＢがバリアに到達すると初期化される。次に、カウンタは、別のブロックＢがバリアＢＳ（１００）に到達するたびにデクリメントされる。このように、バリアＢＳ（１００）はジョブステップの進行（または前進）、さらに正確には実行中の各ブロックＢの終了を推進することができる。最後のブロックＢ、つまり最長実行時間がｔであるブロックがバリアＢＳ（１００）に到達すると、このバリアは各プロセスＰに情報を与えて次のジョブステップＷに移ることを許可する。また、次のこのジョブステップＷは、並列実行されてさまざまなプロセスＰに属するブロックＢで構成される。次のこのジョブステップでは、バリア機構ＢＳ（１００）は前のものと同じである。これが各ジョブステップで繰り返され、プロセスＰが終了するまで続けられる。そのためタスクＴは、プロセスＰの結果を再編成することによって完了する。
【００１５】
このようなアルゴリズムは、プロセスとブロックとバリアとの間に特定数の相互作用を必要とする。これらの相互作用は、特に、バリアの初期化、ブロックがジョブを終了した際にバリアに与える情報、すべてのサブプロセスが実行中のブロックを終了したことの確認を含み、これについては後の説明文で詳述する。これらの相互作用がソフトウェアの性質を持つバリアで管理される場合、この相互作用は比較的遅い上に伝送帯の消費量は非常に多い。
【００１６】
先行技術に関する図２は、周知のバリアＢＳ（１００）の実装を示す。周知の機構はソフトウェアに実装される。したがって、バリアＢＳ（１００）を定義するデータは、コンピュータ（またはその他のコンピューティングデバイス）のＲＡＭメモリ（２０２）（英語のＲａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）に格納され、さまざまに異なるプロセスＰはこのＲＡＭメモリ（２０２）に（読み取り／書き込み、Ｒ／Ｗから）アクセスして前記バリアＢＳ（１００）と相互に作用する。このアクセスは、アドレス空間およびアドレスＡＤＲ（のちに詳述）によって行う。アクセスには、先ほど説明したように、バリアＢＳ（１００）の初期化（カウンタの初期化を含む）、同じジョブステップＷでブロックＢがジョブを終了するたびにバリアＢＳ（１００）に情報を与えること、すべてのプロセスＰが実行中のジョブステップＷのブロックＢを終了したかどうかを確認することなどが含まれる。これらの関数を実行するように設計されているプログラム自体も、特に関数ライブラリを呼び出すことによってＲＡＭで動作する。
【００１７】
アドレス空間は、独立したセグメントに区分することができる。セグメントとは一般に、次の２つの値によって定義されるメモリセグメントのことである。
−  このセグメントが始まるアドレス（基本アドレス）、および
−  セグメントのサイズ。
【００１８】
したがって、１つのセグメントが１つの（物理的または仮想の）主メモリに連続したアドレス範囲を構成する。
【００１９】
図２は、複数のプロセッサＰＺ１〜ＰＺｙ（２００）と、メモリへのアクセスマネージャＣＡＣＨＥ  ＣＯＨＥＲ  ＭＧＲ（２０６）と、ソフトウェアの性質を持つバリアＢＳ（１００）のあるプログラム領域を含むＲＡＭメモリ（２０２）とを有するコンピューティングデバイスを示す。よって図２のデバイスは、マルチプロセスを処理することができる処理ユニットを有する。プロセスは、さまざまなプロセッサ、プロセッサのさまざまなコア（ｃｏｒｅｓ）、および／または実行スレッド（ｔｈｒｅａｄｓ）で実行される。処理ユニットは、これらのプロセッサに「アドレス空間」と呼ばれるものを与え、特にＲＡＭに対して与える。このアドレス空間には、特定のアドレスＡＤＲに関連する領域にソフトウェアによるバリアＢＳ（１００）を定義するコードおよびデータがあり、このアドレスは、この領域の最初のアドレスとすることができる。図２のデバイスはこのほか、タスクＴをｎ個のプロセスＰに分解するためであって、このプロセスＰ自体も一連のブロックＢに分割される上に定義したようなタイプのプロセス（２０８）のマネージャを有する。
【００２０】
先行技術のバリア（図２）によってさまざまなプロセスＰ間の同期を実現することができる。しかし、すでに述べたように、バリアがソフトウェア性質であることによって特定の要求に対して同期の実現が遅くなってしまう。実際に、１つのプロセスＰがこのバリアと相互に作用するたびに、バリアＢＳ（１００）の関数ライブラリが要求される。さらに、ライブラリの中では、バリアを更新するデータを読み取って書き込むためにメモリとの数々の相互作用が必要とされ、これはすべてのプロセスが集まるポイント（「バリア」）に到達するのを検知するまで続く。次に、いったんプロセスＰがバリアＢＳ（１００）に通知すると、プロセスＰはほかの実行中のブロックＢがジョブを終了したかどうかを知るためにバリアＢＳ（１００）に定期的に問い合わせる必要がある。
【００２１】
以上のことすべて、とりわけ上に挙げた数々の相互作用によって、ソフトウェアの性質を持つバリアＢＳ（１００）が遅くなり、伝送帯の消費量が多くなる。これによってクロックサイクルが失われることになり、さらに迅速にするためにマルチプロセスモードを使用することはなお困難になる。
【００２２】
さらに、それぞれが異なるプロセスに属するさまざまなブロックが同時にバリアに通知するということが生じるおそれがあり、そこからメモリアクセスの競合によって待ち時間および伝送帯の新たな問題が生じる（ＣＡＣＨＥ  ＣＯＨＥＲ  ＭＧＲによる競合の管理）。
【発明の概要】
【発明が解決しようとする課題】
【００２３】
本発明は、この状況を改善するものである。
【課題を解決するための手段】
【００２４】
そのために、本発明は、バリアを有するコンピューティングデバイスであって、メモリと、さまざまなプロセッサでマルチプロセスを処理することができ、プロセスによるブロックの並列実行を可能にする処理ユニットであって、前記ブロックが一連のジョブステップグループに関連する処理ユニットと、メモリに対して使用可能なアドレス空間を有するハードウェア回路であって、実行中のブロックの実行が完了したことを示す各プロセスからの呼び出しを受信することができ、各呼び出しがデータを含むハードウェア回路とを有するコンピューティングデバイスにおいて、前記ハードウェア回路が、実行中のジョブステップのブロック全体が実行されたときに、そのあとのジョブステップのブロックの実行を許可するように配置され、各呼び出しの前記データから引き出されるセグメントによってアドレス空間にアクセスするコンピューティングデバイスを紹介するものである。
【００２５】
一実施形態では、デバイスのハードウェア回路は、少なくとも１つの呼び出しのデータから引き出した処理を実行するためのマイクロプログラムを有する。この場合、この処理は特に、すべてのプロセスが実行中のジョブステップのブロックの実行が完了したことを表示したのを示す完了条件を確認するまで、各呼び出しへの応答を保留する段階を含んでもよい。完了条件が確認されると、つまりすべてのプロセスが実行中のジョブステップのブロックの実行が完了したことを表示したとき、ハードウェア回路はデータを出力することによって各呼び出しに応答することができ、プロセスに対してそのあとのジョブステップに移ることを許可する。
【００２６】
別の実施形態では、上述の処理は、最初の呼び出しからプロセス数を抽出したのち、完了条件を確認するまでほかの呼び出しからこの数を逆算する工程を含む。各呼び出しはこのプロセス数を示すことができることがわかる。
【００２７】
同じく、本発明は、プロセス階層での情報処理方法であって、
ａ．１つのタスクを一連のブロックからなるプロセスとして実行されるサブタスクに分解するステップと、
ｂ．バリアの物理マネージャに、プロセス数に関係するカウンタを備えるバリアを設定するステップと、
ｃ．各プロセスに、最初のブロックを実行中のブロックと定義してこれを実行するとともに、実行中のこのブロックの実行が終了した際に前記カウンタをデクリメントするために前記バリアにアクセスするステップと、
ｄ．実行中のブロックの実行が終了した各プロセスで前記バリアからの応答を待つステップであって、現在のブロックすべてが実行されていることをカウンタが示すと、この応答がカウンタに直接つながって発信されるステップと、
ｅ．現在のブロックすべてが実行されているときに、実行中のブロックを各プロセスの次のブロックに基づいて再度定義し、これらの新たな実行中のブロックでステップｃおよびｄを繰り返すステップ
とを含むタイプの情報処理方法を紹介するものである。
【００２８】
本発明のその他の特徴および利点は、以下の説明および添付の図面を検証すれば明らかになるだろう。
【図面の簡単な説明】
【００２９】
【図１】バリア機構の一般的動作を示す時間的なブロック図である。
【図２】先行技術のソフトウェアのバリアを実装する原理を示す図である。
【図３】メモリおよびさまざまなプロセッサでマルチプロセスを処理することができる処理ユニットを有するコンピューティングデバイスと、バリアマネージャを形成するハードウェア回路とを示す図である。
【図４】専用メモリおよびマイクロプログラムを有するバリアマネージャを形成するハードウェア回路を示す図である。
【図５】本発明の一実施形態によるバリアの自動化を示す図である。
【図６】本発明の一実施形態による演算原理のフローチャートである。
【発明を実施するための形態】
【００３０】
図面および以下の説明文は本質的に、確実性の要素を含む。そのため、この要素は本発明をさらによく理解する一助となるだけでなく、必要であれば本発明の定義にも寄与するものである。
【００３１】
出願者は、前述した先行技術の問題を解決するに至り、物理バリア、すなわちハードウェアによるバリアを提供する。次に、図３を参照しながらこのバリアについて説明する。図３は、このような物理バリア、すなわちハードウェアによるバリアを示している。このように、図３のコンピューティングデバイスは、ＲＡＭメモリ（２０２）と、さまざまなプロセッサＰＺ１〜ＰＺｙ（２００）でマルチプロセスを処理することができる処理ユニットと、前記ＲＡＭメモリ（２０２）とプロセッサＰＺ（２００）との間にあるメモリへのアクセスマネージャＣＯＨＥＲ  ＣＡＣＨＥ  ＭＧＲ（２０６）とを有する。
【００３２】
ここに記載する実施形態では、デバイスはこのほかに、バリアマネージャＨＢＭ（４００）を形成するハードウェア回路を有し、このマネージャは、専用メモリＤｅｄ＿ＭＥＭ（４０４）および図４に示すようなマイクロプログラムｍｉｃｒｏ−Ｐｒｏｇ（４０２）を有する。この段階では、マネージャＨＢＭ（４００）はデータの出力部「Ｄ（ｕｎｉｄｉｒ、一方向）」を１つしか必要としない。実際には、これは特に接続されるバスとの互換性（読み取り／書き込み、Ｒ／Ｗ）を理由とする１つの入出力部のことである。
【００３３】
記載する実施形態では、アドレスとデータとのハードウェア回路（ＨＢＭ、４００）へのリンクは、メモリへのアクセスマネージャＣＯＨＥＲ  ＣＡＣＨＥ  ＭＧＲ（２０６）を回避している。
【００３４】
一般に、バリアマネージャＨＢＭ（４００）は、バリアＢＳ（１００）に参加するプロセスＰと直接相互に作用する。相互に作用したのち、専用メモリＤｅｄ＿ＭＥＭ（４０４）にデータを格納することができる。
【００３５】
バリアマネージャＨＢＭ（４００）は、たとえばチップセット（ｃｈｉｐｓｅｔまたはその他）内のプロセッサ、または図３に示すようにハードウェア回路などの補足的コンポーネントの中に見られる。マネージャＨＢＭ（４００）は、バリアＢＳ（１００）に参加してこのマネージャを標的とするプロセスＰに属するあらゆるトランザクションに対してアクセス可能である必要がある。したがって、マネージャＨＢＭ（４００）は、そのメモリ空間を標的とするあらゆる要求からアクセスされたり呼び出されたりすることができる。これは、多数のアドレスが同じバリアＢＳ（１００）を標的とすることができるのと同じである（アドレス・エイリアシング（ａｄｄｒｅｓｓ  ａｌｉａｓｉｎｇ））。
【００３６】
換言すると、バリアＢＳ（１００）に対して要求を発信する各プロセスＰは、
−  この要求の重みの大きい部分に、バリアのアドレスを持ち、
−  重みの小さい部分に、追加データを持つ。
【００３７】
当然のことだが、これよりも重みの大きいまたは小さい部分（選択した重み）に、前述した情報（アドレスおよびデータ）の位置設定を自由に編成することができる。このように、要求のうちの重みの大きい部分は前記追加データを持ち、重みの小さい部分はバリアのアドレスを持つ。
【００３８】
追加データの例には、バリアＢＳ（１００）に参加するプロセスＰの数を挙げることができる。プロセスＰはそれぞれ、同期に必要な情報を連絡して１つの同じバリアＢＳ（１００）を標的とすることができる。これらの情報は、専用メモリＤｅｄ＿ＭＥＭ（４０４）内のマイクロプログラムｍｉｃｒｏ−Ｐｒｏｇ（４０２）に格納したのちに、バリアマネージャＨＢＭ（４００）のマイクロプログラムｍｉｃｒｏ−Ｐｒｏｇ（４０２）によって処理することができる。
【００３９】
この原理を適用して、バリアマネージャＨＢＭ（４００）は、複数のバリアＢＳ（１００）を同時に管理することができる。特定の適用ではこの可能性が大きくなる。
【００４０】
次に、同期するために物理バリアを使用するｎ個のプロセスＰのグループを検討する。第１のステップでは、バリアＢＳ（１００）は初期状態にあり、ｎ個のプロセスＰのうちのいずれもバリアにアクセスしていない。プロセスＰは第１のジョブステップＷにあり、それぞれが第１のブロックＢを実行する（図１を参照）。上に説明したものとほぼ同じように、ブロックＢを終了した第１のプロセスＰは、要求によってバリアＢＳ（１００）に通知する。この要求は重みの小さい部分に、バリアに参加するプロセスＰの数ｎを有し、このバリアは、第１の要求を受信するとバリアＢＳ（１００）のカウンタＣＮＴ（４０６）を始動させることができる。バリアＢＳ（１００）が作動モード（または状態）に移るのは、この第１の要求を受信するときである。そこから、要求がバリアＢＳ（１００）を標的とするたびに、バリアマネージャＨＢＭ（４００）はカウンタＣＮＴ（４０６）をデクリメントする（逆算）。バリアマネージャＨＢＭ（４００）がバリアＢＳ（１００）に参加するｎ個のプロセスＰから発行される要求をすべて受信したときのみ、データＤからの要求に応答する。このときに、同期が有効とみなされる。そのためプロセスＰの集合は、次のジョブステップＷに移ることを許可される。
【００４１】
ブロックがいったん終了すると、それに対応するプロセスはジョブステップＷの進行を決定するのにバリアＢＳに１度しか問い合わせないことがわかる。これは、バリアＢＳがメモリＤｅｄ＿ＭＥＭ（４０４）自体のスペースに、すでに受信した要求数を格納することができるためである。各プロセスは、バリアＢＳからの応答を受信するまで待ち状態となる。したがって、バリアにプロセスに関して（定期的にまたは不定期に）何度も問い合わせる必要はない。さらに、各問い合わせは、伝送帯の観点からすればそれほどコストはかからない。これは、本発明によって得られる伝送帯に関する利点によるものである。
【００４２】
ついでにここで、ブロックＢの実行時間ｔは必ずしもこのブロックのバリアＢＳへの到達と関連している必要はないことに気づく。実際に、通信路がスケジューリングされていないために起こる競合または調停の競争上の理由から、第１の要求よりもあとに発信された第２の要求が前記第１の要求よりも先にバリアＢＳに到達することができる。しかしながら、これは本発明によるバリアの動作を何ら変更するものではない。簡略化のため、本明細書では、第２のプロセスよりも実行時間ｔが短い第１のプロセスから発信された要求が、第２のプロセスから発信された要求よりも先にバリアＢＳに到達すると考える。
【００４３】
本発明の一実施形態では、バリアＢＳ（１００）のメモリ空間は、コンピュータのＰＣＩバス専用のメモリ空間に実装される。
【００４４】
この例では、「要求」と呼んでいるものがＰＣＩバスのメモリ空間のアドレスとともにプロセッサのインストラクション「ロード（ｌｏａｄ）」からくる。この要求は、バスシステムに関するメッセージである。このメモリ空間によって、プロセスＰおよび／または要求とバリアＢＳ（１００）との間の迅速な相互作用が可能になる。
【００４５】
複数のバリアが要求された場合、バリアマネージャが、たとえばメモリページなどのメモリセグメントと関連のあるこれらのバリアを管理することが有利となることがある。この複数のバリアを同じ１つの回路または異なる回路に接続することができる。
【００４６】
このように、ＰＣＩメモリは、バリア同士の間で保護されたアクセスを提供することができるとともに、各バリアに対して所定サイズのメモリページを設定するのに十分な空間を提供する。
【００４７】
たとえば、６４ＫＢ（キロバイト）のページには、１つの要求（呼び出し）の１６の重みの小さい部分（ビット）を使用してデータ（特にＡＤＲ）を伝送することができる。したがって、バリアマネージャＨＢＭ（４００）は、Ｍ×６４ＫＢページを収容することができ、ここでのＭはバリアＨＢＭのマネージャ（４００）に実装される物理バリアＢＳ（１００）の数である。Ｍは特に５１２とすることができ、これは合計３２ＭＢ（メガバイト）のメモリ空間に及ぶ。この３２ＭＢはもちろん仮想タイプのメモリに相当するため、「実際の」ＭＢとして考えるものではないが、同期するアプリケーションからは単純にそのようなものとして見られる。以下の表は、メモリにアクセスするのに使用することができる要求の構成例を示す（Ｒ［Ｊ．．Ｉ］＝Ｉ〜Ｊの要求のビット）。この要求は特に、バリアＢＳ（１００）のアドレスと、実行中のコマンド（これについては後述する）と、１つまたは複数の階層（以下に詳述）での同期の場合は指示と、同期およびバリアに参加するプロセス数とを含む。
0005626690.tif 000002
【００４８】
ビットＲ［８］では、値０または１はそれぞれ１つの階層での同期および２つの階層での同期に相当する。上位の同期階層については以下の実施例で詳述する。
【００４９】
図５は、同期マネージャＨＢＭ（４００）の実施例に関し、上位の階層の同期、さらに正確にはここでは２つの階層での同期を管理することができる。プロセスＰの複数の異なるグループが同期する必要があり、それぞれのグループが１つの物理（またはハードウェアの）バリアＢＳ（１００）を有するとき、２つの階層での同期を使用することができる。この場合、同期マネージャＨＢＭ（４００）は、各グループが単独で同期する必要がある場合に管理する必要があり、グループ全体はこのグループ間で同期する必要がある。
【００５０】
準備完了状態ＰＲＥにあるバリアＢＳ（１００）が受信した第１の要求は、１つの階層で同期するのか２つの階層で同期するのかを示す情報を重みの小さい部分に含んでいる。１つの階層で同期する場合、この同期は１つの階層のバリアで管理されるか、さらに正確には１つの階層（状態ＡＣＴ＿１＿Ｎ）用に設計されたバリアの作動状態ＡＣＴによって管理される。逆に２つの階層で同期する場合は、同じこのバリアは２つの階層（状態ＡＣＴ＿２＿Ｎ）用に設計された作動状態ＡＣＴとなり、この場合この動きは次のようになる。
【００５１】
すべての要求がバリアＢＳ（１００）に受信された場合、このバリアは、バリアＢＳ（１００）に参加するすべてのプロセスＰの中からマスターＭとしてプロセスＰのうちの１つを選択する。はじめに、マスターＭの要求のみが、それがグループのマスターであることを示す特別なデータＤによって応答を受ける。それを基にマスターは、同期の第２階層を自由に完了することができる。この同期の第２階層は、たとえばソフトウェアの性質を持つバリアＢＳ（１００）とすることができる。マスターＭはこの同期の第２階層を終了すると、バリアＢＳ（１００）に最後の要求を伝送する。この最後の要求への応答には、バリアはバリアＢＳ（１００）に参加するほかの（マスターＭを含む）プロセスＰから発行されるすべての要求に応答し、準備完了状態ＰＲＥに戻る。マスターＭは動態で、各同期で再定義される。
【実施例１】
【００５２】
図５に示すバリアのさまざまな自動性状態は以下のとおりである。
−  スタンバイ状態ＩＮＡＣＴ、
−  準備完了状態ＰＲＥ、
−  １つの階層で同期する作動状態ＡＣＴ＿１＿Ｎ、
−  ２つの階層で同期する作動状態ＡＣＴ＿２＿Ｎ、
−  同期状態ＳＹＮＣ、
−  取り消し状態ＡＮＮ。
【００５３】
各状態について以下に説明する。
【００５４】
ＩＮＡＣＴ
物理バリアは、スタンバイ状態で作動していない。唯一可能性のある移行は、移行Ｔ０である。この移行は、バリアを作動させるためのいわゆるＰＲＥＰＡ（コマンド＝ＰＲＥＰＡという準備完了状態ＰＲＥにするコマンドを含む要求をバリアが受信することに相当する。バリアは準備完了状態ＰＲＥに移る。
【００５５】
ＰＲＥ
物理バリアは、バリアに参加するプロセスの要求を受信する準備ができている状態である。
【００５６】
記載した実施形態によれば、３つの移行が起こる可能性がある。Ｔ１、Ｔ２またはＴ１３である。要求に従って、バリアは実行すべき移行を選択する。
移行Ｔ１：この移行は、バリアを初期化するための記録コマンドＥＮＲＥＧＩＳＴＲＥＲ（コマンド＝ＥＮＲＥＧＩＳＴＲＥＲ）を含む要求をバリアが受信することに相当する。この要求は重みの小さい部分に、１つの階層のみで同期する（ＳＹＮＣ＿１＿Ｎ）必要があるという情報を含んでいる。そのためバリアは作動し、１つの階層で同期する作動状態ＡＣＴ＿１＿Ｎとなる。
移行Ｔ２：Ｔ１と同じように、この移行は、バリアを初期化するための記録コマンドＥＮＲＥＧＩＳＴＲＥＲを含む要求をバリアが受信することに相当する。ただし、この要求は重みの小さい部分に、２つの階層で同期する（ＳＹＮＣ＿２＿Ｎ）必要があるという情報を含んでいる。バリアは作動して２つの階層で同期する作動状態ＡＣＴ＿２＿Ｎに移る。
移行Ｔ１３：この移行は、バリアを作動させずにスタンバイ状態ＩＮＡＣＴ（上記を参照）に移るための切断コマンドＥＴＥＩＮＤＲＥ（コマンド＝ＥＴＥＩＮＤＲＥ）を含む要求のバリアの受信に相当する。
【００５７】
ＡＣＴ＿１＿Ｎ
バリアは１つの階層のみで同期を実行する。この状態からの移行は複数存在する。
移行Ｔ３：この移行は、バリアＢＳ（１００）が記録コマンドＥＮＲＥＧＩＳＴＲＥＲ（コマンド＝ＥＮＲＥＧＩＳＴＲＥＲ）を含むｎ個のプロセスＰの要求を受信するたびに起こり、これは所定のタイムリミットとなる前に起こる（詳細は後述）。内部カウンタＣＮＴ（４０６）はＴ３（ＣＮＴ＞閾値）に移行するたびにデクリメントされる。Ｔ３は、同じジョブステップＷで現在のブロックＢが終了するたびに起こる移行に概ね相当する。ブロックＢは、現在のブロックＢがすべて実行されたことをカウンタＣＮＴ（４０６）が示すまで（ＣＮＴ＝閾値）、バリアＢＳ（１００）の階層で「蓄積される」（Ｔ３）。移行Ｔ４：この移行は、現在のブロックＢがすべて実行されたことをカウンタＣＮＴ（４０６）が示すと起こる。バリアは最後の記録コマンドＥＮＲＥＧＩＳＴＲＥＲ（コマンド＝ＥＮＲＥＧＩＳＴＲＥＲ）を受信し、カウンタは閾値（ＣＮＴ＝閾値）までデクリメントされる。バリアＢＳ（１００）に参加するプロセスＰから発行される要求に応答する。この応答は、同期が成功したことを示すものである。バリアＢＳ（１００）は準備完了状態ＰＲＥに戻る。
移行Ｔ５：カウンタは、所定のタイムリミットとなる前に閾値に達していなければならない。タイムリミットの閾値をどのように決定するかはさまざまであり、適用例によって決定する。この所定のタイムリミットを超えると、移行Ｔ５により同期が取り消される。オプションとして、たとえばエラーメッセージを返すか、タイムリミットの延長を命令する。タイムリミットは、時間の単位で（たとえばμｓ）逆算することができるタイマー（「時系列カウンタ」）を備える制御ユニットにあらかじめ登録することができる。
移行Ｔ１４：この移行は、バリアを作動させずにスタンバイ状態ＩＮＡＣＴに移るための切断コマンドおよびＥＩＮＤＲＥ（コマンド＝およびＥＩＮＤＲＥ）を含む要求のバリアの受信に相当する。
【００５８】
ＡＣＴ＿２＿Ｎ
バリアは、２つの階層で同期を実行する。この状態からの移行は複数存在する。
移行Ｔ６：移行Ｔ３と同様（上記を参照）。
移行Ｔ７：はじめは移行Ｔ７はＴ４と同じである。実際にＴ７は、現在のブロックＢがすべて実行されたことをカウンタＣＮＴ（４０６）が示すと起こる。バリアは最後の記録コマンドＥＮＲＥＧＩＳＴＲＥＲ（コマンド＝ＥＮＲＥＧＩＳＴＲＥＲ）を受信し、カウンタはさらにデクリメントされて閾値（ＣＮＴ＝閾値）に達する。移行Ｔ４とは異なり、ここではプロセスＰから発行される全要求には応答せずに、そのうちの１つのみに応答する。この応答は、プロセスＰのうちのいずれか任意のものをマスターＭとして選ぶことである。そのため、バリアは同期状態ＳＹＮＣへと進む（詳細は後述）。Ｔ７では、所定のタイムリミットは再び初期化される。
移行Ｔ８：移行Ｔ５と同様（上記を参照）。
移行Ｔ１５：移行Ｔ１３と同様（上記を参照）。
【００５９】
ＳＹＮＣ
以下の３つの移行が起こり得る。
移行Ｔ９：マスターＭは、所定のタイムリミット（ＣＮＴ＝閾値）になる前に記録コマンドＥＮＲＥＧＩＳＴＲＥＲ（コマンド＝ＥＮＲＥＧＩＳＴＲＥＲ）を含む要求を受信する。プロセスＰ全体に応答する。この応答は、同期の成立を示すものである。バリアＢＳ（１００）は準備完了状態ＰＲＥに戻る。
移行Ｔ１０：移行Ｔ５と同様（上記を参照）。
移行Ｔ１６：移行Ｔ１３と同様（上記を参照）。
【００６０】
ＡＮＮ
同期を完了させるための最適時間（許容できる最長時間）を設定するため、バリアＢＳ（１００）は時系列カウンタとも呼ばれるタイマーを備えている。このタイマーは環境設定が可能で、タイムリミットを記述することができる。タイマーは、最初の要求を受信すると逆算を開始する（単位は通常μｓ）。すると時間が流れ出す。最後の要求がバリアＢＳ（１００）に受信される前に所定のタイムリミットを超えると、このバリアは取り消し状態ＡＮＮに移行する。
【００６１】
タイムリミットはバリアによって異なり、さらに正確にはバリアのさまざまな状態、特にＡＣＴ＿１＿Ｎ、ＡＣＴ＿２＿Ｎ、ＳＹＮＣによって変化する。
【００６２】
換言すると、バリアＢＳ（１００）が取り消し状態ＡＮＮになったとすれば、それは前の状態ですべての要求を受信する前にタイムリミットを超えたことが原因である。よって、バリアは同期のエラーメッセージによってすでに受信した要求に対して応答する。
【００６３】
実際には、このタイムリミットはプログラムすることができる。特にプロセッサの「タイムアウト」と競合しないように、背景に応じてこれよりも長いリミットを設定してもよい。
【００６４】
取り消し状態ＡＮＮには次の３つの移行がある。
移行Ｔ１１：記録コマンドＥＮＲＥＧＩＳＴＲＥＲ”（コマンド＝ＥＮＲＥＧＩＳＴＲＥＲ）を含む要求が受信される。この場合、上に記載したようなエラーメッセージによって要求に対して応答する。
移行Ｔ１２：準備完了状態ＰＲＥ（コマンド＝ＰＲＥＰＡ）に戻ることを示すコマンドを含む要求を受信する。バリアは準備完了状態ＰＲＥ（上記を参照）に戻る。これによって、たとえばプロセス（Ｐ）全体が以前のジョブステップ（Ｗ）の実行終了時に遡る。
移行Ｔ１７：移行Ｔ１３と同様（上記を参照）。
【００６５】
図６のフローチャートは、本発明の実施形態によるバリアＢＳの主な演算を再度説明するものである。このフローチャートは、準備完了状態ＰＲＥ（演算７００）にあるバリアＢＳ（１００）を示す。ブロックＢを終了した第１のプロセスＰは、（呼び出しによって）マネージャＨＢＭ（４００）（演算７０２）を標的とする要求でバリアＢＳ（１００）に通知する。要求は同期の階層に関する情報を含んでいる（たとえばＡＣＴ＿１＿ＮまたはＡＣＴ＿２＿Ｎにはコマンド＝ＥＮＲＥＧＩＳＲＴＥＲ）。カウンタＣＮＴ（４０６）は初期化され（通常はｎ＝プロセスＰの数に初期化）、バリアＢＳ（１００）は前記第１のプロセスＰに対応する識別子ＳＶＥ＿ＩＤ＿Ｒｅｑを格納するとともに、同期の階層に関する情報ＳＶＥ＿Ｎを格納する（演算７０４）。作動中のバリアＢＳ（１００）は、ほかのプロセスＰからの次の呼び出しを待つ（演算７０６）。所定のタイムリミットを超えるか、バリアＢＳ（１００）が切断コマンド（コマンド＝およびＥＩＮＤＲＥ）を含む要求を受信すると（演算７１４）、どちらの場合もバリアは取り消し状態ＡＮＮまたはスタンバイ状態ＩＮＡＣＴへと移る（演算７１６）。ただし、別のプロセスＰがバリアに実行中のブロックが終了したことを通知すると（タイムリミットｔ＿Ｌｉｍを超えることもコマンド＝およびＥＩＮＤＲＥもなしに）、カウンタＣＮＴ（４０６）はデクリメントされる（演算７０８、ｍ＝ジョブステップＷが実行中でブロックＢがまだ終了していないプロセス数）。デクリメントと同じく、バリアは、最後にバリアＢＳ（１００）に通知したプロセスＰに対応する識別子ＳＶＥ＿ＩＤ＿Ｒｅｑを格納する（演算７０８）。次にバリアＢＳ（１００）は、カウンタＣＮＴ（４０６）が閾値に達したかどうかを確認する（演算７１０および７１２）。達していなければ（演算７１０；ＣＮＴ＞０）、バリアは待ち状態に戻る（演算７０６）。達していれば（演算７１２；ＣＮＴ＝０）、バリアは同期するために先に進む（設定階層に応じて演算７０４）。１つの階層に設定された同期ののち（演算７２０；ＡＣＴ＿１＿Ｎ）、バリアは、たとえば次のジョブステップＷに進めるコマンドを含むデータＤによって各プロセスＰに応答する（演算７４０）。同期の階層が２つの階層に設定されているとき（演算７３０；ＡＣＴ＿１＿Ｎ）、つまりたとえばプロセスＰの複数のグループに対して設定されているとき（上記を参照）、バリアＢＳ（１００）は、実行中のプロセスＰの中から１つのマスターＭを選び（演算７３２；ＣＨ＿Ｍ）、データＤで応答する（演算７４０）前に、第２の同期を実行する（演算７３４；ＳＹＮＣ）。同期は、準備完了状態ＰＲＥ（コマンド＝ＰＲＥＰＡ）に戻るか、バリアが作動しなくなった時点（コマンド＝およびＥＩＮＤＲＥ）で終了となる（演算７５０）。
【００６６】
当然ながら、本発明はこれまでに記載した実施形態に限定されるものではなく、添付の特許請求の範囲内で当業者が検討し得るあらゆる実施形態を含むものである。
【００６７】
したがって、記載した実施形態では、プロセスを同期するのにバリアＢＳを１つのみ使用する。コンピュータシステムに複数のバリアＢＳを搭載すると有用となり、特にプロセスの各グループが別々のタスクの実行を同時に行うような複数のグループを同期するのに有用となる。たとえば、コアが１６個のマシンでの科学技術計算では、コアを各８個ずつ使用する独立した２つの計算を検討することができるため、８つのプロセスが２グループとなり、各プロセスが別々のコアで実行される。この例では２つのバリアが必要となる。
【００６８】
複数のバリアＢＳを使用すると、これらのバリアは当然ながら同じ１つのコンポーネントまたは複数の異なるコンポーネントに実装される。実際に、デバイスは複数のハードウェア回路を有することができ、各呼び出しの前記データから引き出されたセグメントによってアドレス空間にアクセスする。この場合、それぞれのハードウェア回路が１つの同じ回路に接続されるか、別の回路に接続されるように設定することができる。
【００６９】
また、ソフトウェアタイプのバリアと本発明によるバリアであるハードウェア回路とを混合させたものを容易に考案できることがわかる。ここに記載したコンピューティングデバイスはこのほかに、ソフトウェアによるバリアを有して前記ハードウェア回路と併用して演算することもできる。
【図１】
0005626690.tif 000003
【図２】
0005626690.tif 000004
【図３】
0005626690.tif 000005
【図４】
0005626690.tif 000006
【図５】
0005626690.tif 000007
【図６】
0005626690.tif 000008