JP5974703B2 - 情報処理装置およびバリア同期方法 - Google Patents

情報処理装置およびバリア同期方法 Download PDF

Info

Publication number
JP5974703B2
JP5974703B2 JP2012161392A JP2012161392A JP5974703B2 JP 5974703 B2 JP5974703 B2 JP 5974703B2 JP 2012161392 A JP2012161392 A JP 2012161392A JP 2012161392 A JP2012161392 A JP 2012161392A JP 5974703 B2 JP5974703 B2 JP 5974703B2
Authority
JP
Japan
Prior art keywords
barrier
synchronization
completion
counter
barrier synchronization
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2012161392A
Other languages
English (en)
Other versions
JP2014021820A (ja
Inventor
成記 伊藤
成記 伊藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2012161392A priority Critical patent/JP5974703B2/ja
Priority to US13/937,258 priority patent/US9436520B2/en
Publication of JP2014021820A publication Critical patent/JP2014021820A/ja
Priority to US14/926,597 priority patent/US9336064B2/en
Application granted granted Critical
Publication of JP5974703B2 publication Critical patent/JP5974703B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/522Barrier synchronisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)

Description

本発明は、情報処理装置およびバリア同期方法に関する。
現在、コンピュータにおいて、処理を高速に行うために並列処理が行われている。
コンピュータにおける「並列処理」は、複数のプロセサコアで1つのタスクを動作させることである。問題を解く過程はより小さなタスクに分割できることが多いという事実を利用して処理効率の向上を図る手法である。
1つのタスクを並列処理するには、それぞれのプロセサコアの処理を待ち合わせる「同期」が必要となる。並列処理におけるバリアとは同期方法の一つであり、ソースコード中でスレッドやプロセスがある箇所で実行を停止することにより待ち合わせを行い、他の全てのスレッドがバリアに到達したら実行を再開するものを示す。
図1A〜Cは、従来のバリアバンク内同期を示す図である。
図1Aは初期状態、図1Bは同期中、図1Cは同期完了を示す。
最小のバリア同期の範囲であるバリアバンク1001には、プロセッサコア1002−a(a=1〜4)およびバリア同期機構1003が設けられている。バリアバンク1001は、Central Processing Unit(CPU)内に設けられている。
プロセッサコア1002−aは、同時マルチスレッディング機能を有しており、スレッドを実行するハードウェアスレッド1004−a−b(b=1、2)を備える。
図1では、1つのプロセッサコアが2つのハードウェアスレッドを提供している。ソフトウェアスレッドを発行するソフトウェア(例えば、オペレーティングシステム(OS))からは、各ハードウェアスレッド1004−a−bは、論理的なCPU(仮想CPU)として扱われる。
バリア同期機構1003は、バリア状態1005およびビットマップ群1006を有する。
バリア状態1005は、バリア同期の制御に用いられる情報である。バリア状態1005の値は、“0”または“1”である。
ビットマップ群1006は、複数のビットマップを含む。ビットマップは、ハードウェアスレッド1004のバリア同期ポイントへの到着を示す情報である。ビットマップは、バリアバンク1001内のハードウェアスレッド1004と同じ数だけ用意されており、各ビットマップは、各ハードウェアスレッド1004に割り当てられる。すなわち、ビットマップは、割り当てられたハードウェアスレッド1004のバリア同期ポイントへの到着を示す。ビットマップの値は、“0”または“1”である。
図1Aに示す初期状態では、バリア状態1005および全てのビットマップは、“0”である。
各ハードウェアスレッド1004でスレッドが実行され、図1Bにおいて、ハードウェアスレッド1004−1−1、1004−3−1、1004−4−2がバリア同期ポイントに到着したものとする。
ハードウェアスレッド1004−1−1、1004−3−1、1004−4−2は、バリア状態1005を読み出し、読み出した値を反転させた値をそれぞれ割り当てられたビットマップに書き込む。ここでは、ハードウェアスレッド1004−1−1、1004−3−1、1004−4−2は、自身に割り当てられているビットマップに“1”を書き込む。
以下、同様にハードウェアスレッド1004−1−2、1004−2−1、1004−2−2、1004−3−2、1004−4−1もバリア同期ポイントに到着し、自身に割り当てられているビットマップに“1”を書き込む。
図1Cにおいて、バリア同期機構1003は、全てのビットマップが“1”となったことを検出すると、バリア状態1005を“1”に変更する。
各ハードウェアスレッド1004は、バリア状態1005が書き込んだビットマップの値(すなわち、“1”)と同じになったことを確認し、次のバリア同期ポイントまで処理を実行する。
特開2006−259821号公報 特表2004−529414号公報
山田海斗 他著、"階層グルーピング対応バリア同期機構の評価"、電子情報通信学会 発行、信学技報、Vol. 108、No. 28、ICD2008-20、pp. 19-24、2008年5月
従来、バリア同期は、集中型バリア同期管理機構により実現されている。
集中型バリア同期管理機構は、バリア同期を行うスレッド数が増大すると、バリア同期管理機構の複雑度が増大し、機構実現度が下がり、また同時に処理する要求数が増え、処理時間が長くなるという問題がある。
本発明の課題は、構成が簡易で処理負荷の少ないバリア同期機構を実現することである。
実施の形態の情報処理装置は、複数のバリアバンクを有し、前記複数のバリアバンクの同期を行う。
前記複数のバリアバンクの各バリアバンクは、スレッドを実行する一つ以上のハードウェアスレッドと、前記複数のバリアバンクのバリア同期を行うバリア同期機構と、を備える。
前記バリア同期機構は、同期完了しているか否かを示すバリア状態と、前記一つ以上のハードウェアスレッドの同期ポイントへの到着を示すビットマップを備えるボトム部と、バリア同期対象となる前記複数のバリアバンクのうち、同期が完了していないバリアバンクの数を示す未着カウンタを備えるトップ部と、を備える。
前記ボトム部は、前記ビットマップをチェックし、前記一つ以上のハードウェアスレッドがすべてバリア同期ポイントに到着した場合、ボトム部同期完了を前記複数のバリアバンクに通知する。
前記未着カウンタは前記ボトム部同期完了を受信すると、前記未着カウンタを1減算する。
前記トップ部は、前記未着カウンタが0となったとき、前記バリア状態を同期完了を示す値とする。
実施の形態のバリア同期機構によれば、構成が簡易で処理負荷が少なくなる。
従来のバリアバンク内同期を示す図である。 従来のバリアバンク内同期を示す図である。 従来のバリアバンク内同期を示す図である。 実施の形態に係るサーバの構成図である。 実施の形態に係る第1の実施の形態に係るCPUの構成図である。 第1の実施の形態に係るバリアバンク間同期を示す図である。 第1の実施の形態に係るバリアバンク間同期を示す図である。 第1の実施の形態に係るバリアバンク間同期を示す図である。 第2の実施の形態に係るCPUの構成図である。 バリア同期完了の通知を示す図である。 バリア同期完了の通知を示す図である。 第2の実施の形態に係るバリアバンク間同期を示す図である。 第2の実施の形態に係るバリアバンク間同期を示す図である。 第2の実施の形態に係るバリアバンク間同期を示す図である。 第2の実施の形態に係るバリアバンク間同期を示す図である。 第2の実施の形態に係るバリアバンク間同期を示す図である。 第3の実施の形態に係るCPUの構成図である。 第3の実施の形態に係るバリアバンク間同期を示す図である。 第3の実施の形態に係るバリアバンク間同期を示す図である。 第3の実施の形態に係るバリアバンク間同期を示す図である。 第3の実施の形態に係るバリアバンク間同期を示す図である。 第3の実施の形態に係るバリアバンク間同期を示す図である。 第3の実施の形態に係るバリア同期機構の構成図である。 第3の実施の形態に係るバリア同期機構の構成図である。 第3の実施の形態に係るバリア同期機構の構成図である。 第4の実施の形態に係るCPUの構成図である。 第4の実施の形態に係るバリア同期機構の第1の設定例である。 第4の実施の形態に係るバリア同期機構の第2の設定例である。 第4の実施の形態に係るバリア同期機構の第3の設定例である。 実施の形態に係るサーバにおけるバリア同期を示す図である。 実施の形態に係るサーバにおけるバリア同期を示す図である。 実施の形態に係るサーバにおけるバリア同期を示す図である。
以下、図面を参照しながら実施の形態について説明する。
図2は、実施の形態に係るサーバの構成図である。
サーバ101は、システムボード201−i(i=1〜4)およびスイッチ301を備える。サーバ101は、情報処理装置(コンピュータ)の一例である。サーバ101の構成は、以下の各実施の形態において共通である。
システムボード201−iは、スイッチ301を介して通信路により相互に接続されている。
システムボード201−iは、CPU401−i−j(j=1〜4)を備える。
同一のシステムボード201−iに搭載されるCPU401−i−jは、バスにより互いに接続されている。
CPU401は1つ以上のプロセッサコアを有し、プロセッサコアは1つ以上のハードウェアスレッドを有する。
(第1の実施の形態)
第1の実施の形態では、2階層のバリアバンク間の同期について説明する。
図3は、第1の実施の形態に係るCPUの構成図である。
CPU501は、図2のCPU401に対応する。
CPU501は、プロセッサコア521−a(a=1〜4)およびバリア同期機構531を備える。また、プロセッサコア521−aおよびバリア同期機構531は、バリアバンク同期の最小単位であるバリアバンク511に含まれている。プロセッサコア521−aおよびバリア同期機構531は、バスにより接続されている。
プロセッサコア521−aは、同時マルチスレッディング機能を有しており、スレッドを実行するハードウェアスレッド522−a−b(b=1、2)を備える。
図3では、1つのプロセッサコアが2つのハードウェアスレッドを提供している。ソフトウェアスレッドを発行するソフトウェア(例えば、オペレーティングシステム(OS))からは、各ハードウェアスレッド522−a−bは、論理的なCPU(仮想CPU)として扱われる。
ハードウェアスレッド522は、スレッドを実行し、バリア同期ポイントに到着した場合、トップ部バリア状態552を読み出し、読み出した値を反転させた値を割り当てられたビットマップに書き込む。
また、ハードウェアスレッド522は、ポーリングによりトップ部バリア状態552をチェックし、トップ部バリア状態552がビットマップに書き込んだ値と同じであれば、同期完了と判断して、次のバリア同期ポイントまでスレッドを実行する。
バリア同期機構531は、バリア同期の制御を行い、例えば、ハードウェア回路やプロセッサにより実現される。
バリア同期機構531は、ボトム部541およびトップ部551を備える。
ボトム部541は、ボトム部バリア状態542およびビットマップ群543を備える。
ボトム部バリア状態542は、バリア同期の制御に用いられる情報である。ボトム部バリア状態は、“0”または“1”である。
ビットマップ群543は、複数のビットマップを含む。ビットマップは、ハードウェアスレッド522のバリア同期ポイントへの到着を示す情報である。ビットマップは、バリアバンク511内のハードウェアスレッド522と同じ数だけ用意されており、各ビットマップは、各ハードウェアスレッド522に割り当てられる。すなわち、ビットマップは、割り当てられたハードウェアスレッド522のバリア同期ポイントへの到着を示す。ビットマップの値は、“0”または“1”である。
ボトム部541は、ビットマップ群543のすべてのビットマップが同じ値且つボトム部バリア状態542と異なる値となった場合、ボトム部バリア状態542の値を反転させる。すなわち、ボトム部バリア状態542は、ビットマップ群543のビットマップと同じ値となる。ボトム部541は、指定された範囲のバリア同期機構531にボトム部バリア同期完了を送信(ブロードキャスト)する。
トップ部551は、トップ部バリア状態552、トップ部未着カウンタ553、およびトップ部期待カウンタ554を有する。
トップ部バリア状態552は、バリア同期の制御に用いられる情報である。トップ部バリア状態552は、バリア同期対象の全バリアバンクの同期が完了しているか否かを示す。トップ部バリア状態552は、“0”または“1”である。図3において、トップ部バリア状態552は、“0”となっている。
トップ部未着カウンタ553は、バリア同期に参加するバリアバンクのうち、バリアバンク内で同期が完了していない(すなわち、すべてのハードウェアスレッドがバリア同期ポイントに到着していない)バリアバンクの数をカウントし、カウントした値を保持する。トップ部未着カウンタ553は、ボトム部バリア同期完了を受信すると、1減算する。トップ部未着カウンタ553は、“0”となった場合に、トップ部未着カウンタ553をトップ部期待カウンタ554の値に再設定する。
トップ部期待カウンタ554は、バリア同期に参加するバリアバンクの数を設定し保持する。
トップ部551は、トップ部未着カウンタ553をチェックし、トップ部未着カウンタ553が“0”であることを検出すると、トップ部バリア状態552の値を反転させる。
図4A〜Cは、第1の実施の形態に係るバリアバンク間同期を示す図である。
図4Aは初期状態、図4Bは同期中、図4Cは同期完了を示す。
図4では、4つのバリアバンクのバリアバンク間同期の処理について説明する。
第1の実施の形態では、2階層のバリア同期を行う。
図4の4つのバリア同期機構531−i(i=1〜4)は、それぞれ異なるバリアバンクに属している。また、各バリアバンクは、同一のCPU内にあっても良いし、異なるCPUにあっても良い。
図4の各バリアバンクは、図3のバリアバンク511と同様である。図4では図を簡単にするため、バリアバンク内のバリア同期機構531−iのみを記載し、プロセッサコアについては、記載を省略している。
バリア同期機構531−iは、ボトム部541−iおよびトップ部551−iを備える。
ボトム部541−iは、ボトム部バリア状態542−iおよびビットマップ群543−iを備える。
トップ部551−iは、トップ部バリア状態552−i、トップ部未着カウンタ553−i、およびトップ部期待カウンタ554−iを有する。
図4のバリア同期機構531−i、ボトム部541−i、トップ部551−i、ボトム部バリア状態542−i、ビットマップ群543−i、トップ部バリア状態552−i、トップ部未着カウンタ553−i、およびトップ部期待カウンタ554−iは、図3のバリア同期機構531、ボトム部541、トップ部551、ボトム部バリア状態542、ビットマップ群543、トップ部バリア状態552、トップ部未着カウンタ553、およびトップ部期待カウンタ554に対応する。
図4Aの初期状態において、ボトム部バリア状態542−i、トップ部バリア状態552−i、およびビットマップ群543−iの各ビットマップは、“0”である。また、トップ部未着カウンタ553−iおよびトップ部期待カウンタ554−iは、“4”である。
図4Aの初期状態から各バリアバンクにおいてスレッドが実行される。
図4Bにおいて、ビットマップ群543−1のすべてのビットマップが“1”となったとする。
ボトム部541−1は、すべてのビットマップが“1”であることを検出し、ボトム部バリア状態542−1を“1”とする。そして、ボトム部541−1は、バリア同期対象のすべてのバリアバンクにボトム部バリア同期完了を送信(ブロードキャスト)する。ボトム部バリア同期完了は、バリアバンク内の同期が完了したことを示す。
ボトム部バリア同期完了を受信したトップ部未着カウンタ553−iは、トップ部未着カウンタ553−iの値を1減少させる。これにより、図4Bに示すように、トップ部未着カウンタ553−iは、“3”となる。
以下同様に、ビットマップ群543−2、543−4のすべてのビットマップが“1”となり、ボトム部541−2、542−4は、バリア同期対象のすべてのバリアバンクにボトム部バリア同期完了をブロードキャストし、トップ部未着カウンタ553−iは、減少する。
図4Cにおいて、最後にビットマップ群543−3のすべてのビットマップが“1”となり、ボトム部541−3は、バリア同期対象のすべてのバリアバンクにボトム部バリア同期完了をブロードキャストし、トップ部未着カウンタ553−iは、“0”となる。
トップ部551−iは、トップ部未着カウンタ553−iをチェックし、トップ部未着カウンタ553−iが“0”であることを検出すると、トップ部バリア状態552−iの値を反転させる。ここでは、トップ部551−iは、トップ部バリア状態552−iを“0”から“1”に変更する。
トップ部未着カウンタ553−iは、“0”となったので、トップ部未着カウンタ553−iの値をトップ部期待カウンタ554−iと同じ値に再設定する。これにより、トップ部未着カウンタ553−iは、再び“4”となる。
バリア同期機構531−iと接続しているハードウェアスレッドは、ポーリングによりトップ部バリア状態552−iをチェックし、トップ部バリア状態552−iがビットマップに書き込んだ値と同じとなったので、全体のバリア同期完了と判断して、次のバリア同期ポイントまでスレッドを実行する。
バリア同期機構531−iは、ボトム部同期完了をすべてのバリア同期機構531−iにブロードキャストし、各バリア同期機構531−iのトップ部551−iはそれぞれ同じ動作を行う。そのため、最後に同期完了するバリア同期機構がどれであっても、バリア同期機構間の最短通信時間で全バリア同期機構に同期完了を通知できる。
第1の実施の形態に係るバリア同期機構によれば、簡易な構成でバリアバンク間の同期を実現できる。
第1の実施の形態に係るバリア同期機構によれば、各バリア同期機構は、自身が属するバリアバンク内のハードウェアスレッドの同期完了と他のバリアバンク同期機構のバリア同期完了の通知を処理するので、従来の集中型バリア同期管理機構に比べて負荷が低くなり処理時間を短くできる。
トップ部541にボトム部551と同様にビットマップを用いると、同期させるバリアバンクの数が増大したときに必要な資源数も増大してしまう。
第1の実施の形態に係るバリア同期機構によれば、トップ部にカウンタを用いているので、同期させるバリアバンクの数が増大しても、資源の増加を抑えることができる。
(第2の実施の形態)
第2の実施の形態では、3階層のバリアバンク間の同期について説明する。
図5は、第2の実施の形態に係るCPUの構成図である。
CPU601は、図2のCPU401に対応する。
CPU601は、プロセッサコア621−a(a=1〜4)およびバリア同期機構631を備える。また、プロセッサコア621−aおよびバリア同期機構631は、バリアバンク同期の最小単位であるバリアバンク611に含まれている。プロセッサコア621−aおよびバリア同期機構631は、バスにより接続されている。
プロセッサコア621−aは、同時マルチスレッディング機能を有しており、スレッドを実行するハードウェアスレッド622−a−b(b=1、2)を備える。
図5では、1つのプロセッサコアが2つのハードウェアスレッドを提供している。ソフトウェアスレッドを発行するソフトウェア(例えば、オペレーティングシステム(OS))からは、各ハードウェアスレッド622−a−bは、論理的なCPU(仮想CPU)として扱われる。
ハードウェアスレッド622は、スレッドを実行し、バリア同期ポイントに到着した場合、シェア部バリア状態642を読み出し、読み出した値を反転させた値を割り当てられたビットマップに書き込む。
また、ハードウェアスレッド622は、ポーリングによりシェア部バリア状態642をチェックし、シェア部バリア状態642がビットマップ653に書き込んだ値と同じであれば、同期完了と判断して、次のバリア同期ポイントまでスレッドを実行する。
バリア同期機構631は、バリア同期の制御を行い、例えば、ハードウェア回路やプロセッサにより実現される。
バリア同期機構631は、シェア部641、ボトム部651、ミドル部661、およびトップ部671を備える。
シェア部641は、シェア部バリア状態642、BANKID643、SYNCID644を有する。
シェア部バリア状態642は、バリア同期の制御に用いられる情報である。シェア部バリア状態642は、バリア同期対象の全バリアバンクの同期が完了しているか否かを示す情報である。シェア部バリア状態642は、“0”または“1”である。
BANKID643は、バリア同期機構631を識別する識別子(ID)である。
SYNCID644は、バリア同期機構631が属するグループを識別する識別子(ID)である。
ボトム部651は、ボトム部バリア状態652、ビットマップ群653、ボトム部ターゲットID654、ボトム部ターゲットマスク655を有する。
ボトム部バリア状態652は、バリア同期の制御に用いられる情報である。ボトム部バリア状態652は、“0”または“1”である。
ビットマップ群653は、複数のビットマップを含む。ビットマップは、ハードウェアスレッド622のバリア同期ポイントへの到着を示す情報である。ビットマップは、バリアバンク611内のハードウェアスレッド622と同じ数だけ用意されており、各ビットマップは、各ハードウェアスレッド622に割り当てられる。すなわち、ビットマップは、割り当てられたハードウェアスレッド622のバリア同期ポイントへの到着を示す。ビットマップの値は、“0”または“1”である。
ボトム部ターゲットID654は、ボトム部651がボトム部バリア同期完了をブロードキャストするバリア同期機構を示す情報である。
ボトム部ターゲットマスク655は、ボトム部ターゲットID654に対してドントケアビット(don't care bit)の位置を指定する情報である。すなわち、ボトム部ターゲットマスク655は、ボトム部ターゲットID654の任意の値をとることが可能なビットの位置を示す。
ボトム部651は、ビットマップ群653のすべてのビットマップが同じ値且つボトム部バリア状態652と異なる値となった場合、ボトム部バリア状態652の値を反転させる。すなわち、ボトム部バリア状態652は、ビットマップ群653のビットマップと同じ値となる。そして、ボトム部651は、ボトム部ターゲットID654およびボトム部ターゲットマスク655で指定されたバリア同期機構にボトム部バリア同期完了をブロードキャストする。尚、SYNCID644が設定されている場合、ボトム部651は、ボトム部バリア同期完了にSYNCID644をさらに付加してブロードキャストする。
ミドル部661は、ミドル部未着カウンタ662、ミドル部期待カウンタ663、ミドル部ターゲットID664、およびミドル部ターゲットマスク665を有する。
ミドル部未着カウンタ662は、ミドル部661がバリア同期をチェックするバリア同期機構のうち、ボトム部バリア同期完了を送信していないバリア同期機構の数をカウントし、カウントした値を保持する。ミドル部未着カウンタ662は、ボトム部バリア同期完了を受信すると、ミドル部未着カウンタ662の値を1減算する。
ミドル部期待カウンタ663は、ミドル部661がバリア同期をチェックするバリア同期機構の数を示す情報を設定し保持する。
ミドル部ターゲットID664は、ミドル部661がバリア同期完了をブロードキャストするバリア同期機構を示す情報である。
ミドル部ターゲットマスク665は、ミドル部ターゲットID664に対してドントケアビット(don't care bit)の位置を指定する情報である。すなわち、ミドル部ターゲットマスク665は、ミドル部ターゲットID664の任意の値をとることが可能なビットの位置を示す。
ミドル部661は、ミドル部未着カウンタ662が“0”となった場合、ミドル部ターゲットID664およびミドル部ターゲットマスク665で指定されたバリア同期機構にミドル部バリア同期完了をブロードキャストする。また、ミドル部661は、ミドル部未着カウンタ662が“0”となった場合、ミドル部未着カウンタ662の値をミドル部期待カウンタ663の値に再設定する。
トップ部671は、トップ部未着カウンタ672、およびトップ部期待カウンタ673を有する。
トップ部未着カウンタ672は、トップ部671がバリア同期をチェックするバリア同期機構のうち、ミドル部バリア同期完了を送信していないバリア同期機構の数をカウントし、カウントした値を保持する。トップ部未着カウンタ672は、ミドル部バリア同期完了を受信すると、トップ部未着カウンタ672の値を1減算する。
また、トップ部未着カウンタ672は、ミドル部バリア同期完了にSYNCIDが付加されている場合、付加されているSYNCIDがSYNCID644と一致する場合は、トップ部未着カウンタ672の値を1減算する。トップ部未着カウンタ672は、ミドル部バリア同期完了にSYNCIDが付加されている場合、付加されているSYNCIDがSYNCID644と一致しない場合は、トップ部未着カウンタ672の減算を行わない。すなわち、トップ部未着カウンタ672は、ミドル部バリア同期完了に付加されているSYNCIDがSYNCID644と一致するか否かに応じて、ミドル部バリア同期完了を有効または無効な信号として処理を行う
トップ部期待カウンタ673は、トップ部671がバリア同期をチェックするバリア同期機構の数を示す情報を設定し保持する。
トップ部671は、トップ部未着カウンタ672が“0”となった場合、シェア部バリア状態642の値を反転する。また、トップ部671は、トップ部未着カウンタ672が“0”となった場合、トップ部未着カウンタ672の値をトップ部期待カウンタ673の値に再設定する。
ここで、ターゲットID、ターゲットマスク、SYNCIDを用いたブロードキャスト範囲の指定について説明する。尚、ここで述べるターゲットIDおよびターゲットマスクは、ボトム部ターゲットID654およびボトム部ターゲットマスク655、もしくはミドル部ターゲットID664およびミドル部ターゲットマスク665である。バリア同期完了の通知は、ボトム部652またはミドル部662により行われる。
図6A、6Bは、バリア同期完了の通知を示す図である。
図6A、6Bにおいて、32個のバリア同期機構0xk(k=00〜1f)がある。
バリア同期機構0xkのそれぞれのBANKIDは0xkである。例えば、バリア同期機構0x00のBANKIDは、0x00である。尚、”0x”は、16進数表記であることを示す。例えば、0x00を2進数表記で表すと、0000_0000となる。
ここで、バリア同期機構0x00がバリア同期完了をブロードキャストする場合について説明する。
バリア同期機構0x00は、バリア同期完了をターゲットIDおよびターゲットマスクで指定されるバリア同期機構にブロードキャストする。
バリア同期機構0x00には、ターゲットIDが0x00、ターゲットマスクが0x14として設定されているとする。
ターゲットID0x00を2進数表記であらわすと0000_0000である。
ターゲットマスク0x14を2進数表記であらわすと0001_0100である。すなわち、ターゲットIDの上位から4ビット目と6ビット目が任意の値を取ることができることを示す。
バリア同期機構0x00は、バリア同期完了をブロードキャストするバリア同期機構(ブロードキャスト範囲)のBANKIDをターゲットIDおよびターゲットマスクを用いて算出する。
ターゲットID=0000_0000、ターゲットマスク=0001_0100であるので、バリア同期機構0x00は、ターゲットID=0000_0000の上位から4ビット目と6ビット目を任意の値とするすべての組み合わせを算出する。
それにより、0000_0000、0000_0100、0001_0000、0001_0100が算出される。これらを16進数表記で表すと、0x00、0x04、0x10、0x14である。
すなわち、バリア同期完了がブロードキャストされるバリア同期機構は、バリア同期機構0x00、0x04、0x10、0x14である。
よって、バリア同期機構0x00は、バリア同期機構0x00、0x04、0x10、0x14にバリア同期完了をブロードキャストする。
バリア同期完了を通知する宛先のIDをリストを用いて管理すると、通知するバリアバンクが増大すると必要な資源数も増大してしまう。上記のようにターゲットIDとターゲットマスクを用いることで、資源数の増大を抑えることができる。
宛先がnビットで表現されるIDで指示できる場合に、ブロードキャストの範囲をnビットのターゲットIDとnビットのターゲットマスクの2つの値でしている。
この方法では、2^m(0<=m<=n)個のバリア同期機構をブロードキャスト範囲として指定できるが、任意のバリアバンク集合を構成することができない。
任意のバリアバンク集合を構成する方法として、SYNCIDを用いたバリア同期完了の通知について説明する。
図6Bにおいて、バリア同期機構0x04がバリア同期完了をブロードキャストする場合について説明する。
バリア同期機構0x04は、バリア同期完了をターゲットIDおよびターゲットマスクで指定されるバリア同期機構にブロードキャストする。
バリア同期機構0x04には、ターゲットIDが0x04、ターゲットマスクが0x0bとして設定されているとする。
また、バリア同期機構0x04、0x05、0x06、0x0c、0x0d、0x0eは、SYNCIDとして0x11を有する。バリア同期機構0x07、0x0fは、SYNCIDとして0x00を有する。すなわち、バリア同期機構0x04、0x05、0x06、0x0c、0x0d、0x0eが第1のバリアバンク集合、バリア同期機構0x07、0x0fが第2のバリアバンク集合として設定されている。
ターゲットID0x04を2進数表記であらわすと0000_0100である。
ターゲットマスク0x0bを2進数表記であらわすと0000_1011である。すなわち、ターゲットIDの上位から5ビット目、7ビット目、および8ビット目が任意の値を取ることができることを示す。
バリア同期機構0x04は、バリア同期完了をブロードキャストするバリア同期機構(ブロードキャスト範囲)のBANKIDをターゲットIDおよびターゲットマスクを用いて算出する。
ターゲットID=0000_0100、ターゲットマスク=0000_1011であるので、バリア同期機構0x04は、ターゲットID=0000_0100の上位から5ビット目、7ビット目、および8ビット目を任意の値とするすべての組み合わせを算出する。
それにより、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とを比較し、一致する場合は有効な信号として処理を行い、一致しない場合は、無効な信号として処理する。
図6Bにおいて、バリア同期機構0x04、0x05、0x06、0x0c、0x0d、0x0eは、自身が有するSYNCIDとバリア同期完了に付加されているSYNCIDとが一致するため、バリア同期完了を有効な信号として処理(例えば、未着カウンタの減算)を行う。また、バリア同期機構0x07、0x0fは、自身が有するSYNCIDとバリア同期完了に付加されているSYNCIDとが一致しないため、バリア同期完了を無効な信号として処理(例えば、バリア同期完了の通知を無視し、未着カウンタの減算を行わない)する。
このように、ターゲットID、ターゲットマスク、SYNCIDを用いることにより、任意のバリアバンク集合に対して、有効なバリア同期完了をブロードキャストすることができる。
尚、上述のターゲットIDおよびターゲットマスクを用いたバリア同期完了の宛先の算出は、他の実施の形態においても同様に用いられる。
図7A〜Eは、第2の実施の形態に係るバリアバンク間同期を示す図である。
図7Aは初期状態、図7B〜7Dは同期中、図7Eは同期完了を示す。
図7では、16個のバリアバンクのバリアバンク間同期の処理について説明する。
図7の16個のバリア同期機構631−m(m=00〜0f)は、それぞれ異なるバリアバンクに属している。また、各バリアバンクは、同一のCPU内にあっても良いし、異なるCPUにあっても良い。
図7の各バリアバンクは、図5のバリアバンク611と同様である。図7では図を簡単にするため、バリアバンク内のバリア同期機構631−mのみを記載し、プロセッサコアについては、記載を省略している。
また、図7では、4つのバリアバンクごとに4つの第2階層グループが設定されている。図7においては、第1の第2階層グループのバリア同期機構はバリア同期機構631−00〜631−03、第2の第2階層グループのバリア同期機構はバリア同期機構631−04〜631−07、第3の第2階層グループのバリア同期機構はバリア同期機構631−08〜631−0b、第4の第2階層グループのバリア同期機構はバリア同期機構631−0c〜631−0fである。
バリア同期機構631−mは、シェア部641−m、ボトム部651−m、ミドル部661−m、およびトップ部671−mを備える。
シェア部641−mは、シェア部バリア状態642−m、BANKID643−m、およびSYNCID644−mを有する。
ボトム部651−mは、ボトム部バリア状態652−m、ビットマップ群653−m、ボトム部ターゲットID654−m、およびボトム部ターゲットマスク655−mを有する。
ミドル部661−mは、ミドル部未着カウンタ662−m、ミドル部期待カウンタ663−m、ミドル部ターゲットID664−m、およびミドル部ターゲットマスク665−mを有する。
トップ部671−mは、トップ部未着カウンタ672−m、およびトップ部期待カウンタ673−mを有する。
図7のバリア同期機構631−m、シェア部641−m、ボトム部651−m、ミドル部661−m、トップ部671−m、シェア部バリア状態642−m、BANKID643−m、SYNCID644−m、ボトム部バリア状態652−m、ビットマップ群653−m、ボトム部ターゲットID654−m、ボトム部ターゲットマスク655−m、ミドル部未着カウンタ662−m、ミドル部期待カウンタ663−m、ミドル部ターゲットID664−m、ミドル部ターゲットマスク665−m、トップ部未着カウンタ672−m、およびトップ部期待カウンタ673−mは、図5のバリア同期機構631、シェア部641、ボトム部651、ミドル部661、トップ部671、シェア部バリア状態642、BANKID643、SYNCID644、ボトム部バリア状態652、ビットマップ群653、ボトム部ターゲットID654、ボトム部ターゲットマスク655、ミドル部未着カウンタ662、ミドル部期待カウンタ663、ミドル部ターゲットID664、ミドル部ターゲットマスク665、トップ部未着カウンタ672、およびトップ部期待カウンタ673にそれぞれ対応する。
図7Aに示す初期状態において、シェア部バリア状態642−mは、0である。
BANKID643−mは、それぞれ0xmと設定されている。
また、SYNCID644−mは、未設定である。
ボトム部バリア状態652−mは、0である。
ビットマップ群653−mの各ビットマップは、0である。
ボトム部ターゲットID654−mは0x00であり、ボトム部ターゲットマスク655−mは0x0cである。
ミドル部未着カウンタ662−00、662−04、662−08、662−0cは、16である。
ミドル部未着カウンタ662−01〜662−03、662−05〜662−07、662−09〜662−0b、662−0d〜662−0fは、未設定である。
ミドル部期待カウンタ663−00、663−04、663−08、663−0cは、16である。
ミドル部期待カウンタ663−01〜663−03、663−05〜663−07、663−09〜663−0b、663−0d〜663−0fは、未設定である。
ミドル部ターゲットID664−00、664−04、664−08、664−0cは、それぞれ0x00、0x04、0x08、および0x0cである。
ミドル部ターゲットID664−01〜664−03、664−05〜664−07、664−09〜664−0b、664−0d〜664−0fは、未設定である。
ミドル部ターゲットマスク665−00、665−04、665−08、665−0cは、0x03である。
ミドル部ターゲットマスク665−01〜665−03、665−05〜665−07、665−09〜665−0b、665−0d〜665−0fは、未設定である。
トップ部未着カウンタ672−mは、1である。
トップ部期待カウンタ673−mは、1である。
ミドル部未着カウンタ662、ミドル部期待カウンタ663、ミドル部ターゲットID664、およびミドル部ターゲットマスク665が設定されているバリア同期機構631は、ミドル部有効バリアバンクと呼ぶ。
ミドル部未着カウンタ662、ミドル部期待カウンタ663、ミドル部ターゲットID664、およびミドル部ターゲットマスク665が未設定であるバリア同期機構631は、ミドル部無効バリアバンクと呼ぶ。
図7において、バリア同期機構631−00、631−04、631−08、631−0cは、ミドル部有効バリアバンクであり、バリア同期機構631−01〜631−03、631−05〜631−07、631−09〜631−0b、631−0d〜631−0fは、ミドル部無効バリアバンクである。
図7Bにおいて、バリア同期機構631−mと接続しているハードウェアスレッドにおいて、処理が実行されている。
最初にビットマップ群653−01のすべてのビットマップが“1”となったとする。すなわち、バリア同期機構631−01と接続するすべてのハードウェアスレッドがバリア同期ポイントに到着したものとする。ボトム部651−01は、ボトム部バリア状態652−01の値を反転、すなわち“1”にする。
そして、ボトム部651−01は、ボトム部ターゲットID654−01およびボトム部ターゲットマスク655−01で指定されるバリア同期機構631−00、631−04、631−08、631−0cのミドル部661−00、661−04、661−08、661−0cにボトム部バリア同期完了をブロードキャストする。
ボトム部バリア同期完了を受信したミドル部未着カウンタ662−00、662−04、662−08、662−0cは、それぞれミドル部未着カウンタ662−00、662−04、662−08、662−0cを1減算する。それにより、ミドル部未着カウンタ662−00、662−04、662−08、662−0cの値は、“16”から“15”となる。
以下、同様にビットマップ群653−00、653−02、653−04〜653−0fのすべてのビットマップが“1”となり、ボトム部バリア状態652−00、652−02、652−04〜652−0fは“1”となる。
そして、ボトム部651−00、651−02、651−04〜651−0fは、ミドル部661−00、661−04、661−08、661−0cにボトム部バリア同期完了をブロードキャストする。
ミドル部未着カウンタ662−00、662−04、662−08、662−0cは、ボトム部バリア同期完了を受信するごとに、それぞれミドル部未着カウンタ662−00、662−04、662−08、662−0cを1減算する。
図7Cにおいて、最後にビットマップ群653−03のすべてのビットマップが“1”となる。ボトム部651−03は、ボトム部バリア状態652−03の値を反転、すなわち“1”にする。
そして、ボトム部651−03は、ボトム部ターゲットID654−03およびボトム部ターゲットマスク655−03で指定されるバリア同期機構631−00、631−04、631−08、631−0cのミドル部661−00、661−04、661−08、661−0cにボトム部バリア同期完了をブロードキャストする。
ボトム部バリア同期完了を受信したミドル部未着カウンタ662−00、662−04、662−08、662−0cは、それぞれミドル部未着カウンタ662−00、662−04、662−08、662−0cを1減算する。それにより、ミドル部未着カウンタ662−00、662−04、662−08、662−0cの値は、“1”から“0”となる。
図7Dにおいて、ミドル部661−00、661−04、661−08、661−0cは、それぞれミドル部未着カウンタ662−00、662−04、662−08、662−0cが“0”となったことを検出すると、ミドル部ターゲットID664−00、664−04、664−08、664−0cおよびミドル部ターゲットマスク665−00、665−04、665−08、665−0cで指定されるバリア同期機構のトップ部671にミドル部バリア同期完了をブロードキャストする。
ミドル部661−00は、ミドル部未着カウンタ662−00が“0”となったことを検出すると、ミドル部ターゲットID664−00およびミドル部ターゲットマスク665−00で指定されるバリアバンク同期機構631−00〜631−03のトップ部671−00〜671−03にミドル部バリア同期完了をブロードキャストする。また、ミドル部未着カウンタ662−00は、ミドル部未着カウンタ662−00の値をミドル部期待カウンタ653−00の値に再設定する。
ミドル部661−04は、ミドル部未着カウンタ662−04が“0”となったことを検出すると、ミドル部ターゲットID664−04およびミドル部ターゲットマスク665−04で指定されるバリアバンク同期機構631−04〜631−07のトップ部671−04〜671−07にミドル部バリア同期完了をブロードキャストする。また、ミドル部未着カウンタ662−04は、ミドル部未着カウンタ662−04の値をミドル部期待カウンタ653−04の値に再設定する。
ミドル部661−08は、ミドル部未着カウンタ662−08が“0”となったことを検出すると、ミドル部ターゲットID664−08およびミドル部ターゲットマスク665−08で指定されるバリアバンク同期機構631−08〜631−0bのトップ部671−08〜671−0bにミドル部バリア同期完了をブロードキャストする。また、ミドル部未着カウンタ662−08は、ミドル部未着カウンタ662−08の値をミドル部期待カウンタ653−08の値に再設定する。
ミドル部661−0cは、ミドル部未着カウンタ662−0cが“0”となったことを検出すると、ミドル部ターゲットID664−0cおよびミドル部ターゲットマスク665−0cで指定されるバリアバンク同期機構631−0c〜631−0fのトップ部671−0c〜671−0fにミドル部バリア同期完了をブロードキャストする。また、ミドル部未着カウンタ662−0cは、ミドル部未着カウンタ662−0cの値をミドル部期待カウンタ653−0cの値に再設定する。
ミドル部バリア同期完了を受信したトップ部未着カウンタ672−mは、トップ部未着カウンタ672−mを1減算する。それにより、トップ部未着カウンタ672−mの値は、“1”から“0”となる。
図7Eにおいて、トップ部671−mは、トップ部未着カウンタ672−mが“0”となったことを検出すると、シェア部バリア状態642−mの値を反転させる。それにより、シェア部バリア状態642−mの値は“0”から“1”となる。
また、トップ部未着カウンタ672−mは、トップ部未着カウンタ672−mの値をトップ部期待カウンタ673−mの値に再設定する。
バリア同期機構631−mと接続するハードウェアスレッドは、シェア部バリア状態642−mがビットマップに書き込んだ値(1)と同じとなったことを確認し、次のバリア同期ポイントまで処理を行う。
第2の実施の形態に係るバリア同期機構によれば、簡易な構成でバリアバンク間の同期を実現できる。
従来の集中型バリア同期管理機構では、バリア同期行うプロセサコア数が増大すると、ネットワークを通過する通信数が増え、ネットワークの輻輳が発生する。
第1の実施の形態の2階層のバリア同期では、n=全バリアバンク数とすると、n^2の通信が発生するが、第2の実施の形態の3階層のバリア同期の通信数は、m=第2階層のバリアバンクグループ数とすると、n*(m+1)であり、大幅に削減できる。したがって、ネットワークの輻輳を防止できる。
(第3の実施の形態)
第3の実施の形態では、4階層のバリアバンク間の同期について説明する。
図8は、第3の実施の形態に係るCPUの構成図である。
CPU701は、図2のCPU401に対応する。
CPU701は、プロセッサコア721−a(a=1〜4)およびバリア同期機構731を備える。また、プロセッサコア721−aおよびバリア同期機構731は、バリアバンク同期の最小単位であるバリアバンク711に含まれている。プロセッサコア721−aおよびバリア同期機構731は、バスにより接続されている。
プロセッサコア721−aは、同時マルチスレッディング機能を有しており、スレッドを実行するハードウェアスレッド722−a−b(b=1、2)を備える。
ハードウェアスレッド722は、図5のハードウェアスレッド622と同様の機能を有するため説明は省略する。
バリア同期機構731は、バリア同期の制御を行い、例えば、ハードウェア回路やプロセッサにより実現される。
バリア同期機構731は、シェア部741、ボトム部751、ミドル部761、およびトップ部771を備える。
シェア部741は、シェア部バリア状態742、BANKID743、SYNCID744を有する。
シェア部バリア状態742、BANKID743、およびSYNCID744は、図5のシェア部バリア状態642、BANKID643、およびSYNCID644とそれぞれ同様の機能を有するため説明は省略する。
ボトム部751は、ボトム部バリア状態752、ビットマップ群753、ボトム部ターゲットID754、およびボトム部ターゲットマスク755を有する。
ボトム部751、ボトム部バリア状態752、ビットマップ群753、ボトム部ターゲットID754、およびボトム部ターゲットマスク755は、図5のボトム部バリア状態652、ビットマップ群653、ボトム部ターゲットID654、およびボトム部ターゲットマスク655とそれぞれ同様の機能を有するため説明は省略する。
ミドル部761は、ミドル部未着カウンタ762、ミドル部期待カウンタ763、ミドル部ターゲットID764、ミドル部ターゲットマスク765、およびミドル部宛先階層766を有する。
ミドル部未着カウンタ762は、ミドル部761がバリア同期をチェックするバリア同期機構のうち、ボトム部バリア同期完了を送信していないバリア同期機構の数をカウントし、カウントした値を保持する。ミドル部未着カウンタ762は、ボトム部バリア同期完了を受信すると、ミドル部未着カウンタ762の値を1減算する。また、ミドル部未着カウンタ762は、TO_MIDDLE=1が付加されたミドル部バリア同期完了を受信すると、ミドル部未着カウンタ762の値を1減算する。
ミドル部期待カウンタ763は、ミドル部761がバリア同期をチェックするバリア同期機構の数を示す情報を設定し保持する。
ミドル部ターゲットID764は、ミドル部761がバリア同期完了をブロードキャストするバリア同期機構を示す情報である。
ミドル部ターゲットマスク765は、ミドル部ターゲットID764に対してドントケアビット(don't care bit)の位置を指定する情報である。すなわち、ミドル部ターゲットマスク765は、ミドル部ターゲットID764の任意の値をとることが可能なビットの位置を示す。
ミドル部宛先階層766は、受信したミドル部バリア同期完了を処理する処理部(ミドル部またはトップ部)を示す。ミドル部宛先階層766は、“1”または“0”である。“1”は、ミドル部同期完了を受信したミドル部761がミドル部同期完了の受信に対する処理を実行すること示す。“0”は、 ミドル部同期完了を受信したトップ部771がミドル部同期完了の受信に対する処理を実行すること示す。尚、図9以降の図面では、“1”を”MIDDLE”、“0”を”TOP”として表している。
ミドル部761は、ミドル部未着カウンタ762が“0”となった場合、ミドル部ターゲットID764およびミドル部ターゲットマスク765で指定されたバリア同期機構にミドル部バリア同期完了をブロードキャストする。ミドル部761は、ミドル部バリア同期完了にミドル部宛先階層766の値を付加する。例えば、ミドル部761は、ミドル部宛先階層766が“1”の場合、TO_MIDDLE=1をミドル部バリア同期完了に付加し、ミドル部宛先階層766が“0”の場合、TO_MIDDLE=0をミドル部バリア同期完了に付加する。また、ミドル部761は、SYNCID744が設定されている場合は、SYNCID744をミドル部バリア同期完了にさらに付加する。
また、ミドル部761は、ミドル部未着カウンタ762が“0”となった場合、ミドル部未着カウンタ762の値をミドル部期待カウンタ763の値に再設定する。
トップ部771は、トップ部未着カウンタ772、およびトップ部期待カウンタ773を有する。
トップ部未着カウンタ772は、トップ部771がバリア同期をチェックするバリア同期機構のうち、TO_MIDDLE=0が付加されたミドル部バリア同期完了を送信していないバリア同期機構の数をカウントし、カウントした値を保持する。トップ部未着カウンタ772は、TO_MIDDLE=0が付加されたミドル部バリア同期完了を受信すると、トップ部未着カウンタ772の値を1減算する。
また、トップ部未着カウンタ772は、TO_MIDDLE=0が付加されたミドル部バリア同期完了にSYNCIDが付加されている場合、付加されているSYNCIDがSYNCID744と一致する場合は、トップ部未着カウンタ772の値を1減算する。トップ部未着カウンタ772は、TO_MIDDLE=0が付加されたミドル部バリア同期完了にSYNCIDが付加されている場合、付加されているSYNCIDがSYNCID744と一致しない場合は、トップ部未着カウンタ772の減算を行わない。すなわち、トップ部未着カウンタ772は、ミドル部バリア同期完了に付加されているSYNCIDがSYNCID744と一致するか否かに応じて、ミドル部バリア同期完了を有効または無効な信号として処理を行う。
トップ部期待カウンタ773は、トップ部771がバリア同期をチェックするバリア同期機構の数を示す情報を設定し保持する。
トップ部771は、トップ部未着カウンタ772が“0”となった場合、シェア部バリア状態742の値を反転する。また、トップ部771は、トップ部未着カウンタ772が“0”となった場合、トップ部未着カウンタ772の値をトップ部期待カウンタ773の値に再設定する。
図9A〜Eは、第3の実施の形態に係るバリアバンク間同期を示す図である。
図9Aは初期状態、図9B〜9Dは同期中、図9Eは同期完了を示す。
図9では、64個のバリアバンクのバリアバンク間同期の処理について説明する。
図9の64個のバリア同期機構731−s(s=00〜3f)は、それぞれ異なるバリアバンクに属している。また、各バリアバンクは、同一のCPU内にあっても良いし、異なるCPUにあっても良い。
図9の各バリアバンクは、図5のバリアバンク611と同様である。図7では図を簡単にするため、バリアバンク内のバリア同期機構731−sのみを記載し、プロセッサコアについては、記載を省略している。
図9では、16個のバリアバンクごとに4つの第2階層グループが設定されている。また、8個のバリアバンクごとに8つの第3階層グループが設定されている。
図10A〜Cは、第3の実施の形態に係るバリア同期機構の構成図である。
図10A〜Cに示すバリア同期機構は、図9A示す初期状態のバリア同期機構である。
図10Aは、バリア同期機構731−p(p=01〜03、05〜0b、0d〜0f、11〜13、15〜1b、1d〜1f、21〜23、25〜2b、2d〜2f、31〜33、35〜3b、3d〜3f)の構成を示す。
バリア同期機構731−pは、シェア部741−p、ボトム部751−p、ミドル部761−p、およびトップ部771−pを備える。
シェア部741−pは、シェア部バリア状態742−p、BANKID743−p、SYNCID744−pを有する。
ボトム部751−pは、ボトム部バリア状態752−p、ビットマップ群753−p、ボトム部ターゲットID754−p、およびボトム部ターゲットマスク755−pを有する。
ミドル部761−pは、ミドル部未着カウンタ762−p、ミドル部期待カウンタ763−p、ミドル部ターゲットID764−p、ミドル部ターゲットマスク765−p、およびミドル部宛先階層766−pを有する。
トップ部771−pは、トップ部未着カウンタ772−p、およびトップ部期待カウンタ773−pを有する。
シェア部バリア状態742−p、BANKID743−p、SYNCID744−p、ボトム部バリア状態752−p、ビットマップ群753−p、ボトム部ターゲットID754−p、ボトム部ターゲットマスク755−p、ミドル部未着カウンタ762−p、ミドル部期待カウンタ763−p、ミドル部ターゲットID764−p、ミドル部ターゲットマスク765−p、ミドル部宛先階層766−p、トップ部未着カウンタ772−p、およびトップ部期待カウンタ773−pは、図8のシェア部バリア状態742、BANKID743、SYNCID744、ボトム部バリア状態752、ビットマップ群753、ボトム部ターゲットID754、ボトム部ターゲットマスク755、ミドル部未着カウンタ762、ミドル部期待カウンタ763、ミドル部ターゲットID764、ミドル部ターゲットマスク765、ミドル部宛先階層766、トップ部未着カウンタ772、およびトップ部期待カウンタ773にそれぞれ対応する。
初期状態において、シェア部バリア状態742−pは、0である。
BANKID743−pは、それぞれ0xpと設定されている。バリア同期機構731−pが有するBANKID743−p(=0xp)を自IDとも呼ぶ。
また、SYNCID744−pは、未設定である。
ボトム部バリア状態752−pは、0である。
ビットマップ群753−pの各ビットマップは、0である。
ボトム部ターゲットID754−pはBANKID743−p & 0xf0であり、ボトム部ターゲットマスク755−pは0x00である。”&”は、論理積を示す。BANKID743−p & 0xf0は、BANKID743−pの値と0xf0の論理積である。
ミドル部未着カウンタ762−pは、未設定である。
ミドル部期待カウンタ763−pは、未設定である。
ミドル部ターゲットID764−pは、未設定である。
ミドル部ターゲットマスク765−pは、未設定である。
ミドル部宛先階層766−pは、未設定である。
トップ部未着カウンタ672−pは、1である。
トップ部期待カウンタ673−pは、1である。
ミドル部未着カウンタ762−p、ミドル部期待カウンタ763−p、ミドル部ターゲットID764−p、ミドル部ターゲットマスク765−p、およびミドル部宛先階層766−pが未設定であるバリア同期機構731−pは、ミドル部無効バリアバンクと呼ぶ。
図10Bは、バリア同期機構731−q(q=00、10、20、30)の構成を示す。
バリア同期機構731−qは、シェア部741−q、ボトム部751−q、ミドル部761−q、およびトップ部771−qを備える。
シェア部741−qは、シェア部バリア状態742−q、BANKID743−q、SYNCID744−qを有する。
ボトム部751−qは、ボトム部バリア状態752−q、ビットマップ群753−q、ボトム部ターゲットID754−q、およびボトム部ターゲットマスク755−qを有する。
ミドル部761−qは、ミドル部未着カウンタ762−q、ミドル部期待カウンタ763−q、ミドル部ターゲットID764−q、ミドル部ターゲットマスク765−q、およびミドル部宛先階層766−qを有する。
トップ部771−qは、トップ部未着カウンタ772−q、およびトップ部期待カウンタ773−qを有する。
シェア部バリア状態742−q、BANKID743−q、SYNCID744−q、ボトム部バリア状態752−q、ビットマップ群753−q、ボトム部ターゲットID754−q、ボトム部ターゲットマスク755−q、ミドル部未着カウンタ762−q、ミドル部期待カウンタ763−q、ミドル部ターゲットID764−q、ミドル部ターゲットマスク765−q、ミドル部宛先階層766−q、トップ部未着カウンタ772−q、およびトップ部期待カウンタ773−qは、図8のシェア部バリア状態742、BANKID743、SYNCID744、ボトム部バリア状態752、ビットマップ群753、ボトム部ターゲットID754、ボトム部ターゲットマスク755、ミドル部未着カウンタ762、ミドル部期待カウンタ763、ミドル部ターゲットID764、ミドル部ターゲットマスク765、ミドル部宛先階層766、トップ部未着カウンタ772、およびトップ部期待カウンタ773にそれぞれ対応する。
初期状態において、シェア部バリア状態742−qは、0である。
BANKID743−qは、それぞれ0xqと設定されている。バリア同期機構731−qが有するBANKID743−q(=0xq)を自IDとも呼ぶ。
また、SYNCID744−qは、未設定である。
ボトム部バリア状態752−qは、0である。
ビットマップ群753−qの各ビットマップは、0である。
ボトム部ターゲットID754−qはBANKID743−q & 0xf0であり、ボトム部ターゲットマスク755−qは0x00である。
ミドル部未着カウンタ762−qは、16である。
ミドル部期待カウンタ763−qは、16である。
ミドル部ターゲットID764−qは、0x04である。
ミドル部ターゲットマスク765−qは、0x38である。
ミドル部宛先階層766−qは、1である。
トップ部未着カウンタ672−qは、1である。
トップ部期待カウンタ673−qは、1である。
図10Cは、バリア同期機構731−r(r=04、0c、14、1c、24、2c、34、3c)の構成を示す。
バリア同期機構731−rは、シェア部741−r、ボトム部751−r、ミドル部761−r、およびトップ部771−rを備える。
シェア部741−rは、シェア部バリア状態742−r、BANKID743−r、SYNCID744−rを有する。
ボトム部751−rは、ボトム部バリア状態752−r、ビットマップ群753−r、ボトム部ターゲットID754−r、およびボトム部ターゲットマスク755−rを有する。
ミドル部761−rは、ミドル部未着カウンタ762−r、ミドル部期待カウンタ763−r、ミドル部ターゲットID764−r、ミドル部ターゲットマスク765−r、およびミドル部宛先階層766−rを有する。
トップ部771−rは、トップ部未着カウンタ772−r、およびトップ部期待カウンタ773−rを有する。
シェア部バリア状態742−r、BANKID743−r、SYNCID744−r、ボトム部バリア状態752−r、ビットマップ群753−r、ボトム部ターゲットID754−r、ボトム部ターゲットマスク755−r、ミドル部未着カウンタ762−r、ミドル部期待カウンタ763−r、ミドル部ターゲットID764−r、ミドル部ターゲットマスク765−r、ミドル部宛先階層766−r、トップ部未着カウンタ772−r、およびトップ部期待カウンタ773−rは、図8のシェア部バリア状態742、BANKID743、SYNCID744、ボトム部バリア状態752、ビットマップ群753、ボトム部ターゲットID754、ボトム部ターゲットマスク755、ミドル部未着カウンタ762、ミドル部期待カウンタ763、ミドル部ターゲットID764、ミドル部ターゲットマスク765、ミドル部宛先階層766、トップ部未着カウンタ772、およびトップ部期待カウンタ773にそれぞれ対応する。
初期状態において、シェア部バリア状態742−rは、0である。
BANKID743−rは、それぞれ0xrと設定されている。バリア同期機構731−rが有するBANKID743−r(=0xr)を自IDとも呼ぶ。
また、SYNCID744−rは、未設定である。
ボトム部バリア状態752−rは、0である。
ビットマップ群753−rの各ビットマップは、0である。
ボトム部ターゲットID754−rはBANKID743−r & 0xf0であり、ボトム部ターゲットマスク755−rは0x00である。
ミドル部未着カウンタ762−rは、4である。
ミドル部期待カウンタ763−rは、4である。
ミドル部ターゲットID764−rは、0xrである。すなわち、BANKID743−rと同じ値である。
ミドル部ターゲットマスク765−rは、0x07である。
ミドル部宛先階層766−rは、0である。
トップ部未着カウンタ672−rは、1である。
トップ部期待カウンタ673−rは、1である。
先ず、図9Aの初期状態において、各バリアバンクのハードウェアスレッドにおいて処理が開始される。
図9Bの上部に示すように、バリア同期機構731−02のビットマップ群753−02のすべてのビットマップが“1”となり、ボトム部バリア状態752−02が“0”から“1”に変更されたとする。
ボトム部751−02は、ボトム部バリア同期完了をバリア同期機構731−00に通知する。
ボトム部バリア同期完了を受信したミドル部未着カウンタ762−00は、ミドル部未着カウンタ762−00を1減算する。
以下、同様にバリア同期機構731−00〜731−01、731−03〜731−0c、731−0e〜731−0fのビットマップ群753−00〜753−01、753−03〜753−0c、753−0e〜753−0fのすべてのビットマップが“1”となり、ボトム部バリア状態752−00〜752−01、752−03〜752−0c、752−0e〜752−0fが“0”から“1”に変更されたとする。
ボトム部751−00〜751−01、751−03〜751−0c、751−0e〜751−0fは、ボトム部バリア同期完了をバリア同期機構731−00に通知する。
ミドル部未着カウンタ762−00は、ボトム部バリア同期完了を受信する度にミドル部未着カウンタ762−00を1減算する。
図9Bの下部に示すように、バリア同期機構731−0dのビットマップ群753−0dのすべてのビットマップが“1”となり、ボトム部バリア状態752−0dが“0”から“1”に変更されたとする。
ボトム部751−0dは、ボトム部バリア同期完了をバリア同期機構731−00に通知する。
ボトム部バリア同期完了を受信したミドル部未着カウンタ762−00は、ミドル部未着カウンタ762−00を1減算する。これにより、ミドル部未着カウンタ762−00の値は“0”となる。
図9Cにおいて、バリア同期機構731−00のミドル部761−00は、ミドル部未着カウンタ762−00が“0”となったことを検出し、ミドル部同期完了をバリア同期機構731−rにブロードキャストする。尚、ミドル部761−00は、ミドル部同期完了に宛先階層766−00(TO_MIDDLE=1)を付加する。
また、ミドル部未着カウンタ762−00は、ミドル部未着カウンタ762−00を期待カウンタ763−00の値(16)に再設定する。
TO_MIDDLE=1が付加されたミドル部同期完了を受信したミドル部761−rは、ミドル部未着カウンタ762−rを1減算する。
以下同様に、バリア同期機構731−10〜731−3fのビットマップ群753−10〜753−3fのすべてのビットマップが“1”となり、ボトム部バリア状態752−10〜752−3fが“0”から“1”に変更されたとする。
ボトム部751−10〜751−1fは、ボトム部バリア同期完了をバリア同期機構731−10に通知する。
ボトム部751−20〜751−2fは、ボトム部バリア同期完了をバリア同期機構731−20に通知する。
ボトム部751−30〜751−3fは、ボトム部バリア同期完了をバリア同期機構731−30に通知する。
ミドル部未着カウンタ762−10、762−20、カウンタ762−30は、それぞれボトム部バリア同期完了を受信する度にミドル部未着カウンタ762−10、762−20、762−30を1減算する。
バリア同期機構731−10、731−20のミドル部761−10、761−20は、それぞれミドル部未着カウンタ762−10、762−20が“0”となったことを検出し、ミドル部同期完了をバリア同期機構731−rにブロードキャストする。尚、ミドル部761−10、761−20は、ミドル部同期完了に宛先階層766−10、766−20(TO_MIDDLE=1)を付加する。
また、ミドル部未着カウンタ762−10、762−20は、それぞれミドル部未着カウンタ762−10、762−20を期待カウンタ763−10、763−20の値(16)に再設定する。
ミドル部761−rは、TO_MIDDLE=1が付加されたミドル部同期完了を受信する度にミドル部未着カウンタ762−rを1減算する。
図9Dにおいて、バリア同期機構731−30のミドル部761−30は、ミドル部未着カウンタ762−30が“0”となったことを検出し、ミドル部同期完了をバリア同期機構731−rにブロードキャストする。尚、ミドル部761−30は、ミドル部同期完了に宛先階層766−30(TO_MIDDLE=1)を付加する。
また、ミドル部未着カウンタ762−30は、ミドル部未着カウンタ762−30を期待カウンタ763−30の値(16)に再設定する。
TO_MIDDLE=1が付加されたミドル部同期完了を受信したミドル部761−rは、ミドル部未着カウンタ762−rを1減算する。これにより、ミドル部未着カウンタ762−rは、“0”となる。
図9Eにおいて、バリア同期機構731−rのミドル部761−rは、ミドル部未着カウンタ762−rが“0”となったことを検出し、ミドル部同期完了をミドル部ターゲットID764−rおよびミドル部ターゲットマスク765−rで指定されるバリア同期機構にブロードキャストする。尚、ミドル部761−rは、ミドル部同期完了に宛先階層766−r(TO_MIDDLE=0)を付加する。
詳細には、ミドル部761−04は、ミドル部同期完了をバリア同期機構731−00〜731−07にブロードキャストする。
ミドル部761−0cは、ミドル部同期完了をバリア同期機構731−08〜731−0fにブロードキャストする。
ミドル部761−14は、ミドル部同期完了をバリア同期機構731−10〜731−17にブロードキャストする。
ミドル部761−1cは、ミドル部同期完了をバリア同期機構731−18〜731−1fにブロードキャストする。
ミドル部761−24は、ミドル部同期完了をバリア同期機構731−20〜731−27にブロードキャストする。
ミドル部761−2cは、ミドル部同期完了をバリア同期機構731−28〜731−2fにブロードキャストする。
ミドル部761−34は、ミドル部同期完了をバリア同期機構731−30〜731−37にブロードキャストする。
ミドル部761−3cは、ミドル部同期完了をバリア同期機構731−38〜731−3fにブロードキャストする。
ミドル部未着カウンタ762−rは、ミドル部未着カウンタ762−rを期待カウンタ763−rの値(4)に再設定する。
TO_MIDDLE=0が付加されたミドル部同期完了を受信したトップ部771−sは、トップ部未着カウンタ772−sを1減算する。これにより、トップ部未着カウンタ772−sは、“0”となる。
トップ部771−sは、トップ部未着カウンタ772−sが“0”となったことを検出し、シェア部バリア状態742−sの値を反転させる。これにより、シェア部バリア状態742−sの値は“0”から“1”になる。
各ハードウェアスレッドは、バリア同期ポイント到着時に書き込んだビットマップを有するバリア同期機構731−sのシェア部バリア状態742−sをチェックし、シェア部バリア状態742−sがビットマップに書き込んだ値と同じとなったことを確認し、バリア同期完了と判断し、次のバリア同期ポイントまでの処理を開始する。
第3の実施の形態に係るバリア同期機構によれば、簡易な構成でバリアバンク間の同期を実現できる。
上述のように第1の実施の形態の2階層のバリア同期では、n=全バリアバンク数とすると、n^2の通信が発生し、第2の実施の形態の3階層のバリア同期の通信数は、m2=第2階層のバリアバンクグループ数とすると、n*(m2+1)のである。
第3の実施の形態の4階層のバリアバンク間の同期の通信数は、m3=第3階層のバリアバンクグループ数とすると、2n+m2*m3となり、さらに通信数が削減される。
第3の実施の形態のバリア同期によれば、4階層のバリアバンク同期を行うことでさらに通信数を削減でき、ネットワークの輻輳を防止できる。
(第4の実施の形態)
図11は、第4の実施の形態に係るCPUの構成図である。
CPU801は、図2のCPU401に対応する。
CPU801は、プロセッサコア821−a(a=1〜4)およびバリア同期機構831を備える。また、プロセッサコア821−aおよびバリア同期機構831は、バリアバンク同期の最小単位であるバリアバンク811に含まれている。プロセッサコア821−aおよびバリア同期機構831は、バスにより接続されている。
プロセッサコア821−aは、同時マルチスレッディング機能を有しており、スレッドを実行するハードウェアスレッド822−a−b(b=1、2)を備える。
ハードウェアスレッド822は、図5のハードウェアスレッド622と同様の機能を有するため説明は省略する。
バリア同期機構831は、バリア同期の制御を行い、例えば、ハードウェア回路やプロセッサにより実現される。
バリア同期機構831は、シェア部841、ボトム部851、ミドル部861、およびトップ部871を備える。
シェア部841は、シェア部バリア状態842、BANKID843、SYNCID844、およびバリアタイプ(BTYPE)845を有する。
シェア部バリア状態842、BANKID843、およびSYNCID844は、図5のシェア部バリア状態642、BANKID643、およびSYNCID644とそれぞれ同様の機能を有するため説明は省略する。
バリアタイプ845は、バリア同期機構831が実施するバリア同期のタイプを示す。バリア同期機構831は、バリアタイプ845に応じたバリア同期処理を行う。すなわち、ボトム部851、ミドル部861、トップ部871は、バリアタイプ845に応じた処理を行う。バリアタイプ845は、例えば、バリアバンク内同期を行うことを示す“バンク内”、またはバリアバンク間同期を行うことを示す“バンク間”である。
ボトム部851は、ボトム部バリア状態852、ビットマップ群853、ボトム部ターゲットID854、ボトム部ターゲットマスク855、およびボトム部宛先階層866を有する。
ボトム部バリア状態852、ビットマップ群853、ボトム部ターゲットID854、およびボトム部ターゲットマスク855は、図5のボトム部バリア状態652、ビットマップ群653、ボトム部ターゲットID654、およびボトム部ターゲットマスク655とそれぞれ同様の機能を有するため説明は省略する。
ボトム部宛先階層866は、受信したボトム部バリア同期完了を処理する処理部(ミドル部またはトップ部)を示す。ボトム部宛先階層866は、“1”または“0”である。“1”は、ボトム部同期完了を受信したミドル部861がボトム部同期完了の受信に対する処理を実行すること示す。“0”は、 ボトム部同期完了を受信したトップ部871がボトム部同期完了の受信に対する処理を実行すること示す。
ボトム部851は、ビットマップ群853のすべてのビットマップが同じ値且つボトム部バリア状態852と異なる値となった場合、ボトム部バリア状態852の値を反転させる。すなわち、ボトム部バリア状態852は、ビットマップ群653のビットマップと同じ値となる。
さらに、ボトム部851は、バリアタイプ845に応じて下記(1)または(2)の処理を行う。
(1)バリアタイプ845が“バンク内”の場合
ボトム部851は、シェア部バリア状態842の値を反転させる。すなわち、シェア部バリア状態842とボトム部バリア状態852の値が同じとなる。
(2)バリアタイプ845が“バンク間”の場合
ボトム部851は、ボトム部ターゲットID854およびボトム部ターゲットマスク855で指定されたバリア同期機構にボトム部バリア同期完了をブロードキャストする。尚、SYNCID844が設定されている場合、ボトム部851は、ボトム部バリア同期完了にSYNCID844を付加してブロードキャストする。さらに、ボトム部851は、ボトム部バリア同期完了にボトム部宛先階層856の値を付加する。例えば、ボトム部851は、ボトム部宛先階層856が“1”の場合、TO_MIDDLE=1をボトム部バリア同期完了に付加し、ミドル部宛先階層856が“0”の場合、TO_MIDDLE=0をボトム部バリア同期完了に付加する。
ミドル部861は、ミドル部未着カウンタ862、ミドル部期待カウンタ863、ミドル部ターゲットID864、ミドル部ターゲットマスク865、およびミドル部宛先階層866を有する。
ミドル部未着カウンタ862は、ミドル部861がバリア同期をチェックするバリア同期機構のうち、ボトム部バリア同期完了を送信していないバリア同期機構の数をカウントし、カウントした値を保持する。ミドル部未着カウンタ862は、TO_MIDDLE=1が付加されたボトム部バリア同期完了を受信すると、ミドル部未着カウンタ862の値を1減算する。また、ミドル部未着カウンタ862は、TO_MIDDLE=1が付加されたミドル部バリア同期完了を受信すると、ミドル部未着カウンタ862の値を1減算する。
また、ミドル部未着カウンタ862は、TO_MIDDLE=1が付加されたミドル部バリア同期完了またはTO_MIDDLE=1が付加されたボトム部バリア同期完了にSYNCIDが付加されている場合、付加されているSYNCIDがSYNCID844と一致する場合は、ミドル部未着カウンタ862の値を1減算する。ミドル部未着カウンタ862は、TO_MIDDLE=1が付加されたミドル部バリア同期完了またはTO_MIDDLE=1が付加されたボトム部バリア同期完了にSYNCIDが付加されている場合、付加されているSYNCIDがSYNCID844と一致しない場合は、ミドル部未着カウンタ862の減算を行わない。すなわち、ミドル部未着カウンタ862は、ミドル部バリア同期完了またはボトム部バリア同期完了に付加されているSYNCIDがSYNCID844と一致するか否かに応じて、ボトム部バリア同期完了およびミドル部バリア同期完了を有効または無効な信号として処理を行う。
ミドル部期待カウンタ863は、ミドル部861がバリア同期をチェックするバリア同期機構の数を示す情報を設定し保持する。
ミドル部ターゲットID864は、ミドル部861がバリア同期完了をブロードキャストするバリア同期機構を示す情報である。
ミドル部ターゲットマスク865は、ミドル部ターゲットID864に対してドントケアビット(don't care bit)の位置を指定する情報である。すなわち、ミドル部ターゲットマスク865は、ミドル部ターゲットID864の任意の値をとることが可能なビットの位置を示す。
ミドル部宛先階層866は、受信したミドル部バリア同期完了を処理する処理部(ミドル部またはトップ部)を示す。ミドル部宛先階層866は、“1”または“0”である。“1”は、ミドル部同期完了を受信したミドル部861がミドル部同期完了の受信に対する処理を実行すること示す。“0”は、 ミドル部同期完了を受信したトップ部871がミドル部同期完了の受信に対する処理を実行すること示す。
ミドル部861は、ミドル部未着カウンタ862が“0”となった場合、ミドル部ターゲットID864およびミドル部ターゲットマスク865で指定されたバリア同期機構にミドル部バリア同期完了をブロードキャストする。ミドル部861は、ミドル部バリア同期完了にミドル部宛先階層866の値を付加する。例えば、ミドル部761は、ミドル部宛先階層866が“1”の場合、TO_MIDDLE=1をミドル部バリア同期完了に付加し、ミドル部宛先階層866が“0”の場合、TO_MIDDLE=0をミドル部バリア同期完了に付加する。また、ミドル部861は、SYNCID844が設定されている場合は、SYNCID844をミドル部バリア同期完了にさらに付加する。
また、ミドル部861は、ミドル部未着カウンタ862が“0”となった場合、ミドル部未着カウンタ862の値をミドル部期待カウンタ863の値に再設定する。
尚、ミドル部861は、バリアタイプ845が“バンク内”である場合、無効となっており、バリア同期完了を受信しても動作しない。また、ミドル部861は、バリアタイプ845が“バンク間”且つボトム部宛先階層856が“0”の場合、無効となっており、バリア同期完了を受信しても動作しない。 トップ部871は、トップ部未着カウンタ872、およびトップ部期待カウンタ873を有する。
トップ部未着カウンタ872は、トップ部871がバリア同期をチェックするバリア同期機構のうち、TO_MIDDLE=0が付加されたミドル部バリア同期完了またはTO_MIDDLE=0が付加されたボトム部バリア同期完了を送信していないバリア同期機構の数をカウントし、カウントした値を保持する。
トップ部未着カウンタ872は、TO_MIDDLE=0が付加されたミドル部バリア同期完了またはTO_MIDDLE=0が付加されたボトム部バリア同期完了を受信すると、トップ部未着カウンタ872の値を1減算する。
また、トップ部未着カウンタ872は、TO_MIDDLE=0が付加されたミドル部バリア同期完了またはTO_MIDDLE=0が付加されたボトム部バリア同期完了にSYNCIDが付加されている場合、付加されているSYNCIDがSYNCID844と一致する場合は、トップ部未着カウンタ872の値を1減算する。トップ部未着カウンタ872は、TO_MIDDLE=0が付加されたミドル部バリア同期完了またはTO_MIDDLE=0が付加されたボトム部バリア同期完了にSYNCIDが付加されている場合、付加されているSYNCIDがSYNCID844と一致しない場合は、トップ部未着カウンタ872の減算を行わない。すなわち、トップ部未着カウンタ872は、ミドル部バリア同期完了またはボトム部バリア同期完了に付加されているSYNCIDがSYNCID844と一致するか否かに応じて、ボトム部バリア同期完了およびミドル部バリア同期完了を有効または無効な信号として処理を行う。
トップ部期待カウンタ873は、トップ部871がバリア同期をチェックするバリア同期機構の数を示す情報を設定し保持する。
トップ部871は、トップ部未着カウンタ872が“0”となった場合、シェア部バリア状態842の値を反転する。また、トップ部871は、トップ部未着カウンタ872が“0”となった場合、トップ部未着カウンタ872の値をトップ部期待カウンタ873の値に再設定する。
尚、トップ部871は、バリアタイプ845が“バンク内”の場合、無効となっており、バリア同期完了を受信しても動作しない。
第4の実施の形態に係るバリアバンク機構によれば、設定により、従来のバリアバンク内同期や第1〜3の実施の形態に係るバリアバンク間同期のいずれも実現できる。
すなわち、バリアタイプ845、ボトム部宛先階層856、およびミドル部宛先階層866を設定することにより、バリア同期機構831は、バリア同期機構1003、531、631、731のいずれかと同様の処理を実行する。
したがって、サーバの構成に応じて、ユーザは適宜設定を行うことにより、最適なバリア同期の階層やバリアバンク集合を設定できる。
次に、第4の実施の形態に係るバリア同期機構831において、バリアタイプ845、ボトム部宛先階層856、ミドル部宛先階層866の設定例とバリア同期機構831の動作について、複数の例を示す。
図12Aは、第4の実施の形態に係るバリア同期機構の第1の設定例である。
第1の設定例は、バリアバンク内同期を行う場合に用いられる。
第1の設定例において、バリアタイプ845は“バンク内”である。
また、BANKID843およびSYNCID844は、バリア同期機構831に応じた適切な値が設定されているものとする。
また、バリアタイプ845が“バンク内”なので、ミドル部861およびトップ部871は、無効となっている。
ボトム部851は、ビットマップ群853のすべてのビットマップが同じ値且つボトム部バリア状態852と異なる値となった場合、ボトム部バリア状態852の値を反転させる。すなわち、ボトム部バリア状態852は、ビットマップ群653のビットマップと同じ値となる。
そして、ボトム部851は、シェア部バリア状態842の値を反転させる。すなわち、シェア部バリア状態842とボトム部バリア状態852の値が同じとなる。
第1の設定例を用いることにより、背景技術で述べたバリアバンク内のバリア同期を実現できる。
図12Bは、第4の実施の形態に係るバリア同期機構の第2の設定例である。
第2の設定例は、2階層のバリアバンク間同期を行う場合に用いられる。
第2の設定例において、バリアタイプ845は“バンク間”である。
また、ボトム部宛先階層856は、“0”である。
また、BANKID843、SYNCID844、ボトム部ターゲットID854、ボトム部ターゲットマスク855、トップ部未着カウンタ872、およびトップ部期待カウンタ873は、バリア同期機構831に応じた適切な値が設定されているものとする。
バリアタイプ845が“バンク間”であり、ボトム部宛先階層856は、“0”なので、ミドル部861は、無効となっている。
ボトム部851は、ビットマップ群853のすべてのビットマップが同じ値且つボトム部バリア状態852と異なる値となった場合、ボトム部バリア状態852の値を反転させる。
ボトム部851は、ボトム部ターゲットID854およびボトム部ターゲットマスク855で指定されたバリア同期機構にボトム部バリア同期完了をブロードキャストする。尚、ボトム部851は、ボトム部バリア同期完了にSYNCID844およびTO_MIDDLE=0を付加してブロードキャストする。
トップ部未着カウンタ872は、TO_MIDDLE=0が付加されたボトム部バリア同期完了を受信する。トップ部未着カウンタ872は、ボトム部バリア同期完了に付加されているSYNCIDがSYNCID844と一致する場合は、トップ部未着カウンタ872の値を1減算する。トップ部未着カウンタ872は、ボトム部バリア同期完了に付加されているSYNCIDがSYNCID844と一致しない場合は、トップ部未着カウンタ872の減算を行わない。
トップ部871は、トップ部未着カウンタ872が“0”となった場合、シェア部バリア状態842の値を反転する。また、トップ部871は、トップ部未着カウンタ872が“0”となった場合、トップ部未着カウンタ872の値をトップ部期待カウンタ873の値に再設定する。
第2の設定例を用いることにより、第1の実施の形態で述べた2階層のバリア同期を実現できる。
図12Cは、第4の実施の形態に係るバリア同期機構の第3の設定例である。
第3の設定例は、3階層のバリアバンク間同期を行う場合に用いられる。
第3の設定例において、バリアタイプ845は“バンク間”である。
ボトム部宛先階層856は、“1”である。
ミドル部宛先階層866は、“0”である。
また、BANKID843、SYNCID844、ボトム部ターゲットID854、ボトム部ターゲットマスク855、ミドル部未着カウンタ862、ミドル部期待カウンタ863、ミドル部ターゲットID864、ミドル部ターゲットマスク865、トップ部未着カウンタ872、およびトップ部期待カウンタ873は、バリア同期機構831に応じた適切な値が設定されているものとする。
ボトム部851は、ビットマップ群853のすべてのビットマップが同じ値且つボトム部バリア状態852と異なる値となった場合、ボトム部バリア状態852の値を反転させる。
ボトム部851は、ボトム部ターゲットID854およびボトム部ターゲットマスク855で指定されたバリア同期機構にボトム部バリア同期完了をブロードキャストする。尚、ボトム部851は、ボトム部バリア同期完了にSYNCID844およびTO_MIDDLE=1を付加してブロードキャストする。
ミドル部未着カウンタ862は、TO_MIDDLE=1が付加されたボトム部バリア同期完了を受信する。ミドル部未着カウンタ862は、ボトム部バリア同期完了に付加されているSYNCIDがSYNCID844と一致する場合は、ミドル部未着カウンタ862の値を1減算する。ミドル部未着カウンタ862は、ボトム部バリア同期完了に付加されているSYNCIDがSYNCID844と一致しない場合は、ミドル部未着カウンタ862の減算を行わない。
ミドル部861は、ミドル部未着カウンタ862が“0”となった場合、ミドル部ターゲットID864およびミドル部ターゲットマスク865で指定されたバリア同期機構にミドル部バリア同期完了をブロードキャストする。尚、ミドル部861は、ミドル部バリア同期完了にSYNCID844およびTO_MIDDLE=0を付加する。
また、ミドル部861は、ミドル部未着カウンタ862が“0”となった場合、ミドル部未着カウンタ862の値をミドル部期待カウンタ863の値に再設定する。
トップ部未着カウンタ872は、TO_MIDDLE=0が付加されたミドル部バリア同期完了を受信する。トップ部未着カウンタ872は、ミドル部バリア同期完了に付加されているSYNCIDがSYNCID844と一致する場合は、トップ部未着カウンタ872の値を1減算する。トップ部未着カウンタ872は、ミドル部バリア同期完了に付加されているSYNCIDがSYNCID844と一致しない場合は、トップ部未着カウンタ872の減算を行わない。
トップ部871は、トップ部未着カウンタ872が“0”となった場合、シェア部バリア状態842の値を反転する。また、トップ部871は、トップ部未着カウンタ872が“0”となった場合、トップ部未着カウンタ872の値をトップ部期待カウンタ873の値に再設定する。
第3の設定例を用いることにより、第2の実施の形態で述べた3階層のバリア同期を実現できる。
ここで、図2に示す実施の形態に係るサーバにおいて、各種のバリア同期を行ったときに発生する通信(バリア同期完了の通知)の範囲や数について述べる。
図13A〜Cは、実施の形態に係るサーバにおけるバリア同期を示す図である。
図13において、CPU401−i−jは、それぞれ2つのバリアバンクを有する。
尚、CPUのことをチップとも呼ぶ。
図13Aにおいて、例1)1バリアバンク内のバリア同期、例2)1チップのバリア同期(2バリアバンク)について述べる。
・例1)1バリアバンク内のバリア同期
例1では、バリアバンク411−1−1−1内でバリア同期を行う。この場合、バリアバンク411−1−1−1外への通信は発生しない。
・例2)1チップのバリア同期(2バリアバンク)
例2では、バリアバンク411−2−1−1とバリアバンク411−2−1−2とでバリアバンク間同期を行う。この場合、CPU401−2−1内でバリア同期可能となる。
したがって、CPU401−2−1外への通信は発生しない。
図13Bにおいて、例3)2チップのバリア同期(4バリアバンク)、例4)1ボードのバリア同期(8バリアバンク)について述べる。
・例3)2チップのバリア同期(4バリアバンク)
例3では、CPU401−1−1内の2つのバリアバンクとCPU401−1−2内の2つのバリアバンクとでバリアバンク間同期を行う。すなわち、4つのバリアバンクのバリア同期を行う。
4つのバリアバンクのバリア同期を2階層のバリア同期で実施すると、CPU401−1−1とCPU401−1−2間以外の通信は発生しない。
・例4)1ボードのバリア同期(8バリアバンク)
例4では、システムボード201−2内の8つのバリアバンクのバリア同期を行う。ここで、2階層のバリア同期を行う。
2階層バリア同期では、一度のバリア同期のために発行される総信号数は各バリアバンクからのブロードキャスト数の合計となる。
したがって、一度のバリア同期のために発行される総信号数は8*8=64となる。
図13Cにおいて、例5)サーバ全体のバリア同期(32バリアバンク)について述べる。
・例5)サーバ全体のバリア同期(32バリアバンク)
例5では、サーバ101全体でバリア同期を行う。
2階層バリア同期でサーバ101全体のバリア同期を行うと、一度のバリア同期のために発行される総信号数は各バリアバンクからのブロードキャスト数となる。
したがって、一度のバリア同期のために発行される総信号数は32*32=1024となる。また、発行される信号のうち、スイッチ301経由で送信される信号数は 32*24=768となる。
3階層バリア同期では、一度のバリア同期のために発行される2階層目(CPU401−1−3、401−2−3、401−3−3、401−4−3内の各1バリアバンク)への範囲限定ブロードキャスト+3階層目(同一システムボード内のバリアバンク)への範囲限定ブロードキャスト数となる。
すなわち、32個のバリアバンクは、それぞれ2階層目の4つのバリアバンクにバリア同期完了を通知し、2階層目の4つのバリアバンクは、それぞれ自身が存在するシステムボード内の8つのバリアバンクにバリア同期完了を通知する。
したがって、一度のバリア同期のために発行される総信号数は32*4+4*8=160となる。また、発行される信号のうち、スイッチ301経由で送信される信号数は32*3=96となる。
多数のバリアバンクでバリア同期する場合には、上記例5の3階層バリア同期のように階層を追加することで、システム全体で発行されるバリア同期信号数を削減できる。これは上記スイッチ等の共通通信経路が性能ボトルネックとなる場合に有効に働く。
第4の実施の形態のバリア同期機構は複数の同期方法を実現できるため、通信路のレイテンシ、帯域に応じて最適な同期手法を選択することができる。
101 サーバ
201 システムボード
301 スイッチ
401 CPU
501 CPU
511 バリアバンク
521 プロセッサコア
522 ハードウェアスレッド
531 バリア同期機構
541 ボトム部
542 ボトム部バリア状態
543 ビットマップ群
551 トップ部
552 トップ部バリア状態
553 トップ部未着カウンタ
554 トップ部期待カウンタ
601、701、801 CPU
611、711、811 バリアバンク
621、721、821 プロセッサコア
622、722、822 ハードウェアスレッド
631、731、831 バリア同期機構
641、741、841 シェア部
642、742、842 シェア部バリア状態
643、743、843 BANKID
644、744、844 SYNCID
651、751、851 ボトム部
652、752、852 ボトム部バリア状態
653、753、753 ビットマップ群
654、754、854 ミドル部ターゲットID
655、755、855 ミドル部ターゲットマスク
661、761、861 ミドル部
662、762、862 ミドル部未着カウンタ
663、763、863 トップ部期待カウンタ
664、764、764 トップ部ターゲットID
665、765、865 トップ部ターゲットマスク
671、771、871 トップ部
672、772、872 トップ部未着カウンタ
673、773、873 トップ部期待カウンタ
766、866 ミドル部宛先階層
856 ボトム部宛先階層

Claims (2)

  1. 複数のバリアバンクを有し、前記複数のバリアバンクの同期を行う情報処理装置であって、
    前記複数のバリアバンクの各バリアバンクは、
    スレッドを実行する一つ以上のハードウェアスレッドと、
    前記複数のバリアバンクのバリア同期を行うバリア同期機構と、
    を備え、
    前記バリア同期機構は、
    同期完了しているか否かを示すバリア状態と、
    前記一つ以上のハードウェアスレッドの同期ポイントへの到着を示すビットマップおよびボトム部同期完了の通知先を示すボトム部ターゲット情報を備えるボトム部と、
    ボトム部同期完了を送信していないバリアバンクの数を示すミドル部未着カウンタおよびミドル部同期完了の通知先を示すミドル部ターゲット情報を備えるミドル部と、
    ミドル部同期完了を送信していないバリアバンクの数を示すトップ部未着カウンタを備えるトップ部と、
    を備え、
    前記ボトム部は、前記ビットマップをチェックし、前記一つ以上のハードウェアスレッドがすべてバリア同期ポイントに到着した場合、ボトム部同期完了を前記ボトム部ターゲット情報で指定されるバリアバンクに通知し、
    前記ミドル部未着カウンタは前記ボトム部同期完了を受信すると、前記ミドル部未着カウンタを1減算し、
    前記ミドル部は、前記ミドル部未着カウンタが0となったとき、ミドル部同期完了を前記ミドル部ターゲット情報で指定されるバリアバンクに通知し、
    前記トップ部未着カウンタは前記ミドル部同期完了を受信すると、前記トップ部未着カウンタを1減算し、
    前記トップ部は、前記トップ部未着カウンタが0となったとき、前記バリア状態を同期完了を示す値とし、
    前記ミドル部は、前記ミドル部同期完了に対する処理を行う処理部を示す第1の処理部フラグをさらに備え、
    前記バリア同期機構は、前記バリア同期機構が行うバリア同期の種類を示すバリアタイプをさらに備え、
    前記ボトム部は、前記ボトム部同期完了に対する処理を行う処理部を示す第2の処理部フラグをさらに備え、
    前記バリアタイプがバリアバンク内の同期を示す場合、
    前記ボトム部は、前記ビットマップをチェックし、前記一つ以上のハードウェアスレッドがすべてバリア同期ポイントに到着した場合、前記バリア状態を同期完了を示す値とし、
    前記バリアタイプがバリアバンク間の同期を示す場合、
    前記ボトム部は、前記ビットマップをチェックし、前記一つ以上のハードウェアスレッドがすべてバリア同期ポイントに到着した場合、ボトム部同期完了を前記ボトム部ターゲット情報で指定されるバリアバンク前記第2の処理部フラグを付加して通知し、
    前記ミドル部未着カウンタは、前記ミドル部を示す前記第2の処理部フラグが付加されたボトム部同期完了、または前記ミドル部を示す前記第1の処理部フラグが付加されたミドル部同期完了を受信すると、前記ミドル部未着カウンタを1減算し、
    前記ミドル部は、前記ミドル部未着カウンタが0となったとき、ミドル部同期完了を前記ミドル部ターゲット情報で指定されるバリアバンクに前記第1の処理部フラグを付加して通知し、
    前記トップ部未着カウンタは、前記トップ部を示す前記第2の処理部フラグが付加されたボトム部同期完了、または前記トップ部を示す前記第1の処理部フラグが付加された前記ミドル部同期完了を受信すると、前記トップ部未着カウンタを1減算することを特徴とする情報処理装置。
  2. 複数のバリアバンクを有し、前記複数のバリアバンクの同期を行う情報処理装置が実行するバリア同期方法であって、前記複数のバリアバンクの各バリアバンクは、スレッドを実行する一つ以上のハードウェアスレッドと、前記複数のバリアバンクのバリア同期を行うバリア同期機構と、を備え、前記バリア同期機構は、前記一つ以上のハードウェアスレッドの同期ポイントへの到着を示すビットマップおよびボトム部同期完了の通知先を示すボトム部ターゲット情報を備えるボトム部と、ボトム部同期完了を送信していないバリアバンクの数を示すミドル部未着カウンタおよびミドル部同期完了の通知先を示すミドル部ターゲット情報を備えるミドル部と、ミドル部同期完了を送信していないバリアバンクの数を示すトップ部未着カウンタを備えるトップ部と、を備え、
    前記ボトム部は、前記ビットマップをチェックし、前記一つ以上のハードウェアスレッドがすべてバリア同期ポイントに到着した場合、ボトム部同期完了を前記ボトム部ターゲット情報で指定されるバリアバンクに通知し、
    前記ミドル部未着カウンタは、前記ボトム部同期完了を受信すると、前記ミドル部未着カウンタを1減算し、
    前記ミドル部は、前記ミドル部未着カウンタが0となったとき、ミドル部同期完了を前記ミドル部ターゲット情報で指定されるバリアバンクに通知し、
    前記トップ部未着カウンタは前記ミドル部同期完了を受信すると、前記トップ部未着カウンタを1減算し、
    前記トップ部は、前記トップ部未着カウンタが0となったとき、同期完了しているか否かを示すバリア状態を同期完了を示す値とし、
    前記ミドル部は、前記ミドル部同期完了に対する処理を行う処理部を示す第1の処理部フラグをさらに備え、
    前記バリア同期機構は、前記バリア同期機構が行うバリア同期の種類を示すバリアタイプをさらに備え、
    前記ボトム部は、前記ボトム部同期完了に対する処理を行う処理部を示す第2の処理部フラグをさらに備え、
    前記バリアタイプがバリアバンク内の同期を示す場合、
    前記ボトム部は、前記ビットマップをチェックし、前記一つ以上のハードウェアスレッドがすべてバリア同期ポイントに到着した場合、前記バリア状態を同期完了を示す値とし、
    前記バリアタイプがバリアバンク間の同期を示す場合、
    前記ボトム部は、前記ビットマップをチェックし、前記一つ以上のハードウェアスレッドがすべてバリア同期ポイントに到着した場合、ボトム部同期完了を前記ボトム部ターゲット情報で指定されるバリアバンクに前記第2の処理部フラグを付加して通知し、
    前記ミドル部未着カウンタは、前記ミドル部を示す前記第2の処理部フラグが付加されたボトム部同期完了、または前記ミドル部を示す前記第1の処理部フラグが付加されたミドル部同期完了を受信すると、前記ミドル部未着カウンタを1減算し、
    前記ミドル部は、前記ミドル部未着カウンタが0となったとき、ミドル部同期完了を前記ミドル部ターゲット情報で指定されるバリアバンクに前記第1の処理部フラグを付加して通知し、
    前記トップ部未着カウンタは、前記トップ部を示す前記第2の処理部フラグが付加されたボトム部同期完了、または前記トップ部を示す前記第1の処理部フラグが付加された前記ミドル部同期完了を受信すると、前記トップ部未着カウンタを1減算することを特徴とするバリア同期方法。
JP2012161392A 2012-07-20 2012-07-20 情報処理装置およびバリア同期方法 Active JP5974703B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2012161392A JP5974703B2 (ja) 2012-07-20 2012-07-20 情報処理装置およびバリア同期方法
US13/937,258 US9436520B2 (en) 2012-07-20 2013-07-09 Information processing device and barrier synchronization method
US14/926,597 US9336064B2 (en) 2012-07-20 2015-10-29 Information processing device and barrier synchronization method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012161392A JP5974703B2 (ja) 2012-07-20 2012-07-20 情報処理装置およびバリア同期方法

Publications (2)

Publication Number Publication Date
JP2014021820A JP2014021820A (ja) 2014-02-03
JP5974703B2 true JP5974703B2 (ja) 2016-08-23

Family

ID=49947673

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012161392A Active JP5974703B2 (ja) 2012-07-20 2012-07-20 情報処理装置およびバリア同期方法

Country Status (2)

Country Link
US (2) US9436520B2 (ja)
JP (1) JP5974703B2 (ja)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2950214B1 (fr) * 2014-05-23 2024-04-03 Kalray Barriere de synchronisation materielle entre elements de traitement
US9760410B2 (en) * 2014-12-12 2017-09-12 Intel Corporation Technologies for fast synchronization barriers for many-core processing
US10551089B2 (en) * 2015-08-03 2020-02-04 The Arizona Board Of Regents On Behalf Of The University Of Arizona Solar concentrator for a tower-mounted central receiver
US11353868B2 (en) * 2017-04-24 2022-06-07 Intel Corporation Barriers and synchronization for machine learning at autonomous machines
GB2569775B (en) * 2017-10-20 2020-02-26 Graphcore Ltd Synchronization in a multi-tile, multi-chip processing arrangement
CN109756311A (zh) * 2017-11-02 2019-05-14 普天信息技术有限公司 一种确定同步信号状态信息的方法及装置
GB2575294B8 (en) * 2018-07-04 2022-07-20 Graphcore Ltd Host Proxy On Gateway
US11782713B1 (en) * 2019-08-27 2023-10-10 Amazon Technologies, Inc. Security vulnerability mitigation using address space co-execution
US11803380B2 (en) * 2019-10-29 2023-10-31 Nvidia Corporation High performance synchronization mechanisms for coordinating operations on a computer system
US11409579B2 (en) * 2020-02-24 2022-08-09 Intel Corporation Multiple independent synchonization named barrier within a thread group
US11988379B2 (en) 2020-06-12 2024-05-21 Bsh Home Appliances Corporation Burner for a cooking appliance
US11977496B1 (en) 2022-09-29 2024-05-07 Amazon Technologies, Inc. Security vulnerability mitigation using hardware-supported context-dependent address space hiding

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2962241B2 (ja) * 1996-09-10 1999-10-12 日本電気株式会社 階層型マルチプロセッサにおける並列処理方法
JP3730740B2 (ja) * 1997-02-24 2006-01-05 株式会社日立製作所 並列ジョブ多重スケジューリング方法
JP2001051966A (ja) * 1999-08-16 2001-02-23 Nec Corp ノード装置、並列処理システム、並列処理方法、および、並列処理プログラムを記録した記録媒体
CA2437035C (en) 2001-02-24 2009-01-06 International Business Machines Corporation Global interrupt and barrier networks
US6592449B2 (en) 2001-02-24 2003-07-15 International Business Machines Corporation Smart fan modules and system
JP4448784B2 (ja) 2005-03-15 2010-04-14 株式会社日立製作所 並列計算機の同期方法及びプログラム
WO2008155806A1 (ja) * 2007-06-20 2008-12-24 Fujitsu Limited バリア同期方法、装置、及びマルチコアプロセッサ
JPWO2010109761A1 (ja) * 2009-03-25 2012-09-27 日本電気株式会社 並列処理システム、並列処理方法、ネットワークスイッチ装置、及び並列処理プログラム
US8539204B2 (en) * 2009-09-25 2013-09-17 Nvidia Corporation Cooperative thread array reduction and scan operations
US20120179896A1 (en) * 2011-01-10 2012-07-12 International Business Machines Corporation Method and apparatus for a hierarchical synchronization barrier in a multi-node system

Also Published As

Publication number Publication date
US9436520B2 (en) 2016-09-06
JP2014021820A (ja) 2014-02-03
US20140026138A1 (en) 2014-01-23
US20160077890A1 (en) 2016-03-17
US9336064B2 (en) 2016-05-10

Similar Documents

Publication Publication Date Title
JP5974703B2 (ja) 情報処理装置およびバリア同期方法
CN110313163B (zh) 分布式计算系统中的负载平衡
US11194753B2 (en) Platform interface layer and protocol for accelerators
US9049112B2 (en) Flow control for reliable message passing
CN108647104B (zh) 请求处理方法、服务器及计算机可读存储介质
US8769155B2 (en) Techniques for synchronizing application object instances
CN107846443B (zh) 网络中的分布式处理
JP5331898B2 (ja) 並列計算用の通信方法、情報処理装置およびプログラム
US20190034367A1 (en) Unified address space for multiple links
US10348612B2 (en) Set up of direct mapped routers located across independently managed compute and storage networks
US11824765B2 (en) Fast redirect of traffic when pods fail
US20130100957A1 (en) Information processing system, relay device, and information processing method
CN108512865A (zh) 一种Java应用服务器的EJB容器系统的数据传输方法及装置
EP2912811B1 (en) Traffic engineering system for preventing demand deadlock and achieving uniform link utilization
US20150143384A1 (en) Network system, network node and communication method
US20120020374A1 (en) Method and System for Merging Network Stacks
US10728178B2 (en) Apparatus and method for distribution of congestion information in a switch
US9792162B2 (en) Network system, network node and communication method
CN114039936B (zh) 基于时间敏感的虚拟电厂通信业务流量调度方法及装置
KR20140106912A (ko) 패킷 처리 장치 및 방법
US20120210018A1 (en) System And Method for Lock-Less Multi-Core IP Forwarding
CN112737966A (zh) 一种负载均衡方法及相关装置
EP3503474A1 (en) A method for remotely performing a network function on data exchanged with at least one gateway
Liang et al. Study on Service Oriented Real-Time Message Middleware
JP5331897B2 (ja) 通信方法、情報処理装置及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150406

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151021

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151110

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160112

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160621

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160704

R150 Certificate of patent or registration of utility model

Ref document number: 5974703

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150