JP2005071109A - マルチプロセッサシステムの同期方法 - Google Patents

マルチプロセッサシステムの同期方法 Download PDF

Info

Publication number
JP2005071109A
JP2005071109A JP2003300510A JP2003300510A JP2005071109A JP 2005071109 A JP2005071109 A JP 2005071109A JP 2003300510 A JP2003300510 A JP 2003300510A JP 2003300510 A JP2003300510 A JP 2003300510A JP 2005071109 A JP2005071109 A JP 2005071109A
Authority
JP
Japan
Prior art keywords
synchronization
processor
barrier synchronization
cpu
barrier
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.)
Granted
Application number
JP2003300510A
Other languages
English (en)
Other versions
JP4276028B2 (ja
Inventor
Tomohiro Nakamura
友洋 中村
Naonobu Sukegawa
直伸 助川
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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2003300510A priority Critical patent/JP4276028B2/ja
Priority to US10/894,064 priority patent/US7191294B2/en
Publication of JP2005071109A publication Critical patent/JP2005071109A/ja
Application granted granted Critical
Publication of JP4276028B2 publication Critical patent/JP4276028B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

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
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Multi Processors (AREA)

Abstract

【課題】特別なハードウェア機構の追加をせずに並列処理のオーバーヘッドを削減し、高速にマルチプロセッサ間でのバリア同期を行う。
【解決手段】共有メモリ4上にバリア同期をとる各プロセッサ1の実行が完了した同期ポイントを示す同期フラグ領域5を割り当て、ソフトウェアによりこの同期フラグ領域5を実行状態に応じて更新し、各プロセッサ1はバリア同期に参加する他のプロセッサの同期フラグ領域5同士を比較することでバリア同期処理を行う。
【選択図】図1

Description

本発明は、マルチプロセッサ・システムに関し、特に、共有メモリ型マルチプロセッサ・システムにおけるバリア同期処理に関し、専用ハードウェアを必要とせずに簡易なプログラムコードでバリア同期を実現するコンピュータの制御方法に関する。
各プロセッサがメモリを共有する共有メモリ型マルチプロセッサ・システムにおいて、並列プログラムを実行する際に各プロセッサ間のバリア同期をとる必要がある。
従来は、このバリア同期を行う場合には、コヒーレンスを保つためにロック処理と呼ばれる処理を行ってきた。
この処理は、データに対する排他制御を行う処理で、複数のプロセッサがロック変数と呼ばれる変数に対して排他的に読み書きできるようにし、このロック変数の状態によってバリア同期の成立・不成立を判断する手法を取っていた。しかし、この排他的な読み書きを実現するためには、プロセッサに用意されているテストアンドセット命令のような処理時間のかかる命令を実行する必要がある。さらに、排他的な処理であるため、バリア同期を行うプロセッサの数が増えるに従って、処理時間も大きく増大してしまう欠点がある。
なお、ロック変数を用いたバリア同期の方法については、「コンピュータの構成と設計」(パターソン&ヘネシー 著/日経BP社 1996年4月 刊)の第559頁に記載されている。
また、各プロセッサにローカルメモリを備えるとともに、各プロセッサで共有する共有メモリにカウンタを格納し、このカウンタにより各プロセッサの同期を取るものが知られている(特許文献1)。これは、一つのプロセッサが親となり、他のプロセッサが子となって、親と子の間で共有メモリ上のカウンタの値に基づいて同期を取るものである。
特開平9−305546号
上記前者の従来例のロック処理による排他制御によってマルチプロセッサ間でバリア同期処理を行うことは時間がかかる処理である。
特に頻繁にバリア同期をとる必要がある場合には、ロック処理の影響により並列処理の効率が大幅に低下し、場合によっては逐次処理から高速化しない場合がある。
この原因としては、ロック処理が常にメインメモリ上でのデータ読み出し・書き込み処理となり、1回のテストアンドセット命令の実行に多大な時間がかかる、という問題がある。
さらに、ロック処理に伴うメインメモリ上でのデータ読み出し・書き込みが、1つの同一のアドレスに対して行われることによりメモリアクセス性能の低下を引き起こすことがある、という問題があった。
また、上記後者の従来例では、一つのプロセッサが親となり、他のプロセッサを子として親子間の同期を保証することはできるものの、共有メモリのカウンタは親子間の同期のみに利用されるため、子のプロセッサ間では同期を保証することができず、並列処理などに適用した場合では高速化が行えない場合がある、という問題があった。
そこで本発明は、上記問題点に鑑みてなされたもので、ロック処理のような時間のかかる処理を行うことなく、また、特別なハードウェア機構の追加をせずに高速にマルチプロセッサ間でのバリア同期を行うことを目的とする。
本発明は、共有メモリ上にバリア同期をとる各プロセッサの実行が完了した同期ポイントを示す同期フラグ領域(カウンタ)を割り当て、ソフトウェアによりこの同期フラグ領域を実行状態に応じて更新し、各プロセッサはバリア同期に参加する他のプロセッサの同期フラグ領域同士を比較することでバリア同期処理を行う。
同期フラグは、各プロセッサが同期ポイントに到達すると更新されるフラグで、各プロセッサは他のすべてのプロセッサの同期フラグが自分の同期フラグと一致もしくは1つ先の同期ポイントに到達した際の同期フラグの状態と一致するか否かでバリア同期成立を判断する。
さらに、共有メモリにプロセッサに搭載したキャッシュメモリを用い、同期フラグはキャッシュコヒーレンス管理単位であるキャッシュライン毎に1プロセッサ分を割り当てることで、同期フラグ更新のたびに各プロセッサのキャッシュがフラッシュされることなく、各キャッシュラインは同期1回あたり1度ずつフラッシュされるだけでよいため、バリア同期処理の高速化を実現できる。
したがって、本発明は、マルチプロセッサシステムにおける並列処理性能を安価に向上させるために、マルチプロセッサ間での同期処理に対して、次の2つの効果が得られる。
まず第1は、特別なハードウェアを用意せずにソフトウェアで様々な規模のバリア同期処理の実現ができる。
次に、第2は、キャッシュ構成を意識した最適化により、バリア同期処理の高速化を実現できる。
上記において、様々な規模のバリア同期処理の実現とは、例えば、バリア同期に参加するプロセッサの数が非常に大きくなっても、同期フラグ領域はメインメモリ上に確保しているので、必要なだけの領域を確保でき、さらに具体的なバリア同期処理においても、ソフトウェアによる制御で行えば、必要な回数だけ他のプロセッサとの同期フラグのチェックを増加させることで対応ができる。
また上記のキャッシュ構成を意識した最適化とは、例えば、別キャッシュライン方式であり、キャッシュやコヒーレンス制御単位などのシステム構成に応じてソフトウェアを調整することによりバリア同期処理の高速化が可能である。
以下、本発明の一実施形態を添付図面に基づいて説明する。
図1は、本発明を適用する共有メモリ型マルチプロセッサシステムを示す。
図1において、複数のプロセッサ1(図中CPUコア)にはそれぞれキャッシュメモリ2が搭載され、各プロセッサ1とメモリ4(メインメモリ)を接続する共有バス3、複数のプロセッサ1で共有されるメインメモリ4から構成される。なお、プロセッサ1はCPU♯1〜♯NのN個で構成した場合を示す。
本実施形態ではメインメモリ4の一部の領域を、バリア同期の際に使用する同期フラグ領域5とする。同期フラグ領域5はメインメモリ4内の任意の場所でよく、特別な領域を用意する必要はない。また、バリア同期をとる部分(バリアポイントまたはタイミング)は、マルチプロセッサシステムで実行されるプログラム中に予め設定されたものである。
同期フラグ領域5には、各プロセッサ(CPU♯1〜♯N)毎に専用のカウンタとしての同期フラグ(FLAG♯1〜♯N)を用意し、各プロセッサ1がバリア同期を行う毎に、同期フラグFLAG♯1〜♯Nは加算など所定の演算操作によりそれぞれ更新される。
同期フラグ領域5は通常のメインメモリ4上の一部であるので、場合によってCPU1のキャッシュメモリ2にキャッシングされている。その場合にはキャッシュメモリ2のコヒーレンスを保つための機構が必要である。
本発明によるバリア同期処理の処理フローチャートを図2に示す。
各プロセッサ1は、プログラムコード中のバリア同期ポイントに到達すると現在のそのバリアポイントに応じた値およびその次のバリアポイントの値を計算し(図中6)、現在のそのバリアポイントに応じた値を、自プロセッサ(例えば、CPU♯1)に割り当てられた同期フラグ(例えば、FLAG♯1)へ保存する(7)。各プロセッサ1が同一のバリアポイントに到達した際に計算されるバリアポイントに応じた値は同一である。
次に、他の1つのプロセッサ(例えばCPU♯2)の同期フラグ(FLAG♯2)を読み出し(8)、その同期フラグFLAG♯2の値と自CPUが保存した同期フラグFLAG♯1の値と比較をする。この2つの値が同一であった場合、その2つのCPU♯1、♯2は同一のバリアポイントに到達したと判断できるため、この2つのCPU間でのバリア同期が成立したと言える。また、他のCPU♯2の同期フラグ♯2の値が、自CPU♯1が次のバリアポイントに到達した場合に同期フラグに保存する値と同一である場合もバリア同期が成立したと判断する(9)。この理由については後ほど説明する。
このいずれでもない場合(12)には、再び他の1つのCPUの同期フラグを読み出し(6)同様の比較を条件が成立するまで繰り返す。
上記(9)の条件が成立したら、バリア同期に参加するすべてのCPU♯1〜♯Nの条件が成立したかをチェックする(10)。まだチェックの済んでいないCPUが有る場合(14)には、同期フラグを読み出すCPUを次のCPU(例えば、CPU♯3)にする(13)。これをすべてのCPUの条件が成立するまで繰り返す。そしてすべてのCPU♯2〜♯Nの条件が成立すればバリア同期成立(11)と判定する。そして、次の処理を開始する。
バリア同期が成立していても2つのCPUの同期フラグの値が同一でない場合がある。図3に示す例は、2つのCPUの同期フラグの値が同一である場合のみバリア同期が成立と判断する方式ではデッドロックの発生する場合があることを示したものである。
図3は、縦方向に時間をとり、プロセッサ1の内、CPU#1とCPU#2の2CPUがバリア同期[1]とバリア同期[2]を取る場合の、時間軸方向での処理の進行状況と同期フラグの状態を示した模式図である。
CPU#1は並列実行部[1](図中15)の処理を終えると、バリア同期[1]の処理に入り、自CPUの同期フラグFLAG♯1をAからBに書きかえる(16)。そしてバリア同期相手のCPU#2が同じ同期フラグFLAG♯2の値がBであるかをチェックする(17)。
一方、CPU#2も同様に並列実行部[1](22)、バリア同期[1]での自CPUの同期フラグFLAG♯2のAからBへの書き換え(23)、そしてバリア同期相手のCPU#1との同期フラグFLAG♯1の比較(24)をほぼ同時に行う。
この場合、CPU#1およびCPU#2における同期フラグのチェック(17、24)で、いずれも同期フラグFLAG♯1、♯2がBであることから、バリア同期[1]が成立する(31)。
次に、同様に並列実行部[2]がCPU#1およびCPU#2で実行され(18、25)、バリア同期[2]の処理でそれぞれのCPUの同期フラグFLAG♯1、♯2がBからCに書きかえられた(19、26)場合を考える。
このタイミングで、CPU#1が割込み処理(20)に入った場合、CPU#2ではCPU#1の同期フラグを読み出してCであるため、自CPUの同期フラグFLAG♯2と同一と判断して(27)バリア同期[2]を成立とする(32)。よって、CPU#2はバリア同期の次の並列実行部[3](28)の実行を行い、次のバリア同期[3]の処理に移る。すると、CPU#2の同期フラグFLAG♯2はCからDに書きかえられてしまう(29)。
このタイミング以降で、CPU#1が割込み処理(20)から復帰し、バリア同期[2]の処理の続きを行うことを考える。この時CPU#1はCPU#2の同期フラグを読み出して、自CPUの同期フラグFLAG♯1の値Cと同一であるか否かの比較を行うが、すでにバリア同期[2]は成立したものだと判断してしまったCPU#2の同期フラグFLAG♯2はバリア同期[3]の処理によってDに書きかえられてしまっているため、CPU#1は自CPUの同期フラグFLAG♯1と同一のCを読み出すことができない。
この状態は、CPU#1、CPU#2共にお互いがお互いの同期フラグの値の更新を待っていることになるので(21、30)、永遠に解決されることがないデッドロック状態(33)となる。
このようなデッドロック状態(33)を回避するには、同期フラグFLAG♯1、♯2の比較において、他のCPUの同期フラグの値が、自CPUが次のバリアポイントに到達した場合に同期フラグに保存する値と同一である場合もバリア同期が成立したと判断すればよい。
つまり、CPU#1のバリア同期[2]の処理におけるCPU#2の同期フラグFLAG♯2との比較(21)においては、CPU#1の現在の同期フラグFLAG♯1の値CとCPU#2の同期フラグFLAG♯2の値が一致する場合だけでなく、CPU#1が次のバリアポイントに到達した場合に同期フラグFLAG♯1に保存する値Dと一致した場合もバリア同期成立とすれば、デッドロック状態(33)とならない。
上記図2の処理(9)においては、上記のように、次のバリアポイントに到達した場合に同期フラグに保存する値と一致した場合もバリア同期成立とすることで、上述のようなデッドロックを回避して、マルチプロセッサシステム(または並列計算機)における並列処理を円滑に進めることができる。
こうして、本発明によれば、バリア同期に参加するプロセッサ1の数が非常に大きくなっても、同期フラグ領域5はメインメモリ4上に確保しているので、必要なだけの領域を確保でき、特別なハードウェアを用意することなくソフトウェアで様々な規模のバリア同期処理の実現ができる。
これにより、並列処理を行う際に、オーバーヘッドの大きな部分を占めるプロセッサ間のバリア同期処理を高速化することを可能にし、並列化オーバーヘッドを削減してマルチプロセッサシステムの並列処理を高速化できるのである。加えて、専用ハードウェアを用意することがなく、コスト・柔軟性(並列規模や多重実行への対応)などの点でソフトウェアによる方法に優位性がある。
なお、並列処理(または並列計算機)の性能を決定する大きな要因として、次の2点が挙げられる。
・並列化が容易であること(既存のプログラムの構造を変えなくても並列化できること)。
・並列実行時にスケーラブルな性能(並列度に応じた性能が得られること)。
そして、これを実現するためには、高性能な自動並列化コンパイラが必要で、そこで特に重要となるのは次の2点である。
・並列化に伴うオーバーヘッドの影響を低減すること。
・できるだけ並列実行される部分を増やすこと。
並列実行部分を増やすには、小さいループ(演算部分が少ない)も並列化する必要があるが、並列化オーバーヘッドの影響を押さえるには、並列実行部の演算部分がオーバーヘッドに比べて十分に大きい必要があり、この根本的解決策は、並列化オーバーヘッド自体の低減である。本発明は、この並列化オーバーヘッドの大きな部分を占めるプロセッサ間のバリア同期処理を高速化することで並列化オーバーヘッドの低減を実現することに関する。専用ハードウェアを新設する方法もあるが、コスト・柔軟性(並列規模や多重実行への対応)などの点でソフトウェアによる方法に優位性がある。
図4は、第2の実施形態を示し、前記第1実施形態の同期フラグ領域5をキャッシュメモリ上に移したもので、その他の構成は前記第1実施形態と同様である。
複数のプロセッサ1を構成する各CPU♯1〜♯Nのキャッシュメモリ2には、同期フラグFLAG♯1〜♯Nを保存する同期フラグ領域34が設定される。なお、同期フラグFLAG♯1〜♯Nを保存するためのキャッシュメモリは、既設のキャッシュメモリ2内に確保しても良いし、別途同期フラグFLAG♯1〜♯Nを保存するためのキャッシュメモリを新設しても良い。
プロセッサ1のキャッシュメモリ2に同期フラグ領域34を設定することで、プロセッサ1のメモリアクセス・レイテンシを削減し、同期フラグFLAG♯1〜♯Nの読み書きが高速化され、上記図2に示した処理フローの処理時間が短縮される。
この場合、各CPU♯1〜♯N毎に設けたキャッシュメモリ2毎に全CPUの同期フラグ領域をミラーリングして保持してもよいし、自CPUの同期フラグ領域のみを保持し、他CPUの同期フラグを読み出す場合には、共有バス3経由で読み出すようにしてもよい。
本発明が上記従来例のロック変数を用いたバリア同期処理と異なるのは、従来例ではロック変数を複数プロセッサで奪い合い、同時には1つのプロセッサのみが処理を可能としているため、複数のプロセッサの処理が逐次的に行われていくのに対し、本発明では、図2に示した処理フローを各プロセッサが並列的に行っていくことが可能である点である。そのため、バリア同期に参加するプロセッサの数が多くなった場合の処理時間の増大が、従来例に比べて少ない利点がある。
図5は、上記図4に示した同期フラグ領域34のメモリ上への確保の方法を模式的に2通り示した図である。図5でグレーの領域は同期フラグ領域34のメモリ空間を示し、その横幅はキャッシュラインサイズである。1つのキャッシュラインは横一列分であるとする。
同一キャッシュライン方式(図中35)は、1つのキャッシュラインLine#1(37)にN個のプロセッサの同期フラグを確保する方式である。図5ではN個の同期フラグ(図中フラグ[1]〜[N])をLine#1(37)内で連続する位置に確保しているが、この確保する順序や場所はLine#1内で同期フラグ同士で重ならない限りどのように確保してもよい。
一方、別キャッシュライン方式(図中36)は、1つのキャッシュラインには1つのプロセッサの同期フラグ(図中フラグ[1]〜[N])のみを確保する方式で、N個のプロセッサの同期フラグFLAG♯1〜♯NはN個のキャッシュラインLine♯1〜♯N(37〜39)に分散して確保する。
それぞれのキャッシュラインにおいて、同期フラグを確保する位置は、図5の例ではキャッシュライン毎にずらしてあるが、すべてキャッシュラインの先頭に配置するなど、それぞれのキャッシュラインの中のいずれかの位置に確保する場合を含む。またN個のキャッシュライン37〜39はメモリ空間上で連続している領域である必要はない。
図6は、プロセッサ1としてCPU#1、CPU#2、CPU#3の3つのCPU間で本発明による方式でバリア同期処理を行った場合の処理順序の例を、縦方向を時間軸として模式的に示した図である。
同一キャッシュライン方式(図中35)でも別キャッシュライン方式(図中36)でも3つのCPUは同時にバリア同期処理を開始したとする。
同一キャッシュライン方式(35)では、まずCPU#1がLine#1(図5参照)上のCPU#1の同期フラグ領域37を更新する。CPU#2、CPU#3もほぼ同時にLine#1上の自CPUの同期フラグ領域を更新しようとするが、CPU#1が同一のキャッシュラインであるLine#1に対するstoreを行ったため、CPU#2、CPU#3の処理はCPU間でのキャッシュコヒーレンスを維持するための機構によりキャンセルされる。なお、各CPU♯1〜♯Nは、キャッシュメモリ2のコヒーレンスを維持する機構を備えるものである。
次に、CPU#2がLine#1上の自CPUの同期フラグ領域を更新する。先ほどと同様にしてCPU#3もほぼ同時にLine#1上の自CPUの同期フラグ領域を更新しようとするが、再度キャンセルされる。そのため、CPU#2の更新処理が終了してからCPU#3はLine#1上の自CPUの同期フラグ領域を更新することになる。ここまでの処理は図2に示した処理フローにおける同期フラグの更新処理(6、7)の部分である。
次に、同期フラグのチェックの処理(8〜14)をCPU#1、CPU#2、CPU#3でそれぞれ行う。この例ではCPU#3はLine#1がすでに自CPUのキャッシュ上にありCPU#1およびCPU#2の同期フラグの値とCPU#3の同期フラグを比較することでバリア同期成立を判定することができる。
一方、CPU#1とCPU#2は、フラグ更新後にそれぞれ自CPUの同期フラグと他CPUの同期フラグの値の比較を行うものの、CPU#3がCPU#3の同期フラグを更新し、その更新されたLine#1が転送(43)されてくるまでは、同期フラグの比較においてバリア同期成立の条件を満たさないため、バリア同期成立(44)のタイミングは、CPU#3がバリア同期成立を判定した頃とほぼ同時となる。そのため、同一キャッシュライン方式(35)は同期フラグの更新が結果的に逐次的にしか行えず、バリア同期処理にかかる時間がバリア同期に参加するプロセッサの数にほぼ比例して増大する。
一方、別キャッシュライン方式(36)では、各CPUが更新するそれぞれのCPUの同期フラグ領域が別々のキャッシュラインLine♯1〜♯Nとなっているため、CPU#1、CPU#2、CPU#3いずれもほぼ同時に同期フラグの更新が可能である。
次に、同期フラグFLAG♯1〜♯Nのチェックの処理では、他のCPUの同期フラグがあるキャッシュラインが自CPUのキャッシュラインに転送されてフラッシュした後、このキャッシュラインの同期フラグとの比較を行うことでバリア同期成立の判定を行う。よって、別キャッシュライン方式(36)は同期フラグの更新が各CPU間で並列的に行えるため、バリア同期処理にかかる時間はバリア同期に参加するプロセッサの数が増大しても大きくは増加しない。キャッシュラインの転送回数が増加するが、プロセッサの数の増大に応じて転送ラインの数を増加させることで処理時間を増加させないようにすることが可能である。
図6による説明では、キャッシュラインごとのコヒーレンス制御を前提として説明をしたが、キャッシュラインサイズによらず、コヒーレンス制御単位(キャッシュライン単位)以上のサイズの領域当たり1つの容量で、各プロセッサの同期フラグ領域を確保すれば別キャッシュライン方式と同様の並列的な同期フラグ領域の更新が可能である。つまり、第1の実施形態においては、各プロセッサ1へ個別に割り当てるメモリ領域(同期フラグ領域5)のメモリ上のアドレスの間隔を、プロセッサ1に搭載されるキャッシュメモリ2間でコヒーレンスを保つための管理における処理単位(管理単位)以上に大きくすればよい。
次に、バリアポイントにおいて、同期フラグ領域に保存する値に関しては、各プロセッサが同一のバリアポイントに到達した際に同一の値になれば問題ないが、例えば図7に示す数列50を用いると、同期フラグの比較処理を高速化することが可能である。
図7に示したバリア同期実行回数を示す数列50の例では、8ビットの同期フラグを仮定しバリア同期実行回数をMとして、2の(Mmod8)乗までを同期フラグに書き込む値とする。つまり、8ビットの同期フラグにおいて、いずれか1ビットのみが常に1であり、他は0である状態で、バリア同期実行毎に1であるビットが左に1ビットずつシフトしていき、8ビット目の次は1ビット目に戻る操作を行う数列である。換言すれば、バリア同期実行毎に1であるビットを左に1ビットずつローテートする操作である。
このように数列50が循環してよい理由は、バリア同期処理が正しく行われている場合には、各プロセッサのバリア同期の実行回数に1以上の差が生じることがないためである。つまり、他のプロセッサ1に先行して次のバリアポイントに達したプロセッサ1は、他のプロセッサ1が同じバリアポイントに達するまで後続の命令(プログラム)を実行することができないためである。
図7に示したバリア同期実行回数を示す数列50の例が、同期フラグの比較処理に適している理由は次の通りである。
上記図2に示したバリア同期処理の処理フローチャートにおいて、他のプロセッサの同期フラグとの比較処理が、値が同一であるか、または、自プロセッサの同期フラグを1ビット左にローテートしたものと同一であるかの確認となり、演算処理が簡単となるため、処理時間が短縮できる。
なお、上記数列50は、現在のバリア同期処理が実行中であることを示す値と、現在のバリア同期処理が終了したことを示す値と、次のバリア同期処理が終了したことを示す値の少なくとも3つの値を備え、循環して利用可能な数列であれば良く、好ましくは、数値的に連続する数列や、ビット配列の順に連続する数列である。
以上のように、各CPU♯1〜♯Nのキャッシュメモリ2のコヒーレンスを維持する機構を備える場合には、共有メモリにキャッシュメモリ2を用い、同期フラグFALG♯1〜♯Nはキャッシュコヒーレンスの管理単位であるキャッシュライン毎に1プロセッサ(CPU)分を割り当てることで、同期フラグ更新のたびに各プロセッサのキャッシュがフラッシュされることなく、各キャッシュラインは同期1回あたり1度ずつフラッシュされるだけでよいため高速化される。
そして、マルチプロセッサシステムで並列処理を行う場合に、並列化オーバーヘッドの大きな部分を占めるプロセッサ間のバリア同期処理を高速化することで並列化オーバーヘッドの低減を実現することが可能となり、特に、専用ハードウェアを必要とすることなく、コスト・柔軟性(並列規模や多重実行への対応)などの点でソフトウェアによる方法に優位性がある。
以上のように、本発明に係るマルチプロセッサシステムの同期方法は、並列処理を行うマルチプロセッサ、もしくはその並列処理のためのコンパイラに適用することができる。
本発明の一実施形態を示し、バリア同期処理を行うマルチプロセッサシステムの構成図を示す。 バリア同期処理の一例を示すフローチャート。 同じく、2つのCPUによるバリア同期処理の一例を示すタイムチャート。 第2の実施形態を示し、バリア同期処理を行うマルチプロセッサシステムの構成図を示す。 キャッシュメモリの同期フラグ領域のマッピングを示す説明図で、図中上部が同一キャッシュライン方式を、図中下部が別キャッシュライン方式を示す。 3つのCPUによるバリア同期処理のタイムチャートを示し、図中左半分が同一キャッシュライン方式を、図中右半分が別キャッシュライン方式を示す。 バリア同期処理の際に更新される値の一例を示す説明図。
符号の説明
1 プロセッサ
2 キャッシュメモリ
3 共有バス
4 メインメモリ
5、34 同期フラグ領域

Claims (6)

  1. 複数のプロセッサでプログラムを並列的に実行するためのバリア同期を行うマルチプロセッサシステムの同期方法であって、
    前記マルチプロセッサシステムは、各プロセッサが共有可能な共有メモリ領域を設け、
    この共有メモリ領域内に各プロセッサ毎に個別のメモリ領域を割り当て、
    このメモリ領域には各プロセッサがプログラム中のバリア同期をとる部分を実行した回数を格納するカウンタを設け、
    各プロセッサは、プログラム中のバリア同期をとる部分を実行したときに自プロセッサに割り当てられた個別のメモリ領域の前記カウンタを加算して書き込んだ後、他のプロセッサに割り当てられたメモリ領域すべてに同一もしくはより大きい値が書き込まれたことを判定した後に、後のプログラムの実行を行うことを特徴とするマルチプロセッサシステムの同期方法。
  2. 複数のプロセッサでプログラムを並列的に実行するためのバリア同期を行うマルチプロセッサシステムの同期方法であって、
    前記マルチプロセッサシステムは、各プロセッサが共有可能な共有メモリ領域を設け、
    この共有メモリ領域内に各プロセッサ毎に個別のメモリ領域を割り当て、
    このメモリ領域には各プロセッサがプログラム中のバリア同期をとる部分の実行回数に応じた値を格納するカウンタを設け、
    各プロセッサは、プログラム中のバリア同期をとる部分を実行したときに、実行回数に応じた値を定める数列から実行回数に対応する値を求め、この値を自プロセッサに割り当てられた前記個別のメモリ領域のカウンタに書き込み、
    他のプロセッサに割り当てられたメモリ領域すべてに同一の値または前記数列において該実行回数に1を加えた回数に応じた値が書き込まれたことを判定した後に、後のプログラムの実行を行うことを特徴とするマルチプロセッサシステムの同期方法。
  3. 前記プロセッサはキャッシュメモリを有し、前記各プロセッサに個別に割り当てるメモリ領域のメモリ上のアドレスの間隔を、該プロセッサに搭載されるキャッシュメモリ間のコヒーレンスを保つための管理における処理単位以上に大きくすることを特徴とする請求項1または請求項2に記載のマルチプロセッサシステムの同期方法。
  4. 前記プロセッサはキャッシュメモリと、各キャッシュメモリ間のコヒーレンスを保つ機構を有し、前記各プロセッサ毎に割り当てる個別のメモリ領域用のキャッシュメモリを設定し、該キャッシュメモリを利用してバリア同期を行うことを特徴とする請求項1または請求項2に記載のマルチプロセッサシステムの同期方法。
  5. 前記プログラム中のバリア同期をとる部分の実行回数に応じて一意の値を定める数列は、一定の実行回数毎に同一の数列を繰り返すことを特徴とする請求項2に記載のマルチプロセッサシステムの同期方法。
  6. 前記数列は、少なくとも現在のバリア同期が実行中であることを示す値と、現在のバリア同期が終了したことを示す値と、次のバリア同期が終了したことを示す値の少なくとも3つの値を備えることを特徴とする請求項5に記載のマルチプロセッサシステムの同期方法。
JP2003300510A 2003-08-25 2003-08-25 マルチプロセッサシステムの同期方法 Expired - Fee Related JP4276028B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2003300510A JP4276028B2 (ja) 2003-08-25 2003-08-25 マルチプロセッサシステムの同期方法
US10/894,064 US7191294B2 (en) 2003-08-25 2004-07-20 Method for synchronizing processors in a multiprocessor system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003300510A JP4276028B2 (ja) 2003-08-25 2003-08-25 マルチプロセッサシステムの同期方法

Publications (2)

Publication Number Publication Date
JP2005071109A true JP2005071109A (ja) 2005-03-17
JP4276028B2 JP4276028B2 (ja) 2009-06-10

Family

ID=34213833

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003300510A Expired - Fee Related JP4276028B2 (ja) 2003-08-25 2003-08-25 マルチプロセッサシステムの同期方法

Country Status (2)

Country Link
US (1) US7191294B2 (ja)
JP (1) JP4276028B2 (ja)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008155806A1 (ja) 2007-06-20 2008-12-24 Fujitsu Limited バリア同期方法、装置、及びマルチコアプロセッサ
KR101029769B1 (ko) 2008-11-19 2011-04-19 후지쯔 가부시끼가이샤 배리어 동기 장치, 배리어 동기 처리 시스템 및 방법, 리덕션 연산 장치, 리덕션 연산 처리 시스템 및 방법
US8108660B2 (en) 2008-01-25 2012-01-31 Renesas Electronics Corporation Multiprocessor system and method of synchronization for multiprocessor system
JP2013137833A (ja) * 2013-04-08 2013-07-11 Waseda Univ マルチプロセッサシステムおよびマルチプロセッサシステムの同期方法
JP2013174943A (ja) * 2012-02-23 2013-09-05 Nec Corp 超並列計算機、同期方法、同期プログラム
DE102015213370A1 (de) 2014-07-18 2016-01-21 Denso Corporation Datenverarbeitungsvorrichtung
JP2016525746A (ja) * 2013-08-13 2016-08-25 クゥアルコム・インコーポレイテッドQualcomm Incorporated 動的幅計算を用いたバリア同期
JP2017010364A (ja) * 2015-06-24 2017-01-12 株式会社デンソー データ処理装置
JP2017062843A (ja) * 2016-11-30 2017-03-30 学校法人早稲田大学 マルチプロセッサシステム
US9891655B2 (en) 2014-12-05 2018-02-13 Fujitsu Limited Parallel operation system, apparatus and medium

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7937709B2 (en) 2004-12-29 2011-05-03 Intel Corporation Synchronizing multiple threads efficiently
US7464115B2 (en) * 2005-04-25 2008-12-09 Silicon Graphics, Inc. Node synchronization for multi-processor computer systems
JP4831599B2 (ja) * 2005-06-28 2011-12-07 ルネサスエレクトロニクス株式会社 処理装置
US7770170B2 (en) * 2005-07-12 2010-08-03 Microsoft Corporation Blocking local sense synchronization barrier
US7587555B2 (en) * 2005-11-10 2009-09-08 Hewlett-Packard Development Company, L.P. Program thread synchronization
US7555607B2 (en) * 2005-11-10 2009-06-30 Hewlett-Packard Development Company, L.P. Program thread syncronization for instruction cachelines
US7353346B2 (en) * 2006-03-24 2008-04-01 International Business Machines Corporation Read-copy-update (RCU) operations with reduced memory barrier usage
US7818306B2 (en) * 2006-03-24 2010-10-19 International Business Machines Corporation Read-copy-update (RCU) operations with reduced memory barrier usage
GB0613289D0 (en) * 2006-07-04 2006-08-16 Imagination Tech Ltd Synchronisation of execution threads on a multi-threaded processor
US7925791B2 (en) * 2006-07-17 2011-04-12 The Math Works, Inc. Recoverable error detection for concurrent computing programs
JP4745904B2 (ja) * 2006-07-18 2011-08-10 株式会社日本自動車部品総合研究所 電子装置
EP1953643A3 (en) * 2007-02-01 2009-12-16 Denso Corporation Calculation apparatus provided with a plurality of calculating units which access a single memory
US8060881B2 (en) * 2007-05-15 2011-11-15 Microsoft Corporation Small barrier with local spinning
US20090006507A1 (en) * 2007-06-27 2009-01-01 Mingnan Guo System and method for ordering reclamation of unreachable objects
WO2009028231A1 (ja) * 2007-08-24 2009-03-05 Nec Corporation 通信方法
US8065681B2 (en) * 2007-10-12 2011-11-22 International Business Machines Corporation Generic shared memory barrier
US8539188B2 (en) * 2008-01-30 2013-09-17 Qualcomm Incorporated Method for enabling multi-processor synchronization
US8799629B2 (en) * 2008-12-04 2014-08-05 Microsoft Corporation Parallel execution of a loop
KR101266747B1 (ko) * 2009-01-23 2013-05-22 알까뗄 루슨트 실시간 분산 시스템의 분산 모듈에서, 다른 분산 모듈들과 동기적으로 동작하기 위해 사용되는 방법, 디바이스, 신호 프로세싱 디바이스 및 mimo 통신 장비
US8924984B2 (en) 2009-06-26 2014-12-30 Microsoft Corporation Lock-free barrier with dynamic updating of participant count
DE102011084569B4 (de) * 2011-10-14 2019-02-21 Continental Automotive Gmbh Verfahren zum Betreiben eines informationstechnischen Systems und informationstechnisches System
US9846673B2 (en) 2011-11-04 2017-12-19 Waseda University Processor, accelerator, and direct memory access controller within a processor core that each reads/writes a local synchronization flag area for parallel execution
US8869168B2 (en) * 2012-05-14 2014-10-21 International Business Machines Corporation Scheduling synchronization in association with collective operations in a parallel computer
JP5994601B2 (ja) * 2012-11-27 2016-09-21 富士通株式会社 並列計算機、並列計算機の制御プログラム及び並列計算機の制御方法
CN104932947B (zh) * 2014-03-17 2018-06-05 华为技术有限公司 一种栅栏同步方法及设备
EP2950214B1 (fr) * 2014-05-23 2024-04-03 Kalray Barriere de synchronisation materielle entre elements de traitement
US10318355B2 (en) * 2017-01-24 2019-06-11 Oracle International Corporation Distributed graph processing system featuring interactive remote control mechanism including task cancellation
CN108572926B (zh) * 2017-03-13 2022-02-22 阿里巴巴集团控股有限公司 一种用于同步中央处理器所属缓存的方法和装置
US11461130B2 (en) 2020-05-26 2022-10-04 Oracle International Corporation Methodology for fast and seamless task cancelation and error handling in distributed processing of large graph data
EP4206995A1 (en) * 2021-12-30 2023-07-05 Rebellions Inc. Neural processing device and method for synchronization thereof

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09305546A (ja) 1996-05-17 1997-11-28 Nec Corp マルチプロセッサシステム及びその同期方法

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008155806A1 (ja) 2007-06-20 2008-12-24 Fujitsu Limited バリア同期方法、装置、及びマルチコアプロセッサ
US7971029B2 (en) 2007-06-20 2011-06-28 Fujitsu Limited Barrier synchronization method, device, and multi-core processor
US8108660B2 (en) 2008-01-25 2012-01-31 Renesas Electronics Corporation Multiprocessor system and method of synchronization for multiprocessor system
KR101029769B1 (ko) 2008-11-19 2011-04-19 후지쯔 가부시끼가이샤 배리어 동기 장치, 배리어 동기 처리 시스템 및 방법, 리덕션 연산 장치, 리덕션 연산 처리 시스템 및 방법
JP2013174943A (ja) * 2012-02-23 2013-09-05 Nec Corp 超並列計算機、同期方法、同期プログラム
JP2013137833A (ja) * 2013-04-08 2013-07-11 Waseda Univ マルチプロセッサシステムおよびマルチプロセッサシステムの同期方法
JP2016525746A (ja) * 2013-08-13 2016-08-25 クゥアルコム・インコーポレイテッドQualcomm Incorporated 動的幅計算を用いたバリア同期
DE102015213370A1 (de) 2014-07-18 2016-01-21 Denso Corporation Datenverarbeitungsvorrichtung
JP2016024614A (ja) * 2014-07-18 2016-02-08 株式会社デンソー データ処理装置
US9891655B2 (en) 2014-12-05 2018-02-13 Fujitsu Limited Parallel operation system, apparatus and medium
JP2017010364A (ja) * 2015-06-24 2017-01-12 株式会社デンソー データ処理装置
JP2017062843A (ja) * 2016-11-30 2017-03-30 学校法人早稲田大学 マルチプロセッサシステム

Also Published As

Publication number Publication date
US7191294B2 (en) 2007-03-13
US20050050374A1 (en) 2005-03-03
JP4276028B2 (ja) 2009-06-10

Similar Documents

Publication Publication Date Title
JP4276028B2 (ja) マルチプロセッサシステムの同期方法
JP6525286B2 (ja) プロセッサコア及びプロセッサシステム
Li et al. NUMA-aware shared-memory collective communication for MPI
US8732711B2 (en) Two-level scheduler for multi-threaded processing
US10007527B2 (en) Uniform load processing for parallel thread sub-sets
US7398376B2 (en) Instructions for ordering execution in pipelined processes
TWI483180B (zh) 重疊原子區域執行的方法
US20090240895A1 (en) Systems and methods for coalescing memory accesses of parallel threads
KR20100115578A (ko) 재구성 가능한 프로세서 및 그 재구성 방법
US20120254551A1 (en) Method of generating code executable by processor
US7788672B2 (en) System for controlling assignment of a plurality of modules of a program to available execution units based on speculative executing and granularity adjusting
WO2015148679A1 (en) Method and processor for processing data
TW201435734A (zh) 條件阻擋以及急性阻擋的硬體排程之系統及方法
JP2002251321A (ja) キャッシュメモリシステム装置
US11226798B2 (en) Information processing device and information processing method
JP5680466B2 (ja) 並列処理システム及び並列処理システムの動作方法
JP6732032B2 (ja) 情報処理装置
US20110320781A1 (en) Dynamic data synchronization in thread-level speculation
JP6973856B2 (ja) 情報処理装置、実行方法及びプログラムの修正方法
Ma et al. Effective data exchange in parallel computing
CN117331669A (zh) 基于锁语义实现应用透明的动态处理器缓存分区调度方法和系统
CN116685958A (zh) 一种访问数据的方法和装置
Lo et al. Dynamic Data Migration to Eliminate Bank-level Interference for Stencil Applications in Multicore Systems
JP2001160035A (ja) 並列化コンパイラにおけるループスケジューリング方法
JPH02144757A (ja) 共有変数アクセス方式

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060322

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20080225

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080311

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080509

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080826

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081027

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: 20090303

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20090305

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120313

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120313

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130313

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130313

Year of fee payment: 4

LAPS Cancellation because of no payment of annual fees