(57)【要約】【課題】構成が簡易で処理負荷の少ないバリア同期機構を実現すること。【解決手段】一つ以上のハードウェアスレッドの同期ポイントへの到着を示すビットマップをチェックし、前記一つ以上のハードウェアスレッドがすべてバリア同期ポイントに到着した場合、ボトム部同期完了をバリア同期対象の複数のバリアバンクに通知し、前記ボトム部同期完了を受信すると、バリア同期対象となる前記複数のバリアバンクのうち、同期が完了していないバリアバンクの数を示す未着カウンタを１減算し、前記未着カウンタが０となったとき、同期完了しているか否かを示すバリア状態を同期完了を示す値とする。【選択図】図３
2014021820.tif 000002
【特許請求の範囲】
【請求項１】
複数のバリアバンクを有し、前記複数のバリアバンクの同期を行う情報処理装置であって、
前記複数のバリアバンクの各バリアバンクは、
スレッドを実行する一つ以上のハードウェアスレッドと、
前記複数のバリアバンクのバリア同期を行うバリア同期機構と、
を備え、
前記バリア同期機構は、
同期完了しているか否かを示すバリア状態と、
前記一つ以上のハードウェアスレッドの同期ポイントへの到着を示すビットマップを備えるボトム部と、
バリア同期対象となる前記複数のバリアバンクのうち、同期が完了していないバリアバンクの数を示す未着カウンタを備えるトップ部と、
を備え、
前記ボトム部は、前記ビットマップをチェックし、前記一つ以上のハードウェアスレッドがすべてバリア同期ポイントに到着した場合、ボトム部同期完了を前記複数のバリアバンクに通知し、
前記未着カウンタは前記ボトム部同期完了を受信すると、前記未着カウンタを１減算し、
前記トップ部は、前記未着カウンタが０となったとき、前記バリア状態を同期完了を示す値とすることを特徴とする情報処理装置。
【請求項２】
複数のバリアバンクを有し、前記複数のバリアバンクの同期を行う情報処理装置であって、
前記複数のバリアバンクの各バリアバンクは、
スレッドを実行する一つ以上のハードウェアスレッドと、
前記複数のバリアバンクのバリア同期を行うバリア同期機構と、
を備え、
前記バリア同期機構は、
同期完了しているか否かを示すバリア状態と、
前記一つ以上のハードウェアスレッドの同期ポイントへの到着を示すビットマップおよびボトム部同期完了の通知先を示すボトム部ターゲット情報を備えるボトム部と、
ボトム部同期完了を送信していないバリアバンクの数を示すミドル部未着カウンタおよびミドル部同期完了の通知先を示すミドル部ターゲット情報を備えるミドル部と、
ミドル部同期完了を送信していないバリアバンクの数を示すトップ部未着カウンタを備えるトップ部と、
を備え、
前記ボトム部は、前記ビットマップをチェックし、前記一つ以上のハードウェアスレッドがすべてバリア同期ポイントに到着した場合、ボトム部同期完了を前記ボトム部ターゲット情報で指定されるバリアバンクに通知し、
前記ミドル部未着カウンタは前記ボトム部同期完了を受信すると、前記ミドル部未着カウンタを１減算し、
前記ミドル部は、前記ミドル部未着カウンタが０となったとき、ミドル部同期完了を前記ミドル部ターゲット情報で指定されるバリアバンクに通知し、
前記トップ部未着カウンタは前記ミドル部同期完了を受信すると、前記トップ部未着カウンタを１減算し、
前記トップ部は、前記トップ部未着カウンタが０となったとき、前記バリア状態を同期完了を示す値とすることを特徴とする情報処理装置。
【請求項３】
前記ミドル部は、前記ミドル部同期完了に対する処理を行う処理部を示す第１の処理部フラグをさらに備え、
前記ミドル部未着カウンタは、前記ボトム部同期完了、または前記ミドル部を示す前記第１の処理部フラグが付加されたミドル部同期完了を受信すると、前記ミドル部未着カウンタを１減算し、
前記ミドル部は、前記ミドル部未着カウンタが０となったとき、ミドル部同期完了を前記ミドル部ターゲット情報で指定されるバリアバンクに前記第１の処理部フラグを付加して通知し、
前記トップ部未着カウンタは、前記トップ部を示す前記処理部フラグが付加された前記ミドル部同期完了を受信すると、前記トップ部未着カウンタを１減算することを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記バリア同期機構は、前記バリア同期機構が行うバリア同期の種類を示すバリアタイプをさらに備え、
前記ボトム部は、前記ボトム部同期完了に対する処理を行う処理部を示す第２の処理部フラグをさらに備え、
前記バリアタイプがバリアバンク内の同期を示す場合、
前記ボトム部は、前記ビットマップをチェックし、前記一つ以上のハードウェアスレッドがすべてバリア同期ポイントに到着した場合、前記バリア状態を同期完了を示す値とし、
前記バリアタイプがバリアバンク間の同期を示す場合、
前記ボトム部は、前記ビットマップをチェックし、前記一つ以上のハードウェアスレッドがすべてバリア同期ポイントに到着した場合、ボトム部同期完了を前記ボトム部ターゲット情報で指定されるバリアバンク前記第２の処理部フラグを付加して通知し、
前記ミドル部未着カウンタは、前記ミドル部を示す前記第２の処理部フラグが付加されたボトム部同期完了、または前記ミドル部を示す前記第１の処理部フラグが付加されたミドル部同期完了を受信すると、前記ミドル部未着カウンタを１減算し、
前記ミドル部は、前記ミドル部未着カウンタが０となったとき、ミドル部同期完了を前記ミドル部ターゲット情報で指定されるバリアバンクに前記第１の処理部フラグを付加して通知し、
前記トップ部未着カウンタは、前記トップ部を示す前記第２の処理部フラグが付加されたボトム部同期完了、または前記トップ部を示す前記第１の処理部フラグが付加された前記ミドル部同期完了を受信すると、前記トップ部未着カウンタを１減算することを特徴とする請求項３記載の情報処理装置。
【請求項５】
複数のバリアバンクを有し、前記複数のバリアバンクの同期を行う情報処理装置が実行するバリア同期方法であって、前記複数のバリアバンクの各バリアバンクは、  スレッドを実行する一つ以上のハードウェアスレッドと、前記複数のバリアバンクのバリア同期を行うバリア同期機構と、を備え、
前記バリア同期機構は、
前記一つ以上のハードウェアスレッドの同期ポイントへの到着を示すビットマップをチェックし、前記一つ以上のハードウェアスレッドがすべてバリア同期ポイントに到着した場合、ボトム部同期完了を前記複数のバリアバンクに通知し、
前記ボトム部同期完了を受信すると、バリア同期対象となる前記複数のバリアバンクのうち、同期が完了していないバリアバンクの数を示す未着カウンタを１減算し、
前記未着カウンタが０となったとき、同期完了しているか否かを示すバリア状態を同期完了を示す値とする
ことを特徴とするバリア同期方法。
【請求項６】
複数のバリアバンクを有し、前記複数のバリアバンクの同期を行う情報処理装置が実行するバリア同期方法であって、前記複数のバリアバンクの各バリアバンクは、  スレッドを実行する一つ以上のハードウェアスレッドと、前記複数のバリアバンクのバリア同期を行うバリア同期機構と、を備え、
前記バリア同期機構は、
前記一つ以上のハードウェアスレッドの同期ポイントへの到着を示すビットマップビットマップをチェックし、前記一つ以上のハードウェアスレッドがすべてバリア同期ポイントに到着した場合、ボトム部同期完了を前記ボトム部同期完了の通知先を示すボトム部ターゲット情報で指定されるバリアバンクに通知し、
前記ボトム部同期完了を受信すると、前記ボトム部同期完了を送信していないバリアバンクの数を示すミドル部未着カウンタを１減算し、
前記ミドル部未着カウンタが０となったとき、ミドル部同期完了を前記ミドル部同期完了の通知先を示すミドル部ターゲット情報で指定されるバリアバンクに通知し、
前記トップ部未着カウンタは前記ミドル部同期完了を受信すると、前記ミドル部同期完了を送信していないバリアバンクの数を示すトップ部未着カウンタを１減算し、
前記トップ部未着カウンタが０となったとき、同期完了しているか否かを示すバリア状態を同期完了を示す値とする
ことを特徴とするバリア同期方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置およびバリア同期方法に関する。
【背景技術】
【０００２】
現在、コンピュータにおいて、処理を高速に行うために並列処理が行われている。
コンピュータにおける「並列処理」は、複数のプロセサコアで1つのタスクを動作させることである。問題を解く過程はより小さなタスクに分割できることが多いという事実を利用して処理効率の向上を図る手法である。
【０００３】
1つのタスクを並列処理するには、それぞれのプロセサコアの処理を待ち合わせる「同期」が必要となる。並列処理におけるバリアとは同期方法の一つであり、ソースコード中でスレッドやプロセスがある箇所で実行を停止することにより待ち合わせを行い、他の全てのスレッドがバリアに到達したら実行を再開するものを示す。
【０００４】
図１Ａ〜Ｃは、従来のバリアバンク内同期を示す図である。
図１Ａは初期状態、図１Ｂは同期中、図１Ｃは同期完了を示す。
最小のバリア同期の範囲であるバリアバンク１００１には、プロセッサコア１００２−ａ（ａ＝１〜４）およびバリア同期機構１００３が設けられている。バリアバンク１００１は、Central Processing Unit（ＣＰＵ）内に設けられている。
【０００５】
プロセッサコア１００２−ａは、同時マルチスレッディング機能を有しており、スレッドを実行するハードウェアスレッド１００４−ａ−ｂ（ｂ＝１、２）を備える。
【０００６】
図１では、１つのプロセッサコアが２つのハードウェアスレッドを提供している。ソフトウェアスレッドを発行するソフトウェア（例えば、オペレーティングシステム（ＯＳ））からは、各ハードウェアスレッド１００４−ａ−ｂは、論理的なＣＰＵ（仮想ＣＰＵ）として扱われる。
【０００７】
バリア同期機構１００３は、バリア状態１００５およびビットマップ群１００６を有する。
バリア状態１００５は、バリア同期の制御に用いられる情報である。バリア状態１００５の値は、“０”または“１”である。
【０００８】
ビットマップ群１００６は、複数のビットマップを含む。ビットマップは、ハードウェアスレッド１００４のバリア同期ポイントへの到着を示す情報である。ビットマップは、バリアバンク１００１内のハードウェアスレッド１００４と同じ数だけ用意されており、各ビットマップは、各ハードウェアスレッド１００４に割り当てられる。すなわち、ビットマップは、割り当てられたハードウェアスレッド１００４のバリア同期ポイントへの到着を示す。ビットマップの値は、“０”または“１”である。
【０００９】
図１Ａに示す初期状態では、バリア状態１００５および全てのビットマップは、“０”である。
各ハードウェアスレッド１００４でスレッドが実行され、図１Ｂにおいて、ハードウェアスレッド１００４−１−１、１００４−３−１、１００４−４−２がバリア同期ポイントに到着したものとする。
【００１０】
ハードウェアスレッド１００４−１−１、１００４−３−１、１００４−４−２は、バリア状態１００５を読み出し、読み出した値を反転させた値をそれぞれ割り当てられたビットマップに書き込む。ここでは、ハードウェアスレッド１００４−１−１、１００４−３−１、１００４−４−２は、自身に割り当てられているビットマップに“１”を書き込む。
【００１１】
以下、同様にハードウェアスレッド１００４−１−２、１００４−２−１、１００４−２−２、１００４−３−２、１００４−４−１もバリア同期ポイントに到着し、自身に割り当てられているビットマップに“１”を書き込む。
【００１２】
図１Ｃにおいて、バリア同期機構１００３は、全てのビットマップが“１”となったことを検出すると、バリア状態１００５を“１”に変更する。
【００１３】
各ハードウェアスレッド１００４は、バリア状態１００５が書き込んだビットマップの値（すなわち、“１”）と同じになったことを確認し、次のバリア同期ポイントまで処理を実行する。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特開２００６−２５９８２１号公報
【特許文献２】特表２００４−５２９４１４号公報
【非特許文献】
【００１５】
【非特許文献１】山田海斗 他著、“階層グルーピング対応バリア同期機構の評価”、電子情報通信学会 発行、信学技報、Vol. 108、No. 28、ICD2008-20、pp. 19-24、2008年5月
【発明の概要】
【発明が解決しようとする課題】
【００１６】
従来、バリア同期は、集中型バリア同期管理機構により実現されている。
集中型バリア同期管理機構は、バリア同期を行うスレッド数が増大すると、バリア同期管理機構の複雑度が増大し、機構実現度が下がり、また同時に処理する要求数が増え、処理時間が長くなるという問題がある。
【００１７】
本発明の課題は、構成が簡易で処理負荷の少ないバリア同期機構を実現することである。
【課題を解決するための手段】
【００１８】
実施の形態の情報処理装置は、複数のバリアバンクを有し、前記複数のバリアバンクの同期を行う。
前記複数のバリアバンクの各バリアバンクは、スレッドを実行する一つ以上のハードウェアスレッドと、前記複数のバリアバンクのバリア同期を行うバリア同期機構と、を備える。
【００１９】
前記バリア同期機構は、同期完了しているか否かを示すバリア状態と、前記一つ以上のハードウェアスレッドの同期ポイントへの到着を示すビットマップを備えるボトム部と、バリア同期対象となる前記複数のバリアバンクのうち、同期が完了していないバリアバンクの数を示す未着カウンタを備えるトップ部と、を備える。
【００２０】
前記ボトム部は、前記ビットマップをチェックし、前記一つ以上のハードウェアスレッドがすべてバリア同期ポイントに到着した場合、ボトム部同期完了を前記複数のバリアバンクに通知する。
【００２１】
前記未着カウンタは前記ボトム部同期完了を受信すると、前記未着カウンタを１減算する。
前記トップ部は、前記未着カウンタが０となったとき、前記バリア状態を同期完了を示す値とする。
【発明の効果】
【００２２】
実施の形態のバリア同期機構によれば、構成が簡易で処理負荷が少なくなる。
【図面の簡単な説明】
【００２３】
【図１Ａ】従来のバリアバンク内同期を示す図である。
【図１Ｂ】従来のバリアバンク内同期を示す図である。
【図１Ｃ】従来のバリアバンク内同期を示す図である。
【図２】実施の形態に係るサーバの構成図である。
【図３】実施の形態に係る第１の実施の形態に係るＣＰＵの構成図である。
【図４Ａ】第１の実施の形態に係るバリアバンク間同期を示す図である。
【図４Ｂ】第１の実施の形態に係るバリアバンク間同期を示す図である。
【図４Ｃ】第１の実施の形態に係るバリアバンク間同期を示す図である。
【図５】第２の実施の形態に係るＣＰＵの構成図である。
【図６Ａ】バリア同期完了の通知を示す図である。
【図６Ｂ】バリア同期完了の通知を示す図である。
【図７Ａ】第２の実施の形態に係るバリアバンク間同期を示す図である。
【図７Ｂ】第２の実施の形態に係るバリアバンク間同期を示す図である。
【図７Ｃ】第２の実施の形態に係るバリアバンク間同期を示す図である。
【図７Ｄ】第２の実施の形態に係るバリアバンク間同期を示す図である。
【図７Ｅ】第２の実施の形態に係るバリアバンク間同期を示す図である。
【図８】第３の実施の形態に係るＣＰＵの構成図である。
【図９Ａ】第３の実施の形態に係るバリアバンク間同期を示す図である。
【図９Ｂ】第３の実施の形態に係るバリアバンク間同期を示す図である。
【図９Ｃ】第３の実施の形態に係るバリアバンク間同期を示す図である。
【図９Ｄ】第３の実施の形態に係るバリアバンク間同期を示す図である。
【図９Ｅ】第３の実施の形態に係るバリアバンク間同期を示す図である。
【図１０Ａ】第３の実施の形態に係るバリア同期機構の構成図である。
【図１０Ｂ】第３の実施の形態に係るバリア同期機構の構成図である。
【図１０Ｃ】第３の実施の形態に係るバリア同期機構の構成図である。
【図１１】第４の実施の形態に係るＣＰＵの構成図である。
【図１２Ａ】第４の実施の形態に係るバリア同期機構の第１の設定例である。
【図１２Ｂ】第４の実施の形態に係るバリア同期機構の第２の設定例である。
【図１２Ｃ】第４の実施の形態に係るバリア同期機構の第３の設定例である。
【図１３Ａ】実施の形態に係るサーバにおけるバリア同期を示す図である。
【図１３Ｂ】実施の形態に係るサーバにおけるバリア同期を示す図である。
【図１３Ｃ】実施の形態に係るサーバにおけるバリア同期を示す図である。
【発明を実施するための形態】
【００２４】
以下、図面を参照しながら実施の形態について説明する。
図２は、実施の形態に係るサーバの構成図である。
サーバ１０１は、システムボード２０１−ｉ（ｉ＝１〜４）およびスイッチ３０１を備える。サーバ１０１は、情報処理装置（コンピュータ）の一例である。サーバ１０１の構成は、以下の各実施の形態において共通である。
【００２５】
システムボード２０１−ｉは、スイッチ３０１を介して通信路により相互に接続されている。
システムボード２０１−ｉは、ＣＰＵ４０１−ｉ−ｊ（ｊ＝１〜４）を備える。
【００２６】
同一のシステムボード２０１−ｉに搭載されるＣＰＵ４０１−ｉ−ｊは、バスにより互いに接続されている。
ＣＰＵ４０１は１つ以上のプロセッサコアを有し、プロセッサコアは１つ以上のハードウェアスレッドを有する。
【００２７】
（第１の実施の形態）
第１の実施の形態では、２階層のバリアバンク間の同期について説明する。
図３は、第１の実施の形態に係るＣＰＵの構成図である。
【００２８】
ＣＰＵ５０１は、図２のＣＰＵ４０１に対応する。
ＣＰＵ５０１は、プロセッサコア５２１−ａ（ａ＝１〜４）およびバリア同期機構５３１を備える。また、プロセッサコア５２１−ａおよびバリア同期機構５３１は、バリアバンク同期の最小単位であるバリアバンク５１１に含まれている。プロセッサコア５２１−ａおよびバリア同期機構５３１は、バスにより接続されている。
【００２９】
プロセッサコア５２１−ａは、同時マルチスレッディング機能を有しており、スレッドを実行するハードウェアスレッド５２２−ａ−ｂ（ｂ＝１、２）を備える。
【００３０】
図３では、１つのプロセッサコアが２つのハードウェアスレッドを提供している。ソフトウェアスレッドを発行するソフトウェア（例えば、オペレーティングシステム（ＯＳ））からは、各ハードウェアスレッド５２２−ａ−ｂは、論理的なＣＰＵ（仮想ＣＰＵ）として扱われる。
【００３１】
ハードウェアスレッド５２２は、スレッドを実行し、バリア同期ポイントに到着した場合、トップ部バリア状態５５２を読み出し、読み出した値を反転させた値を割り当てられたビットマップに書き込む。
【００３２】
また、ハードウェアスレッド５２２は、ポーリングによりトップ部バリア状態５５２をチェックし、トップ部バリア状態５５２がビットマップに書き込んだ値と同じであれば、同期完了と判断して、次のバリア同期ポイントまでスレッドを実行する。
【００３３】
バリア同期機構５３１は、バリア同期の制御を行い、例えば、ハードウェア回路やプロセッサにより実現される。
バリア同期機構５３１は、ボトム部５４１およびトップ部５５１を備える。
【００３４】
ボトム部５４１は、ボトム部バリア状態５４２およびビットマップ群５４３を備える。
ボトム部バリア状態５４２は、バリア同期の制御に用いられる情報である。ボトム部バリア状態は、“０”または“１”である。
【００３５】
ビットマップ群５４３は、複数のビットマップを含む。ビットマップは、ハードウェアスレッド５２２のバリア同期ポイントへの到着を示す情報である。ビットマップは、バリアバンク５１１内のハードウェアスレッド５２２と同じ数だけ用意されており、各ビットマップは、各ハードウェアスレッド５２２に割り当てられる。すなわち、ビットマップは、割り当てられたハードウェアスレッド５２２のバリア同期ポイントへの到着を示す。ビットマップの値は、“０”または“１”である。
【００３６】
ボトム部５４１は、ビットマップ群５４３のすべてのビットマップが同じ値且つボトム部バリア状態５４２と異なる値となった場合、ボトム部バリア状態５４２の値を反転させる。すなわち、ボトム部バリア状態５４２は、ビットマップ群５４３のビットマップと同じ値となる。ボトム部５４１は、指定された範囲のバリア同期機構５３１にボトム部バリア同期完了を送信（ブロードキャスト）する。
【００３７】
トップ部５５１は、トップ部バリア状態５５２、トップ部未着カウンタ５５３、およびトップ部期待カウンタ５５４を有する。
トップ部バリア状態５５２は、バリア同期の制御に用いられる情報である。トップ部バリア状態５５２は、バリア同期対象の全バリアバンクの同期が完了しているか否かを示す。トップ部バリア状態５５２は、“０”または“１”である。図３において、トップ部バリア状態５５２は、“０”となっている。
【００３８】
トップ部未着カウンタ５５３は、バリア同期に参加するバリアバンクのうち、バリアバンク内で同期が完了していない（すなわち、すべてのハードウェアスレッドがバリア同期ポイントに到着していない）バリアバンクの数をカウントし、カウントした値を保持する。トップ部未着カウンタ５５３は、ボトム部バリア同期完了を受信すると、１減算する。トップ部未着カウンタ５５３は、“０”となった場合に、トップ部未着カウンタ５５３をトップ部期待カウンタ５５４の値に再設定する。
【００３９】
トップ部期待カウンタ５５４は、バリア同期に参加するバリアバンクの数を設定し保持する。
トップ部５５１は、トップ部未着カウンタ５５３をチェックし、トップ部未着カウンタ５５３が“０”であることを検出すると、トップ部バリア状態５５２の値を反転させる。
【００４０】
図４Ａ〜Ｃは、第１の実施の形態に係るバリアバンク間同期を示す図である。
図４Ａは初期状態、図４Ｂは同期中、図４Ｃは同期完了を示す。
図４では、４つのバリアバンクのバリアバンク間同期の処理について説明する。
【００４１】
第１の実施の形態では、２階層のバリア同期を行う。
図４の４つのバリア同期機構５３１−ｉ（ｉ＝１〜４）は、それぞれ異なるバリアバンクに属している。また、各バリアバンクは、同一のＣＰＵ内にあっても良いし、異なるＣＰＵにあっても良い。
【００４２】
図４の各バリアバンクは、図３のバリアバンク５１１と同様である。図４では図を簡単にするため、バリアバンク内のバリア同期機構５３１−ｉのみを記載し、プロセッサコアについては、記載を省略している。
【００４３】
バリア同期機構５３１−ｉは、ボトム部５４１−ｉおよびトップ部５５１−ｉを備える。
ボトム部５４１−ｉは、ボトム部バリア状態５４２−ｉおよびビットマップ群５４３−ｉを備える。
【００４４】
トップ部５５１−ｉは、トップ部バリア状態５５２−ｉ、トップ部未着カウンタ５５３−ｉ、およびトップ部期待カウンタ５５４−ｉを有する。
【００４５】
図４のバリア同期機構５３１−ｉ、ボトム部５４１−ｉ、トップ部５５１−ｉ、ボトム部バリア状態５４２−ｉ、ビットマップ群５４３−ｉ、トップ部バリア状態５５２−ｉ、トップ部未着カウンタ５５３−ｉ、およびトップ部期待カウンタ５５４−ｉは、図３のバリア同期機構５３１、ボトム部５４１、トップ部５５１、ボトム部バリア状態５４２、ビットマップ群５４３、トップ部バリア状態５５２、トップ部未着カウンタ５５３、およびトップ部期待カウンタ５５４に対応する。
【００４６】
図４Ａの初期状態において、ボトム部バリア状態５４２−ｉ、トップ部バリア状態５５２−ｉ、およびビットマップ群５４３−ｉの各ビットマップは、“０”である。また、トップ部未着カウンタ５５３−ｉおよびトップ部期待カウンタ５５４−ｉは、“４”である。
【００４７】
図４Ａの初期状態から各バリアバンクにおいてスレッドが実行される。
図４Ｂにおいて、ビットマップ群５４３−１のすべてのビットマップが“１”となったとする。
【００４８】
ボトム部５４１−１は、すべてのビットマップが“１”であることを検出し、ボトム部バリア状態５４２−１を“１”とする。そして、ボトム部５４１−１は、バリア同期対象のすべてのバリアバンクにボトム部バリア同期完了を送信（ブロードキャスト）する。ボトム部バリア同期完了は、バリアバンク内の同期が完了したことを示す。
【００４９】
ボトム部バリア同期完了を受信したトップ部未着カウンタ５５３−ｉは、トップ部未着カウンタ５５３−ｉの値を１減少させる。これにより、図４Ｂに示すように、トップ部未着カウンタ５５３−ｉは、“３”となる。
【００５０】
以下同様に、ビットマップ群５４３−２、５４３−４のすべてのビットマップが“１”となり、ボトム部５４１−２、５４２−４は、バリア同期対象のすべてのバリアバンクにボトム部バリア同期完了をブロードキャストし、トップ部未着カウンタ５５３−ｉは、減少する。
【００５１】
図４Ｃにおいて、最後にビットマップ群５４３−３のすべてのビットマップが“１”となり、ボトム部５４１−３は、バリア同期対象のすべてのバリアバンクにボトム部バリア同期完了をブロードキャストし、トップ部未着カウンタ５５３−ｉは、“０”となる。
【００５２】
トップ部５５１−ｉは、トップ部未着カウンタ５５３−ｉをチェックし、トップ部未着カウンタ５５３−ｉが“０”であることを検出すると、トップ部バリア状態５５２−ｉの値を反転させる。ここでは、トップ部５５１−ｉは、トップ部バリア状態５５２−ｉを“０”から“１”に変更する。
【００５３】
トップ部未着カウンタ５５３−ｉは、“０”となったので、トップ部未着カウンタ５５３−ｉの値をトップ部期待カウンタ５５４−ｉと同じ値に再設定する。これにより、トップ部未着カウンタ５５３−ｉは、再び“４”となる。
【００５４】
バリア同期機構５３１−ｉと接続しているハードウェアスレッドは、ポーリングによりトップ部バリア状態５５２−ｉをチェックし、トップ部バリア状態５５２−ｉがビットマップに書き込んだ値と同じとなったので、全体のバリア同期完了と判断して、次のバリア同期ポイントまでスレッドを実行する。
【００５５】
バリア同期機構５３１−ｉは、ボトム部同期完了をすべてのバリア同期機構５３１−ｉにブロードキャストし、各バリア同期機構５３１−ｉのトップ部５５１−ｉはそれぞれ同じ動作を行う。そのため、最後に同期完了するバリア同期機構がどれであっても、バリア同期機構間の最短通信時間で全バリア同期機構に同期完了を通知できる。
【００５６】
第１の実施の形態に係るバリア同期機構によれば、簡易な構成でバリアバンク間の同期を実現できる。
第１の実施の形態に係るバリア同期機構によれば、各バリア同期機構は、自身が属するバリアバンク内のハードウェアスレッドの同期完了と他のバリアバンク同期機構のバリア同期完了の通知を処理するので、従来の集中型バリア同期管理機構に比べて負荷が低くなり処理時間を短くできる。
【００５７】
トップ部５４１にボトム部５５１と同様にビットマップを用いると、同期させるバリアバンクの数が増大したときに必要な資源数も増大してしまう。
第１の実施の形態に係るバリア同期機構によれば、トップ部にカウンタを用いているので、同期させるバリアバンクの数が増大しても、資源の増加を抑えることができる。
【００５８】
（第２の実施の形態）
第２の実施の形態では、３階層のバリアバンク間の同期について説明する。
図５は、第２の実施の形態に係るＣＰＵの構成図である。
【００５９】
ＣＰＵ６０１は、図２のＣＰＵ４０１に対応する。
ＣＰＵ６０１は、プロセッサコア６２１−ａ（ａ＝１〜４）およびバリア同期機構６３１を備える。また、プロセッサコア６２１−ａおよびバリア同期機構６３１は、バリアバンク同期の最小単位であるバリアバンク６１１に含まれている。プロセッサコア６２１−ａおよびバリア同期機構６３１は、バスにより接続されている。
【００６０】
プロセッサコア６２１−ａは、同時マルチスレッディング機能を有しており、スレッドを実行するハードウェアスレッド６２２−ａ−ｂ（ｂ＝１、２）を備える。
【００６１】
図５では、１つのプロセッサコアが２つのハードウェアスレッドを提供している。ソフトウェアスレッドを発行するソフトウェア（例えば、オペレーティングシステム（ＯＳ））からは、各ハードウェアスレッド６２２−ａ−ｂは、論理的なＣＰＵ（仮想ＣＰＵ）として扱われる。
【００６２】
ハードウェアスレッド６２２は、スレッドを実行し、バリア同期ポイントに到着した場合、シェア部バリア状態６４２を読み出し、読み出した値を反転させた値を割り当てられたビットマップに書き込む。
【００６３】
また、ハードウェアスレッド６２２は、ポーリングによりシェア部バリア状態６４２をチェックし、シェア部バリア状態６４２がビットマップ６５３に書き込んだ値と同じであれば、同期完了と判断して、次のバリア同期ポイントまでスレッドを実行する。
【００６４】
バリア同期機構６３１は、バリア同期の制御を行い、例えば、ハードウェア回路やプロセッサにより実現される。
バリア同期機構６３１は、シェア部６４１、ボトム部６５１、ミドル部６６１、およびトップ部６７１を備える。
【００６５】
シェア部６４１は、シェア部バリア状態６４２、BANKID６４３、SYNCID６４４を有する。
シェア部バリア状態６４２は、バリア同期の制御に用いられる情報である。シェア部バリア状態６４２は、バリア同期対象の全バリアバンクの同期が完了しているか否かを示す情報である。シェア部バリア状態６４２は、“０”または“１”である。
【００６６】
BANKID６４３は、バリア同期機構６３１を識別する識別子（ＩＤ）である。
SYNCID６４４は、バリア同期機構６３１が属するグループを識別する識別子（ＩＤ）である。
【００６７】
ボトム部６５１は、ボトム部バリア状態６５２、ビットマップ群６５３、ボトム部ターゲットＩＤ６５４、ボトム部ターゲットマスク６５５を有する。
ボトム部バリア状態６５２は、バリア同期の制御に用いられる情報である。ボトム部バリア状態６５２は、“０”または“１”である。
【００６８】
ビットマップ群６５３は、複数のビットマップを含む。ビットマップは、ハードウェアスレッド６２２のバリア同期ポイントへの到着を示す情報である。ビットマップは、バリアバンク６１１内のハードウェアスレッド６２２と同じ数だけ用意されており、各ビットマップは、各ハードウェアスレッド６２２に割り当てられる。すなわち、ビットマップは、割り当てられたハードウェアスレッド６２２のバリア同期ポイントへの到着を示す。ビットマップの値は、“０”または“１”である。
【００６９】
ボトム部ターゲットＩＤ６５４は、ボトム部６５１がボトム部バリア同期完了をブロードキャストするバリア同期機構を示す情報である。
ボトム部ターゲットマスク６５５は、ボトム部ターゲットＩＤ６５４に対してドントケアビット（don't care bit）の位置を指定する情報である。すなわち、ボトム部ターゲットマスク６５５は、ボトム部ターゲットＩＤ６５４の任意の値をとることが可能なビットの位置を示す。
【００７０】
ボトム部６５１は、ビットマップ群６５３のすべてのビットマップが同じ値且つボトム部バリア状態６５２と異なる値となった場合、ボトム部バリア状態６５２の値を反転させる。すなわち、ボトム部バリア状態６５２は、ビットマップ群６５３のビットマップと同じ値となる。そして、ボトム部６５１は、ボトム部ターゲットＩＤ６５４およびボトム部ターゲットマスク６５５で指定されたバリア同期機構にボトム部バリア同期完了をブロードキャストする。尚、SYNCID６４４が設定されている場合、ボトム部６５１は、ボトム部バリア同期完了にSYNCID６４４をさらに付加してブロードキャストする。
【００７１】
ミドル部６６１は、ミドル部未着カウンタ６６２、ミドル部期待カウンタ６６３、ミドル部ターゲットＩＤ６６４、およびミドル部ターゲットマスク６６５を有する。
ミドル部未着カウンタ６６２は、ミドル部６６１がバリア同期をチェックするバリア同期機構のうち、ボトム部バリア同期完了を送信していないバリア同期機構の数をカウントし、カウントした値を保持する。ミドル部未着カウンタ６６２は、ボトム部バリア同期完了を受信すると、ミドル部未着カウンタ６６２の値を1減算する。
【００７２】
ミドル部期待カウンタ６６３は、ミドル部６６１がバリア同期をチェックするバリア同期機構の数を示す情報を設定し保持する。
ミドル部ターゲットＩＤ６６４は、ミドル部６６１がバリア同期完了をブロードキャストするバリア同期機構を示す情報である。
【００７３】
ミドル部ターゲットマスク６６５は、ミドル部ターゲットＩＤ６６４に対してドントケアビット（don't care bit）の位置を指定する情報である。すなわち、ミドル部ターゲットマスク６６５は、ミドル部ターゲットＩＤ６６４の任意の値をとることが可能なビットの位置を示す。
【００７４】
ミドル部６６１は、ミドル部未着カウンタ６６２が“０”となった場合、ミドル部ターゲットＩＤ６６４およびミドル部ターゲットマスク６６５で指定されたバリア同期機構にミドル部バリア同期完了をブロードキャストする。また、ミドル部６６１は、ミドル部未着カウンタ６６２が“０”となった場合、ミドル部未着カウンタ６６２の値をミドル部期待カウンタ６６３の値に再設定する。
【００７５】
トップ部６７１は、トップ部未着カウンタ６７２、およびトップ部期待カウンタ６７３を有する。
トップ部未着カウンタ６７２は、トップ部６７１がバリア同期をチェックするバリア同期機構のうち、ミドル部バリア同期完了を送信していないバリア同期機構の数をカウントし、カウントした値を保持する。トップ部未着カウンタ６７２は、ミドル部バリア同期完了を受信すると、トップ部未着カウンタ６７２の値を1減算する。
【００７６】
また、トップ部未着カウンタ６７２は、ミドル部バリア同期完了にSYNCIDが付加されている場合、付加されているSYNCIDがSYNCID６４４と一致する場合は、トップ部未着カウンタ６７２の値を1減算する。トップ部未着カウンタ６７２は、ミドル部バリア同期完了にSYNCIDが付加されている場合、付加されているSYNCIDがSYNCID６４４と一致しない場合は、トップ部未着カウンタ６７２の減算を行わない。すなわち、トップ部未着カウンタ６７２は、ミドル部バリア同期完了に付加されているSYNCIDがSYNCID６４４と一致するか否かに応じて、ミドル部バリア同期完了を有効または無効な信号として処理を行う
トップ部期待カウンタ６７３は、トップ部６７１がバリア同期をチェックするバリア同期機構の数を示す情報を設定し保持する。
【００７７】
トップ部６７１は、トップ部未着カウンタ６７２が“０”となった場合、シェア部バリア状態６４２の値を反転する。また、トップ部６７１は、トップ部未着カウンタ６７２が“０”となった場合、トップ部未着カウンタ６７２の値をトップ部期待カウンタ６７３の値に再設定する。
【００７８】
ここで、ターゲットＩＤ、ターゲットマスク、SYNCIDを用いたブロードキャスト範囲の指定について説明する。尚、ここで述べるターゲットＩＤおよびターゲットマスクは、ボトム部ターゲットＩＤ６５４およびボトム部ターゲットマスク６５５、もしくはミドル部ターゲットＩＤ６６４およびミドル部ターゲットマスク６６５である。バリア同期完了の通知は、ボトム部６５２またはミドル部６６２により行われる。
【００７９】
図６Ａ、６Ｂは、バリア同期完了の通知を示す図である。
図６Ａ、６Ｂにおいて、３２個のバリア同期機構0xｋ（ｋ＝00〜1f）がある。
バリア同期機構0xｋのそれぞれのBANKIDは0xkである。例えば、バリア同期機構0x00のBANKIDは、0x00である。尚、”0x”は、１６進数表記であることを示す。例えば、0x00を２進数表記で表すと、0000_0000となる。  
【００８０】
ここで、バリア同期機構0x00がバリア同期完了をブロードキャストする場合について説明する。  
バリア同期機構0x00は、バリア同期完了をターゲットＩＤおよびターゲットマスクで指定されるバリア同期機構にブロードキャストする。
【００８１】
バリア同期機構0x00には、ターゲットＩＤが0x00、ターゲットマスクが0x14として設定されているとする。
ターゲットＩＤ0x00を２進数表記であらわすと0000_0000である。
【００８２】
ターゲットマスク0x14を２進数表記であらわすと0001_0100である。すなわち、ターゲットＩＤの上位から４ビット目と６ビット目が任意の値を取ることができることを示す。
バリア同期機構0x00は、バリア同期完了をブロードキャストするバリア同期機構（ブロードキャスト範囲）のBANKIDをターゲットＩＤおよびターゲットマスクを用いて算出する。
【００８３】
ターゲットＩＤ＝0000_0000、ターゲットマスク＝0001_0100であるので、バリア同期機構0x00は、ターゲットＩＤ＝0000_0000の上位から４ビット目と６ビット目を任意の値とするすべての組み合わせを算出する。
【００８４】
それにより、0000_0000、0000_0100、0001_0000、0001_0100が算出される。これらを16進数表記で表すと、0x00、0x04、0x10、0x14である。
すなわち、バリア同期完了がブロードキャストされるバリア同期機構は、バリア同期機構0x00、0x04、0x10、0x14である。
【００８５】
よって、バリア同期機構0x00は、バリア同期機構0x00、0x04、0x10、0x14にバリア同期完了をブロードキャストする。
バリア同期完了を通知する宛先のＩＤをリストを用いて管理すると、通知するバリアバンクが増大すると必要な資源数も増大してしまう。上記のようにターゲットＩＤとターゲットマスクを用いることで、資源数の増大を抑えることができる。
【００８６】
宛先がｎビットで表現されるＩＤで指示できる場合に、ブロードキャストの範囲をｎビットのターゲットＩＤとｎビットのターゲットマスクの2つの値でしている。
この方法では、2^m(0<=m<=n)個のバリア同期機構をブロードキャスト範囲として指定できるが、任意のバリアバンク集合を構成することができない。
【００８７】
任意のバリアバンク集合を構成する方法として、SYNCIDを用いたバリア同期完了の通知について説明する。
図６Ｂにおいて、バリア同期機構0x04がバリア同期完了をブロードキャストする場合について説明する。  
【００８８】
バリア同期機構0x04は、バリア同期完了をターゲットＩＤおよびターゲットマスクで指定されるバリア同期機構にブロードキャストする。
バリア同期機構0x04には、ターゲットＩＤが0x04、ターゲットマスクが0x0bとして設定されているとする。
【００８９】
また、バリア同期機構0x04、0x05、0x06、0x0c、0x0d、0x0eは、SYNCIDとして0x11を有する。バリア同期機構0x07、0x0fは、SYNCIDとして0x00を有する。すなわち、バリア同期機構0x04、0x05、0x06、0x0c、0x0d、0x0eが第１のバリアバンク集合、バリア同期機構0x07、0x0fが第２のバリアバンク集合として設定されている。
【００９０】
ターゲットＩＤ0x04を２進数表記であらわすと0000_0100である。
ターゲットマスク0x0bを２進数表記であらわすと0000_1011である。すなわち、ターゲットＩＤの上位から５ビット目、７ビット目、および８ビット目が任意の値を取ることができることを示す。
【００９１】
バリア同期機構0x04は、バリア同期完了をブロードキャストするバリア同期機構（ブロードキャスト範囲）のBANKIDをターゲットＩＤおよびターゲットマスクを用いて算出する。
【００９２】
ターゲットＩＤ＝0000_0100、ターゲットマスク＝0000_1011であるので、バリア同期機構0x04は、ターゲットＩＤ＝0000_0100の上位から５ビット目、７ビット目、および８ビット目を任意の値とするすべての組み合わせを算出する。
【００９３】
それにより、0000_0100、0000_0101、0000_0110、0000_0111、0000_1100、0000_1101、0000_1110、0000_1111、が算出される。これらを16進数表記で表すと、0x04、0x05、0x06、0x07、0x0c、0x0d、0x0e、0x0fである。
【００９４】
すなわち、バリア同期完了がブロードキャストされるバリア同期機構は、バリア同期機構0x04、0x05、0x06、0x07、0x0c、0x0d、0x0e、0x0fである。
よって、バリア同期機構0x04は、バリア同期機構0x04、0x05、0x06、0x07、0x0c、0x0d、0x0e、0x0fにSYNCIDとして0x11を付加したバリア同期完了をブロードキャストする。
【００９５】
バリア同期完了を受信したバリア同期機構は、自身が有するSYNCIDとバリア同期完了に付加されているSYNCIDとを比較し、一致する場合は有効な信号として処理を行い、一致しない場合は、無効な信号として処理する。
【００９６】
図６Ｂにおいて、バリア同期機構0x04、0x05、0x06、0x0c、0x0d、0x0eは、自身が有するSYNCIDとバリア同期完了に付加されているSYNCIDとが一致するため、バリア同期完了を有効な信号として処理（例えば、未着カウンタの減算）を行う。また、バリア同期機構0x07、0x0fは、自身が有するSYNCIDとバリア同期完了に付加されているSYNCIDとが一致しないため、バリア同期完了を無効な信号として処理（例えば、バリア同期完了の通知を無視し、未着カウンタの減算を行わない）する。
【００９７】
このように、ターゲットＩＤ、ターゲットマスク、SYNCIDを用いることにより、任意のバリアバンク集合に対して、有効なバリア同期完了をブロードキャストすることができる。
【００９８】
尚、上述のターゲットＩＤおよびターゲットマスクを用いたバリア同期完了の宛先の算出は、他の実施の形態においても同様に用いられる。
【００９９】
図７Ａ〜Ｅは、第２の実施の形態に係るバリアバンク間同期を示す図である。
図７Ａは初期状態、図７Ｂ〜７Ｄは同期中、図７Ｅは同期完了を示す。
図７では、１６個のバリアバンクのバリアバンク間同期の処理について説明する。
図７の１６個のバリア同期機構６３１−ｍ（ｍ＝00〜0f）は、それぞれ異なるバリアバンクに属している。また、各バリアバンクは、同一のＣＰＵ内にあっても良いし、異なるＣＰＵにあっても良い。
【０１００】
図７の各バリアバンクは、図５のバリアバンク６１１と同様である。図７では図を簡単にするため、バリアバンク内のバリア同期機構６３１−ｍのみを記載し、プロセッサコアについては、記載を省略している。
【０１０１】
また、図７では、４つのバリアバンクごとに４つの第２階層グループが設定されている。図７においては、第1の第２階層グループのバリア同期機構はバリア同期機構６３１−００〜６３１−０３、第２の第２階層グループのバリア同期機構はバリア同期機構６３１−０４〜６３１−０７、第３の第２階層グループのバリア同期機構はバリア同期機構６３１−０８〜６３１−０ｂ、第４の第２階層グループのバリア同期機構はバリア同期機構６３１−０ｃ〜６３１−０ｆである。
【０１０２】
バリア同期機構６３１−ｍは、シェア部６４１−ｍ、ボトム部６５１−ｍ、ミドル部６６１−ｍ、およびトップ部６７１−ｍを備える。
シェア部６４１−ｍは、シェア部バリア状態６４２−ｍ、BANKID６４３−ｍ、およびSYNCID６４４−ｍを有する。
【０１０３】
ボトム部６５１−ｍは、ボトム部バリア状態６５２−ｍ、ビットマップ群６５３−ｍ、ボトム部ターゲットＩＤ６５４−ｍ、およびボトム部ターゲットマスク６５５−ｍを有する。
【０１０４】
ミドル部６６１−ｍは、ミドル部未着カウンタ６６２−ｍ、ミドル部期待カウンタ６６３−ｍ、ミドル部ターゲットＩＤ６６４−ｍ、およびミドル部ターゲットマスク６６５−ｍを有する。
【０１０５】
トップ部６７１−ｍは、トップ部未着カウンタ６７２−ｍ、およびトップ部期待カウンタ６７３−ｍを有する。
【０１０６】
図７のバリア同期機構６３１−ｍ、シェア部６４１−ｍ、ボトム部６５１−ｍ、ミドル部６６１−ｍ、トップ部６７１−ｍ、シェア部バリア状態６４２−ｍ、BANKID６４３−ｍ、SYNCID６４４−ｍ、ボトム部バリア状態６５２−ｍ、ビットマップ群６５３−ｍ、ボトム部ターゲットＩＤ６５４−ｍ、ボトム部ターゲットマスク６５５−ｍ、ミドル部未着カウンタ６６２−ｍ、ミドル部期待カウンタ６６３−ｍ、ミドル部ターゲットＩＤ６６４−ｍ、ミドル部ターゲットマスク６６５−ｍ、トップ部未着カウンタ６７２−ｍ、およびトップ部期待カウンタ６７３−ｍは、図５のバリア同期機構６３１、シェア部６４１、ボトム部６５１、ミドル部６６１、トップ部６７１、シェア部バリア状態６４２、BANKID６４３、SYNCID６４４、ボトム部バリア状態６５２、ビットマップ群６５３、ボトム部ターゲットＩＤ６５４、ボトム部ターゲットマスク６５５、ミドル部未着カウンタ６６２、ミドル部期待カウンタ６６３、ミドル部ターゲットＩＤ６６４、ミドル部ターゲットマスク６６５、トップ部未着カウンタ６７２、およびトップ部期待カウンタ６７３にそれぞれ対応する。
【０１０７】
図７Ａに示す初期状態において、シェア部バリア状態６４２−ｍは、０である。
BANKID６４３−ｍは、それぞれ0ｘmと設定されている。
また、SYNCID６４４−ｍは、未設定である。
【０１０８】
ボトム部バリア状態６５２−ｍは、０である。
ビットマップ群６５３−ｍの各ビットマップは、０である。
ボトム部ターゲットＩＤ６５４−ｍは0x00であり、ボトム部ターゲットマスク６５５−ｍは0x0cである。
【０１０９】
ミドル部未着カウンタ６６２−００、６６２−０４、６６２−０８、６６２−０ｃは、１６である。
ミドル部未着カウンタ６６２−０１〜６６２−０３、６６２−０５〜６６２−０７、６６２−０９〜６６２−０ｂ、６６２−０ｄ〜６６２−０ｆは、未設定である。
【０１１０】
ミドル部期待カウンタ６６３−００、６６３−０４、６６３−０８、６６３−０ｃは、１６である。
ミドル部期待カウンタ６６３−０１〜６６３−０３、６６３−０５〜６６３−０７、６６３−０９〜６６３−０ｂ、６６３−０ｄ〜６６３−０ｆは、未設定である。
【０１１１】
ミドル部ターゲットＩＤ６６４−００、６６４−０４、６６４−０８、６６４−０ｃは、それぞれ0x00、0x04、0x08、および0x0cである。
ミドル部ターゲットＩＤ６６４−０１〜６６４−０３、６６４−０５〜６６４−０７、６６４−０９〜６６４−０ｂ、６６４−０ｄ〜６６４−０ｆは、未設定である。
【０１１２】
ミドル部ターゲットマスク６６５−００、６６５−０４、６６５−０８、６６５−０ｃは、0x03である。
ミドル部ターゲットマスク６６５−０１〜６６５−０３、６６５−０５〜６６５−０７、６６５−０９〜６６５−０ｂ、６６５−０ｄ〜６６５−０ｆは、未設定である。
【０１１３】
トップ部未着カウンタ６７２−ｍは、１である。
トップ部期待カウンタ６７３−ｍは、１である。
ミドル部未着カウンタ６６２、ミドル部期待カウンタ６６３、ミドル部ターゲットＩＤ６６４、およびミドル部ターゲットマスク６６５が設定されているバリア同期機構６３１は、ミドル部有効バリアバンクと呼ぶ。
【０１１４】
ミドル部未着カウンタ６６２、ミドル部期待カウンタ６６３、ミドル部ターゲットＩＤ６６４、およびミドル部ターゲットマスク６６５が未設定であるバリア同期機構６３１は、ミドル部無効バリアバンクと呼ぶ。
【０１１５】
図７において、バリア同期機構６３１−００、６３１−０４、６３１−０８、６３１−０ｃは、ミドル部有効バリアバンクであり、バリア同期機構６３１−０１〜６３１−０３、６３１−０５〜６３１−０７、６３１−０９〜６３１−０ｂ、６３１−０ｄ〜６３１−０ｆは、ミドル部無効バリアバンクである。
【０１１６】
図７Ｂにおいて、バリア同期機構６３１−ｍと接続しているハードウェアスレッドにおいて、処理が実行されている。
最初にビットマップ群６５３−０１のすべてのビットマップが“１”となったとする。すなわち、バリア同期機構６３１−０１と接続するすべてのハードウェアスレッドがバリア同期ポイントに到着したものとする。ボトム部６５１−０１は、ボトム部バリア状態６５２−０１の値を反転、すなわち“１”にする。
【０１１７】
そして、ボトム部６５１−０１は、ボトム部ターゲットＩＤ６５４−０１およびボトム部ターゲットマスク６５５−０１で指定されるバリア同期機構６３１−００、６３１−０４、６３１−０８、６３１−０ｃのミドル部６６１−００、６６１−０４、６６１−０８、６６１−０ｃにボトム部バリア同期完了をブロードキャストする。
【０１１８】
ボトム部バリア同期完了を受信したミドル部未着カウンタ６６２−００、６６２−０４、６６２−０８、６６２−０ｃは、それぞれミドル部未着カウンタ６６２−００、６６２−０４、６６２−０８、６６２−０ｃを1減算する。それにより、ミドル部未着カウンタ６６２−００、６６２−０４、６６２−０８、６６２−０ｃの値は、“１６”から“１５”となる。
【０１１９】
以下、同様にビットマップ群６５３−００、６５３−０２、６５３−０４〜６５３−０ｆのすべてのビットマップが“１”となり、ボトム部バリア状態６５２−００、６５２−０２、６５２−０４〜６５２−０ｆは“１”となる。
【０１２０】
そして、ボトム部６５１−００、６５１−０２、６５１−０４〜６５１−０ｆは、ミドル部６６１−００、６６１−０４、６６１−０８、６６１−０ｃにボトム部バリア同期完了をブロードキャストする。
【０１２１】
ミドル部未着カウンタ６６２−００、６６２−０４、６６２−０８、６６２−０ｃは、ボトム部バリア同期完了を受信するごとに、それぞれミドル部未着カウンタ６６２−００、６６２−０４、６６２−０８、６６２−０ｃを1減算する。
【０１２２】
図７Ｃにおいて、最後にビットマップ群６５３−０３のすべてのビットマップが“１”となる。ボトム部６５１−０３は、ボトム部バリア状態６５２−０３の値を反転、すなわち“１”にする。
【０１２３】
そして、ボトム部６５１−０３は、ボトム部ターゲットＩＤ６５４−０３およびボトム部ターゲットマスク６５５−０３で指定されるバリア同期機構６３１−００、６３１−０４、６３１−０８、６３１−０ｃのミドル部６６１−００、６６１−０４、６６１−０８、６６１−０ｃにボトム部バリア同期完了をブロードキャストする。
【０１２４】
ボトム部バリア同期完了を受信したミドル部未着カウンタ６６２−００、６６２−０４、６６２−０８、６６２−０ｃは、それぞれミドル部未着カウンタ６６２−００、６６２−０４、６６２−０８、６６２−０ｃを1減算する。それにより、ミドル部未着カウンタ６６２−００、６６２−０４、６６２−０８、６６２−０ｃの値は、“１”から“０”となる。
【０１２５】
図７Ｄにおいて、ミドル部６６１−００、６６１−０４、６６１−０８、６６１−０ｃは、それぞれミドル部未着カウンタ６６２−００、６６２−０４、６６２−０８、６６２−０ｃが“０”となったことを検出すると、ミドル部ターゲットＩＤ６６４−００、６６４−０４、６６４−０８、６６４−０ｃおよびミドル部ターゲットマスク６６５−００、６６５−０４、６６５−０８、６６５−０ｃで指定されるバリア同期機構のトップ部６７１にミドル部バリア同期完了をブロードキャストする。
【０１２６】
ミドル部６６１−００は、ミドル部未着カウンタ６６２−００が“０”となったことを検出すると、ミドル部ターゲットＩＤ６６４−００およびミドル部ターゲットマスク６６５−００で指定されるバリアバンク同期機構６３１−００〜６３１−０３のトップ部６７１−００〜６７１−０３にミドル部バリア同期完了をブロードキャストする。また、ミドル部未着カウンタ６６２−００は、ミドル部未着カウンタ６６２−００の値をミドル部期待カウンタ６５３−００の値に再設定する。
【０１２７】
ミドル部６６１−０４は、ミドル部未着カウンタ６６２−０４が“０”となったことを検出すると、ミドル部ターゲットＩＤ６６４−０４およびミドル部ターゲットマスク６６５−０４で指定されるバリアバンク同期機構６３１−０４〜６３１−０７のトップ部６７１−０４〜６７１−０７にミドル部バリア同期完了をブロードキャストする。また、ミドル部未着カウンタ６６２−０４は、ミドル部未着カウンタ６６２−０４の値をミドル部期待カウンタ６５３−０４の値に再設定する。
【０１２８】
ミドル部６６１−０８は、ミドル部未着カウンタ６６２−０８が“０”となったことを検出すると、ミドル部ターゲットＩＤ６６４−０８およびミドル部ターゲットマスク６６５−０８で指定されるバリアバンク同期機構６３１−０８〜６３１−０ｂのトップ部６７１−０８〜６７１−０ｂにミドル部バリア同期完了をブロードキャストする。また、ミドル部未着カウンタ６６２−０８は、ミドル部未着カウンタ６６２−０８の値をミドル部期待カウンタ６５３−０８の値に再設定する。
【０１２９】
ミドル部６６１−０ｃは、ミドル部未着カウンタ６６２−０ｃが“０”となったことを検出すると、ミドル部ターゲットＩＤ６６４−０ｃおよびミドル部ターゲットマスク６６５−０ｃで指定されるバリアバンク同期機構６３１−０ｃ〜６３１−０ｆのトップ部６７１−０ｃ〜６７１−０ｆにミドル部バリア同期完了をブロードキャストする。また、ミドル部未着カウンタ６６２−０ｃは、ミドル部未着カウンタ６６２−０ｃの値をミドル部期待カウンタ６５３−０ｃの値に再設定する。
【０１３０】
ミドル部バリア同期完了を受信したトップ部未着カウンタ６７２−ｍは、トップ部未着カウンタ６７２−ｍを1減算する。それにより、トップ部未着カウンタ６７２−ｍの値は、“１”から“０”となる。
【０１３１】
図７Ｅにおいて、トップ部６７１−ｍは、トップ部未着カウンタ６７２−ｍが“０”となったことを検出すると、シェア部バリア状態６４２−ｍの値を反転させる。それにより、シェア部バリア状態６４２−ｍの値は“０”から“１”となる。
【０１３２】
また、トップ部未着カウンタ６７２−ｍは、トップ部未着カウンタ６７２−ｍの値をトップ部期待カウンタ６７３−ｍの値に再設定する。
バリア同期機構６３１−ｍと接続するハードウェアスレッドは、シェア部バリア状態６４２−ｍがビットマップに書き込んだ値（１）と同じとなったことを確認し、次のバリア同期ポイントまで処理を行う。
【０１３３】
第２の実施の形態に係るバリア同期機構によれば、簡易な構成でバリアバンク間の同期を実現できる。
従来の集中型バリア同期管理機構では、バリア同期行うプロセサコア数が増大すると、ネットワークを通過する通信数が増え、ネットワークの輻輳が発生する。
【０１３４】
第１の実施の形態の２階層のバリア同期では、n=全バリアバンク数とすると、n^2の通信が発生するが、第２の実施の形態の３階層のバリア同期の通信数は、m=第２階層のバリアバンクグループ数とすると、n*(m+1)であり、大幅に削減できる。したがって、ネットワークの輻輳を防止できる。
（第３の実施の形態）
第３の実施の形態では、４階層のバリアバンク間の同期について説明する。
【０１３５】
図８は、第３の実施の形態に係るＣＰＵの構成図である。
ＣＰＵ７０１は、図２のＣＰＵ４０１に対応する。
ＣＰＵ７０１は、プロセッサコア７２１−ａ（ａ＝１〜４）およびバリア同期機構７３１を備える。また、プロセッサコア７２１−ａおよびバリア同期機構７３１は、バリアバンク同期の最小単位であるバリアバンク７１１に含まれている。プロセッサコア７２１−ａおよびバリア同期機構７３１は、バスにより接続されている。
【０１３６】
プロセッサコア７２１−ａは、同時マルチスレッディング機能を有しており、スレッドを実行するハードウェアスレッド７２２−ａ−ｂ（ｂ＝１、２）を備える。
ハードウェアスレッド７２２は、図５のハードウェアスレッド６２２と同様の機能を有するため説明は省略する。
【０１３７】
バリア同期機構７３１は、バリア同期の制御を行い、例えば、ハードウェア回路やプロセッサにより実現される。
バリア同期機構７３１は、シェア部７４１、ボトム部７５１、ミドル部７６１、およびトップ部７７１を備える。
【０１３８】
シェア部７４１は、シェア部バリア状態７４２、BANKID７４３、SYNCID７４４を有する。
シェア部バリア状態７４２、BANKID７４３、およびSYNCID７４４は、図５のシェア部バリア状態６４２、BANKID６４３、およびSYNCID６４４とそれぞれ同様の機能を有するため説明は省略する。
【０１３９】
ボトム部７５１は、ボトム部バリア状態７５２、ビットマップ群７５３、ボトム部ターゲットＩＤ７５４、およびボトム部ターゲットマスク７５５を有する。
ボトム部７５１、ボトム部バリア状態７５２、ビットマップ群７５３、ボトム部ターゲットＩＤ７５４、およびボトム部ターゲットマスク７５５は、図５のボトム部バリア状態６５２、ビットマップ群６５３、ボトム部ターゲットＩＤ６５４、およびボトム部ターゲットマスク６５５とそれぞれ同様の機能を有するため説明は省略する。
【０１４０】
ミドル部７６１は、ミドル部未着カウンタ７６２、ミドル部期待カウンタ７６３、ミドル部ターゲットＩＤ７６４、ミドル部ターゲットマスク７６５、およびミドル部宛先階層７６６を有する。
【０１４１】
ミドル部未着カウンタ７６２は、ミドル部７６１がバリア同期をチェックするバリア同期機構のうち、ボトム部バリア同期完了を送信していないバリア同期機構の数をカウントし、カウントした値を保持する。ミドル部未着カウンタ７６２は、ボトム部バリア同期完了を受信すると、ミドル部未着カウンタ７６２の値を1減算する。また、ミドル部未着カウンタ７６２は、TO_MIDDLE=1が付加されたミドル部バリア同期完了を受信すると、ミドル部未着カウンタ７６２の値を1減算する。
【０１４２】
ミドル部期待カウンタ７６３は、ミドル部７６１がバリア同期をチェックするバリア同期機構の数を示す情報を設定し保持する。
ミドル部ターゲットＩＤ７６４は、ミドル部７６１がバリア同期完了をブロードキャストするバリア同期機構を示す情報である。
【０１４３】
ミドル部ターゲットマスク７６５は、ミドル部ターゲットＩＤ７６４に対してドントケアビット（don't care bit）の位置を指定する情報である。すなわち、ミドル部ターゲットマスク７６５は、ミドル部ターゲットＩＤ７６４の任意の値をとることが可能なビットの位置を示す。
【０１４４】
ミドル部宛先階層７６６は、受信したミドル部バリア同期完了を処理する処理部（ミドル部またはトップ部）を示す。ミドル部宛先階層７６６は、“１”または“０”である。“１”は、ミドル部同期完了を受信したミドル部７６１がミドル部同期完了の受信に対する処理を実行すること示す。“０”は、 ミドル部同期完了を受信したトップ部７７１がミドル部同期完了の受信に対する処理を実行すること示す。尚、図９以降の図面では、“１”を”MIDDLE”、“０”を”TOP”として表している。
【０１４５】
ミドル部７６１は、ミドル部未着カウンタ７６２が“０”となった場合、ミドル部ターゲットＩＤ７６４およびミドル部ターゲットマスク７６５で指定されたバリア同期機構にミドル部バリア同期完了をブロードキャストする。ミドル部７６１は、ミドル部バリア同期完了にミドル部宛先階層７６６の値を付加する。例えば、ミドル部７６１は、ミドル部宛先階層７６６が“１”の場合、TO_MIDDLE=1をミドル部バリア同期完了に付加し、ミドル部宛先階層７６６が“０”の場合、TO_MIDDLE=0をミドル部バリア同期完了に付加する。また、ミドル部７６１は、SYNCID７４４が設定されている場合は、SYNCID７４４をミドル部バリア同期完了にさらに付加する。
【０１４６】
また、ミドル部７６１は、ミドル部未着カウンタ７６２が“０”となった場合、ミドル部未着カウンタ７６２の値をミドル部期待カウンタ７６３の値に再設定する。
トップ部７７１は、トップ部未着カウンタ７７２、およびトップ部期待カウンタ７７３を有する。
【０１４７】
トップ部未着カウンタ７７２は、トップ部７７１がバリア同期をチェックするバリア同期機構のうち、TO_MIDDLE=0が付加されたミドル部バリア同期完了を送信していないバリア同期機構の数をカウントし、カウントした値を保持する。トップ部未着カウンタ７７２は、TO_MIDDLE=0が付加されたミドル部バリア同期完了を受信すると、トップ部未着カウンタ７７２の値を1減算する。
【０１４８】
また、トップ部未着カウンタ７７２は、TO_MIDDLE=0が付加されたミドル部バリア同期完了にSYNCIDが付加されている場合、付加されているSYNCIDがSYNCID７４４と一致する場合は、トップ部未着カウンタ７７２の値を1減算する。トップ部未着カウンタ７７２は、TO_MIDDLE=0が付加されたミドル部バリア同期完了にSYNCIDが付加されている場合、付加されているSYNCIDがSYNCID７４４と一致しない場合は、トップ部未着カウンタ７７２の減算を行わない。すなわち、トップ部未着カウンタ７７２は、ミドル部バリア同期完了に付加されているSYNCIDがSYNCID７４４と一致するか否かに応じて、ミドル部バリア同期完了を有効または無効な信号として処理を行う。
【０１４９】
トップ部期待カウンタ７７３は、トップ部７７１がバリア同期をチェックするバリア同期機構の数を示す情報を設定し保持する。
トップ部７７１は、トップ部未着カウンタ７７２が“０”となった場合、シェア部バリア状態７４２の値を反転する。また、トップ部７７１は、トップ部未着カウンタ７７２が“０”となった場合、トップ部未着カウンタ７７２の値をトップ部期待カウンタ７７３の値に再設定する。
【０１５０】
図９Ａ〜Ｅは、第３の実施の形態に係るバリアバンク間同期を示す図である。
図９Ａは初期状態、図９Ｂ〜９Ｄは同期中、図９Ｅは同期完了を示す。
図９では、６４個のバリアバンクのバリアバンク間同期の処理について説明する。
【０１５１】
図９の６４個のバリア同期機構７３１−ｓ（ｓ＝00〜3f）は、それぞれ異なるバリアバンクに属している。また、各バリアバンクは、同一のＣＰＵ内にあっても良いし、異なるＣＰＵにあっても良い。
【０１５２】
図９の各バリアバンクは、図５のバリアバンク６１１と同様である。図７では図を簡単にするため、バリアバンク内のバリア同期機構７３１−ｓのみを記載し、プロセッサコアについては、記載を省略している。
図９では、１６個のバリアバンクごとに４つの第２階層グループが設定されている。また、８個のバリアバンクごとに８つの第３階層グループが設定されている。
【０１５３】
図１０Ａ〜Ｃは、第３の実施の形態に係るバリア同期機構の構成図である。
図１０Ａ〜Ｃに示すバリア同期機構は、図９Ａ示す初期状態のバリア同期機構である。
図１０Ａは、バリア同期機構７３１−ｐ（ｐ＝０１〜０３、０５〜０ｂ、０ｄ〜０ｆ、１１〜１３、１５〜１ｂ、１ｄ〜１ｆ、２１〜２３、２５〜２ｂ、２ｄ〜２ｆ、３１〜３３、３５〜３ｂ、３ｄ〜３ｆ）の構成を示す。
【０１５４】
バリア同期機構７３１−ｐは、シェア部７４１−ｐ、ボトム部７５１−ｐ、ミドル部７６１−ｐ、およびトップ部７７１−ｐを備える。
シェア部７４１−ｐは、シェア部バリア状態７４２−ｐ、BANKID７４３−ｐ、SYNCID７４４−ｐを有する。
【０１５５】
ボトム部７５１−ｐは、ボトム部バリア状態７５２−ｐ、ビットマップ群７５３−ｐ、ボトム部ターゲットＩＤ７５４−ｐ、およびボトム部ターゲットマスク７５５−ｐを有する。
【０１５６】
ミドル部７６１−ｐは、ミドル部未着カウンタ７６２−ｐ、ミドル部期待カウンタ７６３−ｐ、ミドル部ターゲットＩＤ７６４−ｐ、ミドル部ターゲットマスク７６５−ｐ、およびミドル部宛先階層７６６−ｐを有する。
【０１５７】
トップ部７７１−ｐは、トップ部未着カウンタ７７２−ｐ、およびトップ部期待カウンタ７７３−ｐを有する。
シェア部バリア状態７４２−ｐ、BANKID７４３−ｐ、SYNCID７４４−ｐ、ボトム部バリア状態７５２−ｐ、ビットマップ群７５３−ｐ、ボトム部ターゲットＩＤ７５４−ｐ、ボトム部ターゲットマスク７５５−ｐ、ミドル部未着カウンタ７６２−ｐ、ミドル部期待カウンタ７６３−ｐ、ミドル部ターゲットＩＤ７６４−ｐ、ミドル部ターゲットマスク７６５−ｐ、ミドル部宛先階層７６６−ｐ、トップ部未着カウンタ７７２−ｐ、およびトップ部期待カウンタ７７３−ｐは、図８のシェア部バリア状態７４２、BANKID７４３、SYNCID７４４、ボトム部バリア状態７５２、ビットマップ群７５３、ボトム部ターゲットＩＤ７５４、ボトム部ターゲットマスク７５５、ミドル部未着カウンタ７６２、ミドル部期待カウンタ７６３、ミドル部ターゲットＩＤ７６４、ミドル部ターゲットマスク７６５、ミドル部宛先階層７６６、トップ部未着カウンタ７７２、およびトップ部期待カウンタ７７３にそれぞれ対応する。
【０１５８】
初期状態において、シェア部バリア状態７４２−ｐは、０である。
BANKID７４３−ｐは、それぞれ0ｘpと設定されている。バリア同期機構７３１−ｐが有するBANKID７４３−ｐ（＝0ｘp）を自ＩＤとも呼ぶ。
【０１５９】
また、SYNCID７４４−ｐは、未設定である。
ボトム部バリア状態７５２−ｐは、０である。
ビットマップ群７５３−ｐの各ビットマップは、０である。
【０１６０】
ボトム部ターゲットＩＤ７５４−ｐはBANKID７４３−ｐ & 0xf0であり、ボトム部ターゲットマスク７５５−ｐは0x00である。”&”は、論理積を示す。BANKID７４３−ｐ & 0xf0は、BANKID７４３−pの値と0xf0の論理積である。
【０１６１】
ミドル部未着カウンタ７６２−ｐは、未設定である。
ミドル部期待カウンタ７６３−ｐは、未設定である。
ミドル部ターゲットＩＤ７６４−ｐは、未設定である。
【０１６２】
ミドル部ターゲットマスク７６５−ｐは、未設定である。
ミドル部宛先階層７６６−ｐは、未設定である。
トップ部未着カウンタ６７２−ｐは、１である。
【０１６３】
トップ部期待カウンタ６７３−ｐは、１である。
ミドル部未着カウンタ７６２−ｐ、ミドル部期待カウンタ７６３−ｐ、ミドル部ターゲットＩＤ７６４−ｐ、ミドル部ターゲットマスク７６５−ｐ、およびミドル部宛先階層７６６−ｐが未設定であるバリア同期機構７３１−ｐは、ミドル部無効バリアバンクと呼ぶ。
【０１６４】
図１０Ｂは、バリア同期機構７３１−ｑ（ｑ＝００、１０、２０、３０）の構成を示す。
バリア同期機構７３１−ｑは、シェア部７４１−ｑ、ボトム部７５１−ｑ、ミドル部７６１−ｑ、およびトップ部７７１−ｑを備える。
【０１６５】
シェア部７４１−ｑは、シェア部バリア状態７４２−ｑ、BANKID７４３−ｑ、SYNCID７４４−ｑを有する。
ボトム部７５１−ｑは、ボトム部バリア状態７５２−ｑ、ビットマップ群７５３−ｑ、ボトム部ターゲットＩＤ７５４−ｑ、およびボトム部ターゲットマスク７５５−ｑを有する。
【０１６６】
ミドル部７６１−ｑは、ミドル部未着カウンタ７６２−ｑ、ミドル部期待カウンタ７６３−ｑ、ミドル部ターゲットＩＤ７６４−ｑ、ミドル部ターゲットマスク７６５−ｑ、およびミドル部宛先階層７６６−ｑを有する。
【０１６７】
トップ部７７１−ｑは、トップ部未着カウンタ７７２−ｑ、およびトップ部期待カウンタ７７３−ｑを有する。
シェア部バリア状態７４２−ｑ、BANKID７４３−ｑ、SYNCID７４４−ｑ、ボトム部バリア状態７５２−ｑ、ビットマップ群７５３−ｑ、ボトム部ターゲットＩＤ７５４−ｑ、ボトム部ターゲットマスク７５５−ｑ、ミドル部未着カウンタ７６２−ｑ、ミドル部期待カウンタ７６３−ｑ、ミドル部ターゲットＩＤ７６４−ｑ、ミドル部ターゲットマスク７６５−ｑ、ミドル部宛先階層７６６−ｑ、トップ部未着カウンタ７７２−ｑ、およびトップ部期待カウンタ７７３−ｑは、図８のシェア部バリア状態７４２、BANKID７４３、SYNCID７４４、ボトム部バリア状態７５２、ビットマップ群７５３、ボトム部ターゲットＩＤ７５４、ボトム部ターゲットマスク７５５、ミドル部未着カウンタ７６２、ミドル部期待カウンタ７６３、ミドル部ターゲットＩＤ７６４、ミドル部ターゲットマスク７６５、ミドル部宛先階層７６６、トップ部未着カウンタ７７２、およびトップ部期待カウンタ７７３にそれぞれ対応する。
【０１６８】
初期状態において、シェア部バリア状態７４２−ｑは、０である。
BANKID７４３−ｑは、それぞれ0ｘqと設定されている。バリア同期機構７３１−ｑが有するBANKID７４３−ｑ（＝0ｘq）を自ＩＤとも呼ぶ。
【０１６９】
また、SYNCID７４４−ｑは、未設定である。
ボトム部バリア状態７５２−ｑは、０である。
ビットマップ群７５３−ｑの各ビットマップは、０である。
【０１７０】
ボトム部ターゲットＩＤ７５４−ｑはBANKID７４３−ｑ & 0xf0であり、ボトム部ターゲットマスク７５５−ｑは0x00である。
ミドル部未着カウンタ７６２−ｑは、１６である。
【０１７１】
ミドル部期待カウンタ７６３−ｑは、１６である。
ミドル部ターゲットＩＤ７６４−ｑは、0x04である。
ミドル部ターゲットマスク７６５−ｑは、0x38である。
【０１７２】
ミドル部宛先階層７６６−ｑは、１である。
トップ部未着カウンタ６７２−ｑは、１である。
トップ部期待カウンタ６７３−ｑは、１である。
【０１７３】
図１０Ｃは、バリア同期機構７３１−ｒ（ｒ＝０４、０ｃ、１４、１ｃ、２４、２ｃ、３４、３ｃ）の構成を示す。
バリア同期機構７３１−ｒは、シェア部７４１−ｒ、ボトム部７５１−ｒ、ミドル部７６１−ｒ、およびトップ部７７１−ｒを備える。
【０１７４】
シェア部７４１−ｒは、シェア部バリア状態７４２−ｒ、BANKID７４３−ｒ、SYNCID７４４−ｒを有する。
ボトム部７５１−ｒは、ボトム部バリア状態７５２−ｒ、ビットマップ群７５３−ｒ、ボトム部ターゲットＩＤ７５４−ｒ、およびボトム部ターゲットマスク７５５−ｒを有する。
【０１７５】
ミドル部７６１−ｒは、ミドル部未着カウンタ７６２−ｒ、ミドル部期待カウンタ７６３−ｒ、ミドル部ターゲットＩＤ７６４−ｒ、ミドル部ターゲットマスク７６５−ｒ、およびミドル部宛先階層７６６−ｒを有する。
トップ部７７１−ｒは、トップ部未着カウンタ７７２−ｒ、およびトップ部期待カウンタ７７３−ｒを有する。
【０１７６】
シェア部バリア状態７４２−ｒ、BANKID７４３−ｒ、SYNCID７４４−ｒ、ボトム部バリア状態７５２−ｒ、ビットマップ群７５３−ｒ、ボトム部ターゲットＩＤ７５４−ｒ、ボトム部ターゲットマスク７５５−ｒ、ミドル部未着カウンタ７６２−ｒ、ミドル部期待カウンタ７６３−ｒ、ミドル部ターゲットＩＤ７６４−ｒ、ミドル部ターゲットマスク７６５−ｒ、ミドル部宛先階層７６６−ｒ、トップ部未着カウンタ７７２−ｒ、およびトップ部期待カウンタ７７３−ｒは、図８のシェア部バリア状態７４２、BANKID７４３、SYNCID７４４、ボトム部バリア状態７５２、ビットマップ群７５３、ボトム部ターゲットＩＤ７５４、ボトム部ターゲットマスク７５５、ミドル部未着カウンタ７６２、ミドル部期待カウンタ７６３、ミドル部ターゲットＩＤ７６４、ミドル部ターゲットマスク７６５、ミドル部宛先階層７６６、トップ部未着カウンタ７７２、およびトップ部期待カウンタ７７３にそれぞれ対応する。
【０１７７】
初期状態において、シェア部バリア状態７４２−ｒは、０である。
BANKID７４３−ｒは、それぞれ0ｘrと設定されている。バリア同期機構７３１−rが有するBANKID７４３−r（＝0ｘr）を自ＩＤとも呼ぶ。
【０１７８】
また、SYNCID７４４−ｒは、未設定である。
ボトム部バリア状態７５２−ｒは、０である。
ビットマップ群７５３−ｒの各ビットマップは、０である。
【０１７９】
ボトム部ターゲットＩＤ７５４−ｒはBANKID７４３−ｒ & 0xf0であり、ボトム部ターゲットマスク７５５−ｒは0x00である。
ミドル部未着カウンタ７６２−ｒは、４である。
【０１８０】
ミドル部期待カウンタ７６３−ｒは、４である。
ミドル部ターゲットＩＤ７６４−ｒは、0xrである。すなわち、BANKID７４３−ｒと同じ値である。
【０１８１】
ミドル部ターゲットマスク７６５−ｒは、0x07である。
ミドル部宛先階層７６６−ｒは、０である。
トップ部未着カウンタ６７２−ｒは、１である。
【０１８２】
トップ部期待カウンタ６７３−ｒは、１である。
先ず、図９Ａの初期状態において、各バリアバンクのハードウェアスレッドにおいて処理が開始される。
【０１８３】
図９Ｂの上部に示すように、バリア同期機構７３１−０２のビットマップ群７５３−０２のすべてのビットマップが“１”となり、ボトム部バリア状態７５２−０２が“０”から“１”に変更されたとする。
【０１８４】
ボトム部７５１−０２は、ボトム部バリア同期完了をバリア同期機構７３１−００に通知する。
ボトム部バリア同期完了を受信したミドル部未着カウンタ７６２−００は、ミドル部未着カウンタ７６２−００を１減算する。
【０１８５】
以下、同様にバリア同期機構７３１−００〜７３１−０１、７３１−０３〜７３１−０ｃ、７３１−０ｅ〜７３１−０ｆのビットマップ群７５３−００〜７５３−０１、７５３−０３〜７５３−０ｃ、７５３−０ｅ〜７５３−０ｆのすべてのビットマップが“１”となり、ボトム部バリア状態７５２−００〜７５２−０１、７５２−０３〜７５２−０ｃ、７５２−０ｅ〜７５２−０ｆが“０”から“１”に変更されたとする。
【０１８６】
ボトム部７５１−００〜７５１−０１、７５１−０３〜７５１−０ｃ、７５１−０ｅ〜７５１−０ｆは、ボトム部バリア同期完了をバリア同期機構７３１−００に通知する。
ミドル部未着カウンタ７６２−００は、ボトム部バリア同期完了を受信する度にミドル部未着カウンタ７６２−００を１減算する。
【０１８７】
図９Ｂの下部に示すように、バリア同期機構７３１−０ｄのビットマップ群７５３−０ｄのすべてのビットマップが“１”となり、ボトム部バリア状態７５２−０ｄが“０”から“１”に変更されたとする。
【０１８８】
ボトム部７５１−０ｄは、ボトム部バリア同期完了をバリア同期機構７３１−００に通知する。
ボトム部バリア同期完了を受信したミドル部未着カウンタ７６２−００は、ミドル部未着カウンタ７６２−００を１減算する。これにより、ミドル部未着カウンタ７６２−００の値は“０”となる。
【０１８９】
図９Ｃにおいて、バリア同期機構７３１−００のミドル部７６１−００は、ミドル部未着カウンタ７６２−００が“０”となったことを検出し、ミドル部同期完了をバリア同期機構７３１−ｒにブロードキャストする。尚、ミドル部７６１−００は、ミドル部同期完了に宛先階層７６６−００（TO_MIDDLE=1）を付加する。
【０１９０】
また、ミドル部未着カウンタ７６２−００は、ミドル部未着カウンタ７６２−００を期待カウンタ７６３−００の値（１６）に再設定する。
TO_MIDDLE=1が付加されたミドル部同期完了を受信したミドル部７６１−ｒは、ミドル部未着カウンタ７６２−ｒを１減算する。
【０１９１】
以下同様に、バリア同期機構７３１−１０〜７３１−３ｆのビットマップ群７５３−１０〜７５３−３ｆのすべてのビットマップが“１”となり、ボトム部バリア状態７５２−１０〜７５２−３ｆが“０”から“１”に変更されたとする。
【０１９２】
ボトム部７５１−１０〜７５１−１ｆは、ボトム部バリア同期完了をバリア同期機構７３１−１０に通知する。
ボトム部７５１−２０〜７５１−２ｆは、ボトム部バリア同期完了をバリア同期機構７３１−２０に通知する。
【０１９３】
ボトム部７５１−３０〜７５１−３ｆは、ボトム部バリア同期完了をバリア同期機構７３１−３０に通知する。
ミドル部未着カウンタ７６２−１０、７６２−２０、カウンタ７６２−３０は、それぞれボトム部バリア同期完了を受信する度にミドル部未着カウンタ７６２−１０、７６２−２０、７６２−３０を１減算する。
【０１９４】
バリア同期機構７３１−１０、７３１−２０のミドル部７６１−１０、７６１−２０は、それぞれミドル部未着カウンタ７６２−１０、７６２−２０が“０”となったことを検出し、ミドル部同期完了をバリア同期機構７３１−ｒにブロードキャストする。尚、ミドル部７６１−１０、７６１−２０は、ミドル部同期完了に宛先階層７６６−１０、７６６−２０（TO_MIDDLE=1）を付加する。
【０１９５】
また、ミドル部未着カウンタ７６２−１０、７６２−２０は、それぞれミドル部未着カウンタ７６２−１０、７６２−２０を期待カウンタ７６３−１０、７６３−２０の値（１６）に再設定する。
【０１９６】
ミドル部７６１−ｒは、TO_MIDDLE=1が付加されたミドル部同期完了を受信する度にミドル部未着カウンタ７６２−ｒを１減算する。
【０１９７】
図９Ｄにおいて、バリア同期機構７３１−３０のミドル部７６１−３０は、ミドル部未着カウンタ７６２−３０が“０”となったことを検出し、ミドル部同期完了をバリア同期機構７３１−ｒにブロードキャストする。尚、ミドル部７６１−３０は、ミドル部同期完了に宛先階層７６６−３０（TO_MIDDLE=1）を付加する。
【０１９８】
また、ミドル部未着カウンタ７６２−３０は、ミドル部未着カウンタ７６２−３０を期待カウンタ７６３−３０の値（１６）に再設定する。
TO_MIDDLE=1が付加されたミドル部同期完了を受信したミドル部７６１−ｒは、ミドル部未着カウンタ７６２−ｒを１減算する。これにより、ミドル部未着カウンタ７６２−ｒは、“０”となる。
【０１９９】
図９Ｅにおいて、バリア同期機構７３１−ｒのミドル部７６１−ｒは、ミドル部未着カウンタ７６２−ｒが“０”となったことを検出し、ミドル部同期完了をミドル部ターゲットＩＤ７６４−ｒおよびミドル部ターゲットマスク７６５−ｒで指定されるバリア同期機構にブロードキャストする。尚、ミドル部７６１−ｒは、ミドル部同期完了に宛先階層７６６−ｒ（TO_MIDDLE=0）を付加する。
【０２００】
詳細には、ミドル部７６１−０４は、ミドル部同期完了をバリア同期機構７３１−００〜７３１−０７にブロードキャストする。
ミドル部７６１−０ｃは、ミドル部同期完了をバリア同期機構７３１−０８〜７３１−０ｆにブロードキャストする。
【０２０１】
ミドル部７６１−１４は、ミドル部同期完了をバリア同期機構７３１−１０〜７３１−１７にブロードキャストする。
ミドル部７６１−１ｃは、ミドル部同期完了をバリア同期機構７３１−１８〜７３１−１ｆにブロードキャストする。
【０２０２】
ミドル部７６１−２４は、ミドル部同期完了をバリア同期機構７３１−２０〜７３１−２７にブロードキャストする。
ミドル部７６１−２ｃは、ミドル部同期完了をバリア同期機構７３１−２８〜７３１−２ｆにブロードキャストする。
【０２０３】
ミドル部７６１−３４は、ミドル部同期完了をバリア同期機構７３１−３０〜７３１−３７にブロードキャストする。
ミドル部７６１−３ｃは、ミドル部同期完了をバリア同期機構７３１−３８〜７３１−３ｆにブロードキャストする。
【０２０４】
ミドル部未着カウンタ７６２−ｒは、ミドル部未着カウンタ７６２−ｒを期待カウンタ７６３−ｒの値（４）に再設定する。
TO_MIDDLE=0が付加されたミドル部同期完了を受信したトップ部７７１−ｓは、トップ部未着カウンタ７７２−ｓを１減算する。これにより、トップ部未着カウンタ７７２−ｓは、“０”となる。
【０２０５】
トップ部７７１−ｓは、トップ部未着カウンタ７７２−ｓが“０”となったことを検出し、シェア部バリア状態７４２−ｓの値を反転させる。これにより、シェア部バリア状態７４２−ｓの値は“０”から“１”になる。
【０２０６】
各ハードウェアスレッドは、バリア同期ポイント到着時に書き込んだビットマップを有するバリア同期機構７３１−ｓのシェア部バリア状態７４２−ｓをチェックし、シェア部バリア状態７４２−ｓがビットマップに書き込んだ値と同じとなったことを確認し、バリア同期完了と判断し、次のバリア同期ポイントまでの処理を開始する。
【０２０７】
第３の実施の形態に係るバリア同期機構によれば、簡易な構成でバリアバンク間の同期を実現できる。
上述のように第１の実施の形態の２階層のバリア同期では、n=全バリアバンク数とすると、n^2の通信が発生し、第２の実施の形態の３階層のバリア同期の通信数は、m2=第２階層のバリアバンクグループ数とすると、n*(m2+1)のである。
【０２０８】
第３の実施の形態の４階層のバリアバンク間の同期の通信数は、m3=第３階層のバリアバンクグループ数とすると、2n+m2*m3となり、さらに通信数が削減される。
第３の実施の形態のバリア同期によれば、４階層のバリアバンク同期を行うことでさらに通信数を削減でき、ネットワークの輻輳を防止できる。
【０２０９】
（第４の実施の形態）
図１１は、第４の実施の形態に係るＣＰＵの構成図である。
ＣＰＵ８０１は、図２のＣＰＵ４０１に対応する。
ＣＰＵ８０１は、プロセッサコア８２１−ａ（ａ＝１〜４）およびバリア同期機構８３１を備える。また、プロセッサコア８２１−ａおよびバリア同期機構８３１は、バリアバンク同期の最小単位であるバリアバンク８１１に含まれている。プロセッサコア８２１−ａおよびバリア同期機構８３１は、バスにより接続されている。
【０２１０】
プロセッサコア８２１−ａは、同時マルチスレッディング機能を有しており、スレッドを実行するハードウェアスレッド８２２−ａ−ｂ（ｂ＝１、２）を備える。
ハードウェアスレッド８２２は、図５のハードウェアスレッド６２２と同様の機能を有するため説明は省略する。
【０２１１】
バリア同期機構８３１は、バリア同期の制御を行い、例えば、ハードウェア回路やプロセッサにより実現される。
バリア同期機構８３１は、シェア部８４１、ボトム部８５１、ミドル部８６１、およびトップ部８７１を備える。
【０２１２】
シェア部８４１は、シェア部バリア状態８４２、BANKID８４３、SYNCID８４４、およびバリアタイプ（ＢＴＹＰＥ）８４５を有する。
シェア部バリア状態８４２、BANKID８４３、およびSYNCID８４４は、図５のシェア部バリア状態６４２、BANKID６４３、およびSYNCID６４４とそれぞれ同様の機能を有するため説明は省略する。
【０２１３】
バリアタイプ８４５は、バリア同期機構８３１が実施するバリア同期のタイプを示す。バリア同期機構８３１は、バリアタイプ８４５に応じたバリア同期処理を行う。すなわち、ボトム部８５１、ミドル部８６１、トップ部８７１は、バリアタイプ８４５に応じた処理を行う。バリアタイプ８４５は、例えば、バリアバンク内同期を行うことを示す“バンク内”、またはバリアバンク間同期を行うことを示す“バンク間”である。
【０２１４】
ボトム部８５１は、ボトム部バリア状態８５２、ビットマップ群８５３、ボトム部ターゲットＩＤ８５４、ボトム部ターゲットマスク８５５、およびボトム部宛先階層８６６を有する。
【０２１５】
ボトム部バリア状態８５２、ビットマップ群８５３、ボトム部ターゲットＩＤ８５４、およびボトム部ターゲットマスク８５５は、図５のボトム部バリア状態６５２、ビットマップ群６５３、ボトム部ターゲットＩＤ６５４、およびボトム部ターゲットマスク６５５とそれぞれ同様の機能を有するため説明は省略する。
【０２１６】
ボトム部宛先階層８６６は、受信したボトム部バリア同期完了を処理する処理部（ミドル部またはトップ部）を示す。ボトム部宛先階層８６６は、“１”または“０”である。“１”は、ボトム部同期完了を受信したミドル部８６１がボトム部同期完了の受信に対する処理を実行すること示す。“０”は、 ボトム部同期完了を受信したトップ部８７１がボトム部同期完了の受信に対する処理を実行すること示す。
【０２１７】
ボトム部８５１は、ビットマップ群８５３のすべてのビットマップが同じ値且つボトム部バリア状態８５２と異なる値となった場合、ボトム部バリア状態８５２の値を反転させる。すなわち、ボトム部バリア状態８５２は、ビットマップ群６５３のビットマップと同じ値となる。
【０２１８】
さらに、ボトム部８５１は、バリアタイプ８４５に応じて下記（１）または（２）の処理を行う。
（１）バリアタイプ８４５が“バンク内”の場合
ボトム部８５１は、シェア部バリア状態８４２の値を反転させる。すなわち、シェア部バリア状態８４２とボトム部バリア状態８５２の値が同じとなる。
（２）バリアタイプ８４５が“バンク間”の場合
ボトム部８５１は、ボトム部ターゲットＩＤ８５４およびボトム部ターゲットマスク８５５で指定されたバリア同期機構にボトム部バリア同期完了をブロードキャストする。尚、SYNCID８４４が設定されている場合、ボトム部８５１は、ボトム部バリア同期完了にSYNCID８４４を付加してブロードキャストする。さらに、ボトム部８５１は、ボトム部バリア同期完了にボトム部宛先階層８５６の値を付加する。例えば、ボトム部８５１は、ボトム部宛先階層８５６が“１”の場合、TO_MIDDLE=1をボトム部バリア同期完了に付加し、ミドル部宛先階層８５６が“０”の場合、TO_MIDDLE=0をボトム部バリア同期完了に付加する。
【０２１９】
ミドル部８６１は、ミドル部未着カウンタ８６２、ミドル部期待カウンタ８６３、ミドル部ターゲットＩＤ８６４、ミドル部ターゲットマスク８６５、およびミドル部宛先階層８６６を有する。
【０２２０】
ミドル部未着カウンタ８６２は、ミドル部８６１がバリア同期をチェックするバリア同期機構のうち、ボトム部バリア同期完了を送信していないバリア同期機構の数をカウントし、カウントした値を保持する。ミドル部未着カウンタ８６２は、TO_MIDDLE=1が付加されたボトム部バリア同期完了を受信すると、ミドル部未着カウンタ８６２の値を1減算する。また、ミドル部未着カウンタ８６２は、TO_MIDDLE=1が付加されたミドル部バリア同期完了を受信すると、ミドル部未着カウンタ８６２の値を1減算する。
【０２２１】
また、ミドル部未着カウンタ８６２は、TO_MIDDLE=1が付加されたミドル部バリア同期完了またはTO_MIDDLE=1が付加されたボトム部バリア同期完了にSYNCIDが付加されている場合、付加されているSYNCIDがSYNCID８４４と一致する場合は、ミドル部未着カウンタ８６２の値を1減算する。ミドル部未着カウンタ８６２は、TO_MIDDLE=1が付加されたミドル部バリア同期完了またはTO_MIDDLE=1が付加されたボトム部バリア同期完了にSYNCIDが付加されている場合、付加されているSYNCIDがSYNCID８４４と一致しない場合は、ミドル部未着カウンタ８６２の減算を行わない。すなわち、ミドル部未着カウンタ８６２は、ミドル部バリア同期完了またはボトム部バリア同期完了に付加されているSYNCIDがSYNCID８４４と一致するか否かに応じて、ボトム部バリア同期完了およびミドル部バリア同期完了を有効または無効な信号として処理を行う。
【０２２２】
ミドル部期待カウンタ８６３は、ミドル部８６１がバリア同期をチェックするバリア同期機構の数を示す情報を設定し保持する。
ミドル部ターゲットＩＤ８６４は、ミドル部８６１がバリア同期完了をブロードキャストするバリア同期機構を示す情報である。
【０２２３】
ミドル部ターゲットマスク８６５は、ミドル部ターゲットＩＤ８６４に対してドントケアビット（don't care bit）の位置を指定する情報である。すなわち、ミドル部ターゲットマスク８６５は、ミドル部ターゲットＩＤ８６４の任意の値をとることが可能なビットの位置を示す。
【０２２４】
ミドル部宛先階層８６６は、受信したミドル部バリア同期完了を処理する処理部（ミドル部またはトップ部）を示す。ミドル部宛先階層８６６は、“１”または“０”である。“１”は、ミドル部同期完了を受信したミドル部８６１がミドル部同期完了の受信に対する処理を実行すること示す。“０”は、 ミドル部同期完了を受信したトップ部８７１がミドル部同期完了の受信に対する処理を実行すること示す。
【０２２５】
ミドル部８６１は、ミドル部未着カウンタ８６２が“０”となった場合、ミドル部ターゲットＩＤ８６４およびミドル部ターゲットマスク８６５で指定されたバリア同期機構にミドル部バリア同期完了をブロードキャストする。ミドル部８６１は、ミドル部バリア同期完了にミドル部宛先階層８６６の値を付加する。例えば、ミドル部７６１は、ミドル部宛先階層８６６が“１”の場合、TO_MIDDLE=1をミドル部バリア同期完了に付加し、ミドル部宛先階層８６６が“０”の場合、TO_MIDDLE=0をミドル部バリア同期完了に付加する。また、ミドル部８６１は、SYNCID８４４が設定されている場合は、SYNCID８４４をミドル部バリア同期完了にさらに付加する。
【０２２６】
また、ミドル部８６１は、ミドル部未着カウンタ８６２が“０”となった場合、ミドル部未着カウンタ８６２の値をミドル部期待カウンタ８６３の値に再設定する。
尚、ミドル部８６１は、バリアタイプ８４５が“バンク内”である場合、無効となっており、バリア同期完了を受信しても動作しない。また、ミドル部８６１は、バリアタイプ８４５が“バンク間”且つボトム部宛先階層８５６が“０”の場合、無効となっており、バリア同期完了を受信しても動作しない。  トップ部８７１は、トップ部未着カウンタ８７２、およびトップ部期待カウンタ８７３を有する。
【０２２７】
トップ部未着カウンタ８７２は、トップ部８７１がバリア同期をチェックするバリア同期機構のうち、TO_MIDDLE=0が付加されたミドル部バリア同期完了またはTO_MIDDLE=0が付加されたボトム部バリア同期完了を送信していないバリア同期機構の数をカウントし、カウントした値を保持する。
【０２２８】
トップ部未着カウンタ８７２は、TO_MIDDLE=0が付加されたミドル部バリア同期完了またはTO_MIDDLE=0が付加されたボトム部バリア同期完了を受信すると、トップ部未着カウンタ８７２の値を1減算する。
【０２２９】
また、トップ部未着カウンタ８７２は、TO_MIDDLE=0が付加されたミドル部バリア同期完了またはTO_MIDDLE=0が付加されたボトム部バリア同期完了にSYNCIDが付加されている場合、付加されているSYNCIDがSYNCID８４４と一致する場合は、トップ部未着カウンタ８７２の値を1減算する。トップ部未着カウンタ８７２は、TO_MIDDLE=0が付加されたミドル部バリア同期完了またはTO_MIDDLE=0が付加されたボトム部バリア同期完了にSYNCIDが付加されている場合、付加されているSYNCIDがSYNCID８４４と一致しない場合は、トップ部未着カウンタ８７２の減算を行わない。すなわち、トップ部未着カウンタ８７２は、ミドル部バリア同期完了またはボトム部バリア同期完了に付加されているSYNCIDがSYNCID８４４と一致するか否かに応じて、ボトム部バリア同期完了およびミドル部バリア同期完了を有効または無効な信号として処理を行う。
【０２３０】
トップ部期待カウンタ８７３は、トップ部８７１がバリア同期をチェックするバリア同期機構の数を示す情報を設定し保持する。
トップ部８７１は、トップ部未着カウンタ８７２が“０”となった場合、シェア部バリア状態８４２の値を反転する。また、トップ部８７１は、トップ部未着カウンタ８７２が“０”となった場合、トップ部未着カウンタ８７２の値をトップ部期待カウンタ８７３の値に再設定する。
【０２３１】
尚、トップ部８７１は、バリアタイプ８４５が“バンク内”の場合、無効となっており、バリア同期完了を受信しても動作しない。
第４の実施の形態に係るバリアバンク機構によれば、設定により、従来のバリアバンク内同期や第１〜３の実施の形態に係るバリアバンク間同期のいずれも実現できる。
【０２３２】
すなわち、バリアタイプ８４５、ボトム部宛先階層８５６、およびミドル部宛先階層８６６を設定することにより、バリア同期機構８３１は、バリア同期機構１００３、５３１、６３１、７３１のいずれかと同様の処理を実行する。
【０２３３】
したがって、サーバの構成に応じて、ユーザは適宜設定を行うことにより、最適なバリア同期の階層やバリアバンク集合を設定できる。
次に、第４の実施の形態に係るバリア同期機構８３１において、バリアタイプ８４５、ボトム部宛先階層８５６、ミドル部宛先階層８６６の設定例とバリア同期機構８３１の動作について、複数の例を示す。
【０２３４】
図１２Ａは、第４の実施の形態に係るバリア同期機構の第１の設定例である。
第１の設定例は、バリアバンク内同期を行う場合に用いられる。
第１の設定例において、バリアタイプ８４５は“バンク内”である。
【０２３５】
また、BANKID８４３およびSYNCID８４４は、バリア同期機構８３１に応じた適切な値が設定されているものとする。  
また、バリアタイプ８４５が“バンク内”なので、ミドル部８６１およびトップ部８７１は、無効となっている。
【０２３６】
ボトム部８５１は、ビットマップ群８５３のすべてのビットマップが同じ値且つボトム部バリア状態８５２と異なる値となった場合、ボトム部バリア状態８５２の値を反転させる。すなわち、ボトム部バリア状態８５２は、ビットマップ群６５３のビットマップと同じ値となる。
【０２３７】
そして、ボトム部８５１は、シェア部バリア状態８４２の値を反転させる。すなわち、シェア部バリア状態８４２とボトム部バリア状態８５２の値が同じとなる。
第１の設定例を用いることにより、背景技術で述べたバリアバンク内のバリア同期を実現できる。
【０２３８】
図１２Ｂは、第４の実施の形態に係るバリア同期機構の第２の設定例である。
第２の設定例は、２階層のバリアバンク間同期を行う場合に用いられる。
第２の設定例において、バリアタイプ８４５は“バンク間”である。
【０２３９】
また、ボトム部宛先階層８５６は、“０”である。
また、BANKID８４３、SYNCID８４４、ボトム部ターゲットＩＤ８５４、ボトム部ターゲットマスク８５５、トップ部未着カウンタ８７２、およびトップ部期待カウンタ８７３は、バリア同期機構８３１に応じた適切な値が設定されているものとする。
【０２４０】
バリアタイプ８４５が“バンク間”であり、ボトム部宛先階層８５６は、“０”なので、ミドル部８６１は、無効となっている。
ボトム部８５１は、ビットマップ群８５３のすべてのビットマップが同じ値且つボトム部バリア状態８５２と異なる値となった場合、ボトム部バリア状態８５２の値を反転させる。
【０２４１】
ボトム部８５１は、ボトム部ターゲットＩＤ８５４およびボトム部ターゲットマスク８５５で指定されたバリア同期機構にボトム部バリア同期完了をブロードキャストする。尚、ボトム部８５１は、ボトム部バリア同期完了にSYNCID８４４およびTO_MIDDLE=0を付加してブロードキャストする。
【０２４２】
トップ部未着カウンタ８７２は、TO_MIDDLE=0が付加されたボトム部バリア同期完了を受信する。トップ部未着カウンタ８７２は、ボトム部バリア同期完了に付加されているSYNCIDがSYNCID８４４と一致する場合は、トップ部未着カウンタ８７２の値を1減算する。トップ部未着カウンタ８７２は、ボトム部バリア同期完了に付加されているSYNCIDがSYNCID８４４と一致しない場合は、トップ部未着カウンタ８７２の減算を行わない。
【０２４３】
トップ部８７１は、トップ部未着カウンタ８７２が“０”となった場合、シェア部バリア状態８４２の値を反転する。また、トップ部８７１は、トップ部未着カウンタ８７２が“０”となった場合、トップ部未着カウンタ８７２の値をトップ部期待カウンタ８７３の値に再設定する。
【０２４４】
第２の設定例を用いることにより、第１の実施の形態で述べた２階層のバリア同期を実現できる。
【０２４５】
図１２Ｃは、第４の実施の形態に係るバリア同期機構の第３の設定例である。
第３の設定例は、３階層のバリアバンク間同期を行う場合に用いられる。
第３の設定例において、バリアタイプ８４５は“バンク間”である。
【０２４６】
ボトム部宛先階層８５６は、“１”である。
ミドル部宛先階層８６６は、“０”である。
また、BANKID８４３、SYNCID８４４、ボトム部ターゲットＩＤ８５４、ボトム部ターゲットマスク８５５、ミドル部未着カウンタ８６２、ミドル部期待カウンタ８６３、ミドル部ターゲットＩＤ８６４、ミドル部ターゲットマスク８６５、トップ部未着カウンタ８７２、およびトップ部期待カウンタ８７３は、バリア同期機構８３１に応じた適切な値が設定されているものとする。
【０２４７】
ボトム部８５１は、ビットマップ群８５３のすべてのビットマップが同じ値且つボトム部バリア状態８５２と異なる値となった場合、ボトム部バリア状態８５２の値を反転させる。
【０２４８】
ボトム部８５１は、ボトム部ターゲットＩＤ８５４およびボトム部ターゲットマスク８５５で指定されたバリア同期機構にボトム部バリア同期完了をブロードキャストする。尚、ボトム部８５１は、ボトム部バリア同期完了にSYNCID８４４およびTO_MIDDLE=1を付加してブロードキャストする。
【０２４９】
ミドル部未着カウンタ８６２は、TO_MIDDLE=1が付加されたボトム部バリア同期完了を受信する。ミドル部未着カウンタ８６２は、ボトム部バリア同期完了に付加されているSYNCIDがSYNCID８４４と一致する場合は、ミドル部未着カウンタ８６２の値を1減算する。ミドル部未着カウンタ８６２は、ボトム部バリア同期完了に付加されているSYNCIDがSYNCID８４４と一致しない場合は、ミドル部未着カウンタ８６２の減算を行わない。
【０２５０】
ミドル部８６１は、ミドル部未着カウンタ８６２が“０”となった場合、ミドル部ターゲットＩＤ８６４およびミドル部ターゲットマスク８６５で指定されたバリア同期機構にミドル部バリア同期完了をブロードキャストする。尚、ミドル部８６１は、ミドル部バリア同期完了にSYNCID８４４およびTO_MIDDLE=0を付加する。
また、ミドル部８６１は、ミドル部未着カウンタ８６２が“０”となった場合、ミドル部未着カウンタ８６２の値をミドル部期待カウンタ８６３の値に再設定する。
【０２５１】
トップ部未着カウンタ８７２は、TO_MIDDLE=0が付加されたミドル部バリア同期完了を受信する。トップ部未着カウンタ８７２は、ミドル部バリア同期完了に付加されているSYNCIDがSYNCID８４４と一致する場合は、トップ部未着カウンタ８７２の値を1減算する。トップ部未着カウンタ８７２は、ミドル部バリア同期完了に付加されているSYNCIDがSYNCID８４４と一致しない場合は、トップ部未着カウンタ８７２の減算を行わない。
【０２５２】
トップ部８７１は、トップ部未着カウンタ８７２が“０”となった場合、シェア部バリア状態８４２の値を反転する。また、トップ部８７１は、トップ部未着カウンタ８７２が“０”となった場合、トップ部未着カウンタ８７２の値をトップ部期待カウンタ８７３の値に再設定する。
【０２５３】
第３の設定例を用いることにより、第２の実施の形態で述べた３階層のバリア同期を実現できる。
【０２５４】
ここで、図２に示す実施の形態に係るサーバにおいて、各種のバリア同期を行ったときに発生する通信（バリア同期完了の通知）の範囲や数について述べる。
【０２５５】
図１３Ａ〜Ｃは、実施の形態に係るサーバにおけるバリア同期を示す図である。
図１３において、ＣＰＵ４０１−ｉ−ｊは、それぞれ２つのバリアバンクを有する。
尚、ＣＰＵのことをチップとも呼ぶ。
【０２５６】
図１３Ａにおいて、例１）１バリアバンク内のバリア同期、例２）１チップのバリア同期（２バリアバンク）について述べる。
・例１）１バリアバンク内のバリア同期
例１では、バリアバンク４１１−１−１−１内でバリア同期を行う。この場合、バリアバンク４１１−１−１−１外への通信は発生しない。
【０２５７】
・例２）１チップのバリア同期（２バリアバンク）
例２では、バリアバンク４１１−２−１−１とバリアバンク４１１−２−１−２とでバリアバンク間同期を行う。この場合、ＣＰＵ４０１−２−１内でバリア同期可能となる。
したがって、ＣＰＵ４０１−２−１外への通信は発生しない。
【０２５８】
図１３Ｂにおいて、例３）２チップのバリア同期（４バリアバンク）、例４）１ボードのバリア同期（８バリアバンク）について述べる。
・例３）２チップのバリア同期（４バリアバンク）
例３では、ＣＰＵ４０１−１−１内の２つのバリアバンクとＣＰＵ４０１−１−２内の２つのバリアバンクとでバリアバンク間同期を行う。すなわち、４つのバリアバンクのバリア同期を行う。
４つのバリアバンクのバリア同期を２階層のバリア同期で実施すると、ＣＰＵ４０１−１−１とＣＰＵ４０１−１−２間以外の通信は発生しない。
【０２５９】
・例４）１ボードのバリア同期（８バリアバンク）
例４では、システムボード２０１−２内の８つのバリアバンクのバリア同期を行う。ここで、２階層のバリア同期を行う。
２階層バリア同期では、一度のバリア同期のために発行される総信号数は各バリアバンクからのブロードキャスト数の合計となる。
したがって、一度のバリア同期のために発行される総信号数は8*8=64となる。
【０２６０】
図１３Ｃにおいて、例５）サーバ全体のバリア同期（３２バリアバンク）について述べる。
・例５）サーバ全体のバリア同期（３２バリアバンク）
例５では、サーバ１０１全体でバリア同期を行う。
２階層バリア同期でサーバ１０１全体のバリア同期を行うと、一度のバリア同期のために発行される総信号数は各バリアバンクからのブロードキャスト数となる。
したがって、一度のバリア同期のために発行される総信号数は32*32=1024となる。また、発行される信号のうち、スイッチ３０１経由で送信される信号数は 32*24=768となる。
【０２６１】
３階層バリア同期では、一度のバリア同期のために発行される２階層目（ＣＰＵ４０１−１−３、４０１−２−３、４０１−３−３、４０１−４−３内の各１バリアバンク）への範囲限定ブロードキャスト＋３階層目（同一システムボード内のバリアバンク）への範囲限定ブロードキャスト数となる。
【０２６２】
すなわち、３２個のバリアバンクは、それぞれ２階層目の４つのバリアバンクにバリア同期完了を通知し、２階層目の４つのバリアバンクは、それぞれ自身が存在するシステムボード内の８つのバリアバンクにバリア同期完了を通知する。
【０２６３】
したがって、一度のバリア同期のために発行される総信号数は32*4+4*8=160となる。また、発行される信号のうち、スイッチ３０１経由で送信される信号数は32*3=96となる。
多数のバリアバンクでバリア同期する場合には、上記例５の３階層バリア同期のように階層を追加することで、システム全体で発行されるバリア同期信号数を削減できる。これは上記スイッチ等の共通通信経路が性能ボトルネックとなる場合に有効に働く。
【０２６４】
第４の実施の形態のバリア同期機構は複数の同期方法を実現できるため、通信路のレイテンシ、帯域に応じて最適な同期手法を選択することができる。
【符号の説明】
【０２６５】
１０１    サーバ
２０１    システムボード
３０１    スイッチ
４０１    ＣＰＵ
５０１    ＣＰＵ
５１１    バリアバンク
５２１    プロセッサコア
５２２    ハードウェアスレッド
５３１    バリア同期機構
５４１    ボトム部
５４２    ボトム部バリア状態
５４３    ビットマップ群
５５１    トップ部
５５２    トップ部バリア状態
５５３    トップ部未着カウンタ
５５４    トップ部期待カウンタ
６０１、７０１、８０１    ＣＰＵ
６１１、７１１、８１１    バリアバンク
６２１、７２１、８２１    プロセッサコア
６２２、７２２、８２２    ハードウェアスレッド
６３１、７３１、８３１    バリア同期機構
６４１、７４１、８４１    シェア部
６４２、７４２、８４２    シェア部バリア状態
６４３、７４３、８４３    BANKID
６４４、７４４、８４４    SYNCID
６５１、７５１、８５１    ボトム部
６５２、７５２、８５２    ボトム部バリア状態
６５３、７５３、７５３    ビットマップ群
６５４、７５４、８５４    ミドル部ターゲットＩＤ
６５５、７５５、８５５    ミドル部ターゲットマスク
６６１、７６１、８６１    ミドル部
６６２、７６２、８６２    ミドル部未着カウンタ
６６３、７６３、８６３    トップ部期待カウンタ
６６４、７６４、７６４    トップ部ターゲットＩＤ
６６５、７６５、８６５    トップ部ターゲットマスク
６７１、７７１、８７１    トップ部
６７２、７７２、８７２    トップ部未着カウンタ
６７３、７７３、８７３    トップ部期待カウンタ
７６６、８６６    ミドル部宛先階層
８５６    ボトム部宛先階層
【図１Ａ】
2014021820.tif 000003
【図１Ｂ】
2014021820.tif 000004
【図１Ｃ】
2014021820.tif 000005
【図３】
2014021820.tif 000006
【図４Ａ】
2014021820.tif 000007
【図４Ｂ】
2014021820.tif 000008
【図４Ｃ】
2014021820.tif 000009
【図５】
2014021820.tif 000010
【図８】
2014021820.tif 000011
【図１０Ａ】
2014021820.tif 000012
【図１０Ｂ】
2014021820.tif 000013
【図１０Ｃ】
2014021820.tif 000014
【図１１】
2014021820.tif 000015
【図１２Ａ】
2014021820.tif 000016
【図１２Ｂ】
2014021820.tif 000017
【図１２Ｃ】
2014021820.tif 000018
【図２】
2014021820.tif 000019
【図６Ａ】
2014021820.tif 000020
【図６Ｂ】
2014021820.tif 000021
【図７Ａ】
2014021820.tif 000022
【図７Ｂ】
2014021820.tif 000023
【図７Ｃ】
2014021820.tif 000024
【図７Ｄ】
2014021820.tif 000025
【図７Ｅ】
2014021820.tif 000026
【図９Ａ】
2014021820.tif 000027
【図９Ｂ】
2014021820.tif 000028
【図９Ｃ】
2014021820.tif 000029
【図９Ｄ】
2014021820.tif 000030
【図９Ｅ】
2014021820.tif 000031
【図１３Ａ】
2014021820.tif 000032
【図１３Ｂ】
2014021820.tif 000033
【図１３Ｃ】
2014021820.tif 000034