JP2015210813A - 同期方法 - Google Patents

同期方法 Download PDF

Info

Publication number
JP2015210813A
JP2015210813A JP2014240199A JP2014240199A JP2015210813A JP 2015210813 A JP2015210813 A JP 2015210813A JP 2014240199 A JP2014240199 A JP 2014240199A JP 2014240199 A JP2014240199 A JP 2014240199A JP 2015210813 A JP2015210813 A JP 2015210813A
Authority
JP
Japan
Prior art keywords
thread
barrier
core
threads
cores
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
JP2014240199A
Other languages
English (en)
Other versions
JP6424590B2 (ja
Inventor
ウィルソン・ニコラス
Wilson Nicholas
アラステア サザン・ジェームズ
Alastair Southern James
アラステア サザン・ジェームズ
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
Publication of JP2015210813A publication Critical patent/JP2015210813A/ja
Application granted granted Critical
Publication of JP6424590B2 publication Critical patent/JP6424590B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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
    • 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/46Multiprogramming arrangements
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Power Sources (AREA)

Abstract

【課題】複数のコアをもつコンピュータ・システムにおける同期方法を提供する。
【解決手段】スレッドのグループが複数のコアで並列に実行され、前記スレッドのグループは、グループ内の各スレッドが進む前にバリアにおいて他のすべてのスレッドを待つバリア同期を使って同期され;前記スレッドのグループは、第一のスレッドが前記バリアに到達するまで実行され;前記第一のスレッドがポーリング状態にはいって、前記バリアの終了を示す解放条件があるかどうかを繰り返しチェックし;前記バリアに到達するその後のスレッドは前記第一のスレッドが実行されているコアに移され;他のコアは移されるスレッドの数が増すにつれてパワーダウンされ;前記第一のスレッドが前記解放条件を検出するとき、パワーダウンされたコアがパワーアップされ、前記スレッドによる使用のために利用可能となる。
【選択図】図3

Description

本発明は、それだけではないが特に高性能コンピューティング(HPC: high performance computing)用途における、時に中央処理装置(CPU)と称される現代のプロセッサのエネルギー効率に関する。
HPCシステムにおいては通例、計算集約的なおよび他の大規模なアプリケーションが実行される。そのようなHPCシステムはしばしば、実行可能形式の処理スレッドまたはプロセスのようなイベントの独立した諸シーケンスが並列に自律的に実行できる複数の処理ユニットまたは「コア」がある分散環境を提供する。
多くの異なるハードウェア構成およびプログラミング・モデルがHPCに適用可能である。現在HPCに対する一般的なアプローチは、それぞれ一つまたは複数のマルチコア・プロセッサ(または「チップ」)を有する複数のノードが高速ネットワークによって相互接続されるクラスター・システムである。各ノードは独自のメモリ領域をもつと想定され、該メモリ領域はそのノード内のすべてのコアにとってアクセス可能である。クラスター・システムは、一般的機能を実行するための既存のコード・ライブラリを利用して、ソース・コードを書く人間のプログラマーによってプログラムされることができる。次いでソース・コードはコンパイルされて、より低レベルの実行可能コード、たとえば特定の命令セットをもつプロセッサ型によって実行されることができるISA(Instruction Set Architecture[命令セット・アーキテクチャ])レベルのコードに、あるいは特定のプロセッサ専用のアセンブリ言語にされる。しばしば、アセンブリ・コードをアセンブルまたは(仮想マシンの場合)インタープリットして実行可能な機械コードにする最終段がある。アプリケーションの実行可能形式(時に単に「実行可能物」と称される)は、オペレーティング・システム(OS)の監督のもとで実行される。
複数のコアをもつコンピュータ・システムのアプリケーションは、プログラマーが複数コアの並列処理能力を活用できるようにするためのライブラリを増補した通常のコンピュータ言語(C/C++またはフォートランのような)で書かれてもよい。この点に関し、コアで実行される「プロセス」という言い方をするのが通例である。(マルチスレッド化された)プロセスは、マルチコアCPU内のいくつかのコアにまたがって実行されてもよい。
各プロセスは、プログラムされた命令のシーケンスであり、一つまたは複数のスレッドを含むことがある。スレッドは、オペレーティング・システム・スケジューラによって管理できるプログラムされた命令の最も小さなシーケンスでありうる。同じプロセス内に複数のスレッドが存在でき、しばしばメモリのような資源を共有できる。一方、一般には、プロセスは資源を共有しない。
プログラマーによって使用される一つのライブラリは、メッセージ渡しインターフェース(MPI: Message Passing Interface)であり、これは分散メモリ・モデル(各プロセスがその独自のメモリ領域をもつものと想定される)を使い、プロセス間の通信を容易にする。MPIは、プロセスのグループが定義され、区別されることを許容し、いわゆる「バリア同期(barrier synchronisation)」のためのルーチンを含む。これは、複数のプロセスまたは処理要素が協働するために重要な特徴である。バリア同期は、すべてのプロセスがプログラム中の同じ点に到達するまでプログラムを実行する同期グループ内のすべてのプロセスをホールドアップする技法である。これは、MPI関数コールによって達成されてもよい。このMPI関数コールがグループの全構成員によって呼び出されてはじめて、実行がさらに進むことができる。
あるいはまた、共有メモリ並列プログラミングでは、すべてのプロセスまたはコアが同じメモリまたはメモリ領域にアクセスできる。共有メモリ・モデルでは、プロセス間のデータの通信を明示的に指定する必要はない(あるプロセスによってなされる変更は他のすべてのプロセスにとって透明なので)。MPIコードについては、スレッド並列コードにおいて、実行がさらに進む前にすべてのスレッドがプログラム中の同じ点にあることを保証するために、バリア同期がしばしば要求される。
エネルギー効率はHPCではますます重要な要因となりつつある。今日最も大きな諸HPCシステム(http://www.top500.org/list/2013/11/)は、最大17MWものエネルギーを引き出すことがある。エネルギーの年間コストは(米国において)MW当たり約100万ドルに達しつつあるので、HPC施設にとってのエネルギーに対する運用経費は、システム設計において決定的な因子となりつつある。将来のエクサスケール・システム(現在最速のシステムより30倍速い)のための提案されている電力予算は20MWである(電力では1.2倍未満の増加)。このように、HPCシステム内での(および他のコンピュータ・システムにおける)電力使用を最適化するための新たな技法の開発は死活的に重要である。
上述したように、現代のCPUはいくつかの物理的なコア(処理ユニット)からなる。たとえば、富士通SPARC64(商標)IXfx CPUは16個のコアを含む。論理コア(すなわち、アプリケーションによって、利用可能であると感じられるコア)の数は、ハードウェア・マルチスレッド(二つ以上のスレッドを一つの物理コア上に同時にスケジューリングする)の使用によってさらに増加させられることができる。
CPUから最大パフォーマンスを引き出すために、アプリケーションは一般に、CPU内で実行の複数のスレッドを実行する。ここで、異なるスレッドが異なる論理コア上で実行されることができる。いくつかのアプリケーションでは、利用可能な論理コアよりも多くのスレッドがあることがあり、それらのスレッドは、オペレーティング・システム・スケジューラによってコアに動的に割り当てられる。他方、HPCアプリケーションは、各論理コアに一つのスレッドを割り当てる傾向があり、各スレッドは特定の物理コアに「ピン留めされる」ことがある(すなわち、スレッドは最初から最後までこのコア上で実行される)。これらの選択は、データをメモリ階層構造のあちこちに動かす必要を減らし(所与のメモリ・セクションとともに機能するスレッドが同じ物理的位置に留まるので)、資源競合を減らすことができる。
一般に、並列コードにおけるすべてのスレッドは、それらがピン留めされているコア内で、互いとは独立に実行され、共有(すべてのスレッドに可視)または(一つのスレッドに)専用でありうるメモリ内に記憶された変数に作用する。しかしながら、周期的に、それらのスレッドが互いに同期する(たとえば、あるスレッドが専用の変数の値を他のスレッドに通信するためまたは複数のスレッドが共有される変数に書き込む「レース状態」を回避するために、特定の変数の値について集団的に合意する)必要があることがある。これらの同期点は、各スレッドが同じ状態にあることを要求する。よって、最初の(そしてその後の各)スレッドが、同期が実行されるべきコード中の(バリア)点に到達するとき、そのスレッドは、他のすべてのスレッドも同じ状態に到達するまで実行を一時停止して待つ必要がある。すべてのスレッドが同じ状態になるのを待つこのプロセスは、バリア(またはバリア機構)として知られている。これは、MPIプロセスおよび他のプロセスについて上述したバリア同期と同じように機能するが、プロセス毎ではなくスレッド毎に機能する。
図1は、典型的なスレッド・バリア動作を示すタイムライン表現である。同じ図は、単にラベルの「スレッド」を「プロセス」に変えるだけで、プロセス・バリア動作にも当てはまる。これは他の図のすべてにもいえる。
六つのスレッドの場合が示されている。各スレッドは黒の菱形で示される点においてバリアに突き当たる。ひとたび最初のスレッドがバリアに到達するとき、グローバル・バリアが始まると言われ、最後のスレッドがバリアに到達するとき、グローバル・バリアが終わると言われる(その後通常の実行が続けられる)。バリアに到達したスレッドは、他のすべてのスレッドもバリアに到達したかどうかを判定するために能動的にポーリングする。この能動的なポーリング(「ビジー待機(busy wait)」)は、スレッド0、1、3、4および5について示される斜線の領域である。スレッド2はバリアに到達する最後のスレッドであり、バリアの終了を(よってポーリングの終了を)引き起こす。能動的なポーリングは不必要にエネルギーを消費することがある。
スレッド・バリアを実装するためにさまざまな方法が使われているが、大半は上記で説明した「ビジー待機」(各プロセスがバリアが終了したかどうかを決定する変数の値を求めて繰り返しポーリングする)また実行継続を防ぐためにスレッドをスケジュール解除するブロッキング・アルゴリズムに依拠する。スレッドは、(たとえば)pスレッド・ライブラリ・ルーチンへの呼び出しによってスケジュール解除または再スケジュールされることができる。よって、スレッドに、別のスレッド(最後にバリアに到達するもの)がpthread_cond_broadcast()への呼び出しを行なうまで待つように告げるために、pthread_cond_wait()が使用できる。
バリア動作に関わる不要に消費されるエネルギーを減らすことが望ましい。
本発明の第一の側面のある実施形態によれば、複数のコアをもつコンピュータ・システムにおける同期方法が提供される。ここで、スレッドのグループが複数のコアで並列に実行され、前記スレッドのグループは、グループ内の各スレッドが進む前にバリア点において他のすべてのスレッドを待つバリア同期を使って同期され、前記スレッドのグループは、第一のスレッドが前記バリア点に到達するまで実行され;前記第一のスレッドがポーリング状態にはいって、バリア同期の終了を示す解放条件があるかどうかを繰り返しチェックし;前記バリア点に到達するその後のスレッドは前記第一のスレッドが実行されているコアに移され;他のコアは移されるスレッドの数が増すにつれてパワーダウンされ;前記第一のスレッドが解放条件を検出するとき、パワーダウンされたコアがパワーアップされる(よって再びスレッドによる使用のために利用可能となる)。
このように、本発明の実施形態によれば、複数のコアで並列に実行されるスレッドのグループがある。それらのコアは、単一のノード上にあってもよいし、あるいはいくつかのノードに拡散していてもよい。単一のノード上で恩恵は最大となるであろう。複数のノードにまたがるバリア同期については、スレッドはノード間で移行されないであろう。よって、スレッドのグループが複数のノード上で実行されるシナリオでは、本方法はそれらのノードのうちの一つのみで実行されて他のノード上の他のスレッドはポーリング状態にはいるかスケジュール解除されるか、あるいはまた、各ノードについてバリアに到達する最初のスレッドがポーリング状態にはいり、そのノード上のその後のスレッドはそのノードからコアに移され、それにより、前記グループのスレッドの少なくとも一つが実行している各ノードが、アクティブである一つのコアおよび、移されるスレッドの数が増すにつれてパワーダウンされる他のコアを含むことができる。
発明実施形態の本記述において、用語「コア」はプロセッサ内の物理的なコア、すなわちたとえばその独自の回路およびキャッシュを含む物理的な処理ユニットをいう。物理的なコアは、プロセッサ内の他のすべての物理的なコアから独立に実行することができてもよい(そして潜在的には、プロセッサの残りの部分とは独立にパワーダウンできてもよい)。
プログラミングのコンテキストでは、物理的なコアは、上記で説明したようにプログラムの実行中に使用できる二つ以上の「論理コア」からなっていてもよい。しかしながら、これらの論理コアはプロセッサ内の物理的な資源を共有し、互いと独立にパワーダウンされることはできない。よって、その使用は本発明の範囲外である。
物理的なコアにピン留めされたスレッドでは特に、バリアは各物理的なコアに、バリアの間能動的にポーリングするスレッドを実行できることを要求する。これはエネルギーを浪費する(有用な計算が実行されることなく多くの物理的なコアでエネルギーが使われるという意味で)。発明者は、よりエネルギー効率のよいバリアなら、自らにピン留めされたポーリングするスレッドを有しかつバリアにおいて待っているだけのコアをパワーダウンし、ひとたびすべてのスレッドが同期点に到達してバリアが終了したときにそれらのコアを再開〔リスタート〕することができるであろうと認識するに至った。
ビジー待機状態にあるコアをパワーダウンすることは、明らかに可能ではない(繰り返しポーリングすることが要求されており、実際、繰り返しメモリにアクセスすることにより通常より多くのエネルギーを使うことがありうる)。他方、ブロッキング・バリアは、待機スレッドがアクティブのままであることを要求しないので、エネルギー節約によりふさわしいと思われるであろう。しかしながら、スレッドが非アクティブである間でも、コアは、ひとたびバリアが終わったときにスレッドを再スケジュールできるために、覚醒したままであることが必要である。さらに、ブロッキング・バリアは一般に、コアが諸スレッドによって過剰に加入されている(oversubscribed)(すなわち、コア当たり一つのスレッドの典型的なHPCの場合ではない)場合に最も好適であると考えられ、ビジー待機ほどよくスケーリングせず(排他制御(ミューテックス)および条件変数およびコンテキスト切り換えのため)、よってHPCシステムで使われる可能性は低い。
発明実施形態は、バリアにおいてビジー待機を実行することが要求されるスレッドの数を減らすよう機能し、バリアにおいて待機しているコアの大半がエネルギー節約のためにパワーダウンされることを許容することができる。根底にある発想は、バリアに到達する最初のスレッドはバリアの終わりを求めて能動的にポーリングするが、他のスレッドはその必要がないということである。二番目およびその後のスレッドはバリアに到達し、もはやアクティブでなくなる。これらその後のスレッドは、それらが実行されていたコアから移され(あるいは「ピン留め解除され」)、最初のスレッドがビジー待機を実行しているコアに移行させられて、スリープにされてもよい(スケジューリング解除され、よって事実上、バリアにおいてブロッキング・アルゴリズムを使う)。ひとたびアクティブなスレッドがなくなったら、計算コアはパワーダウンされることができ、よってエネルギーを節約できる。ひとたび最後のコアがバリアにまたは解放条件のはたらきをする他の何らかの好適な点に到達したら、すべてのコアは再びパワーアップされることができる。
この側面はスレッドに焦点を当てているが、同じ原理および定義は、たとえば分散式アプリケーションにおけるMPIバリアにおけるMPIプロセスのようなプロセスにも適用できることを注意しておくべきである。
好ましい実施形態では、最初のスレッドが解放条件を検出するとき、(最初のスレッドよりあとにバリアに到達する)その後のスレッドは、それらのスレッドが以前に実行していたコアに戻され、バリア後のプログラム実行が続けられる。
各スレッドは実行のために単一のコアに関連付けられていてもよい。それにより、そのコアに関連付けられた当該スレッド(単一のスレッドがある場合)または各スレッド(複数のスレッドがある場合)がバリアに到達して移される場合、そのコアはパワーダウンされる。よって、二つ以上のスレッドが単一のコアに関連付けられているときは、そのコアがパワーダウンできるのは、それらのスレッドすべてが移されたときである。逆に、あるコアに関連付けられたスレッドが一つだけであれば、そのコアは、その単一のスレッドがバリアに到達して移されたら、パワーダウンできる。
スレッドは、それが関連付けられている一つのコアにピン留めされてもよく、よってデフォルトでは、そのスレッドは最初から最後までそのコア上で実行される。スレッドが関連付けられたコアにピン留めされる場合、そのスレッドがバリアの間に移されてもよいのは、その時点でそのスレッドがアクティブ/実行中でないときのみである。
代替として、各スレッドは単一の非一様メモリ・アーキテクチャ(NUMA: non-uniform memory architecture)に関連付けられていてもよい。この場合、スレッドはソケット内のコア間で「浮動する」ことができる。各ノード内に複数のソケットがあってもよく、各ソケットが相異なるNUMA領域に関連付けられていてもよい。各NUMA領域は、そのNUMA領域内に物理的に位置されるメモリ領域への直接的なパイプをもつコアの集まりからなる。
同期のためのスレッドすべてがバリアに到達することに向けた進行をモニタリングするために、いかなる好適な方法が使われてもよい。ある好ましい実施形態では、バリアに到達する各スレッドは共有されるカウンタをインクリメントする。よって、その後のスレッドは、そのインクリメント後、解放条件があるかどうかを一度チェックしてもよい。それらその後のスレッドは次いで、最初のスレッドが実行中のコアに移ってもよい。
必ずしも最初のスレッドのあとにバリアに到達するすべてのスレッドが、実行中のコアから移されるわけではない。あとからバリアに到達するスレッドのいくつかは、実行中のコアに留まってもよい。より好ましくは、バリアに到達する最後のスレッドは、最初のスレッドが実行中のコアに移されない。バリアに到達するこの最後のスレッドは、共有されるカウンタをインクリメントして解放条件があるかどうかをチェックしたのち、単にバリア後に当該プログラムの実行を継続してもよい。
発明実施形態の一つの利点は、たとえその後のスレッドが最初のスレッドが実行中のコアに移されるときでも、移されたその後のスレッドが実行されていたコアのローカル・メモリは不変の状態に留まることができるということである。ひとたびその後のスレッドがこれらのコアに移し戻されたら、スレッド動作が継続できる。こうして、ローカル・メモリはその後は、スレッド実行の継続のため、更新されうる。
ひとたびバリアに到達するその後のスレッドが最初のスレッドが実行中のコアに移されたとき、それらその後のスレッドはスケジューリング解除されてもよく、あるいは同じようにビジー待機状態にはいって解放条件を求めてポーリングしてもよい。好ましくは、それらその後のスレッドはこの点でスケジューリング解除され、より好ましくは、最初のスレッドがスケジューリング解除されたその後のスレッドを、もともと実行されていたコアに戻す前に、覚醒させる。この代替は、エネルギー使用のより大きな削減を提供する。
パワーダウンされたコアの再アクティブ化(および可能性としてはその後のスレッドをもともと実行されていたコアに戻すこと)をトリガーするためには、いかなる好適な解放条件が使用されることもできる。たとえば、単純なタイマーを使うこともでき、またさらにはコアによるエネルギー使用の指標でもよい。この指標は、低下した数のスレッドがまだ実行中であることを示すことができる。
解放条件は、バリア機構の終了を示すが、バリア機構が終了する時より前に与えられることができる(それによりバリア終了の接近を予告し、処理がより迅速に再開できるようにする)。好ましい実施形態では、解放条件は、前記スレッドのグループのうち必要とされる数がバリアに到達したというものである。この必要とされる数は、たとえばすべてのスレッドであってもよく、あるいはスレッドのうち一つ、二つまたは三つを除いてすべてであってもよい。
特に好ましいある実施形態では、解放条件は最後のスレッドを除いたすべてがバリアに到達したというものである。
先述したように、バリアに到達する最後のスレッドは、最初のスレッドが実行中のコアに移される必要はない。また、バリアに到達する一つまたは複数の遅めのスレッドが移されず、その代わり最後のスレッドがバリアに到達するまでポーリング状態にはいることも可能である。たとえば、最後のスレッドが実行を終了する(そしてバリアが終了する)まで非常に短時間である可能性が高いため、最後から二番目のスレッドは最初のスレッドが実行中のコアに移されなくてもよい。
一つまたは複数の遅めのスレッドがポーリング状態にあって移動しておらず、いくつかのその後のスレッドが最初のスレッドが実行中のコアに移されている場合、前記その後のスレッドは、最後のスレッドがバリアに到達する時、もともと実行されていたコアに戻されることができる。
あるいはまた、前記その後のスレッドは、ひとたび前記解放条件が満たされたら戻されて、最後のスレッドがバリアに到達するまでポーリング状態にはいってもよい(解放条件が、最後のスレッドがバリアに到達する前、よってバリア機構が終了する前に生起するとして)。
あるさらなる側面の実施形態によれば、同期方法を実装するよう構成された複数のコアをもつコンピュータ・システムであって、コアのグループが、グループ内の各スレッドが進む前にバリアにおいて他のすべてのスレッドを待つバリア同期を使って複数のスレッドの並列実行を許容するよう構成されており;前記コアは、第一のスレッドが前記バリアに到達するまで前記スレッドの実行を許容するよう構成され;前記第一のスレッドが実行中のコアは、次いで、前記第一のスレッドが、バリアの終了を示す解放条件があるかどうかをチェックするポーリング状態にはいることを許容するよう構成されており;さらなるコアは、その後バリアに到達するその後のスレッドの実行を許容し、前記その後のスレッドが前記第一のスレッドが実行中のコアに移され、移されるスレッドの数が増す際にパワーダウンされることを許容し;前記第一のスレッドが実行されているコアは、前記第一のスレッドが解放条件を検出することを許容し、その後のスレッドが前記さらなるコアに戻ることを許容し、前記さらなるコアは前記スレッドによる使用のためにパワーアップされるよう動作可能である、コンピュータ・システムが提供される。
コンピュータ・システムはHPCシステムであってもよい。該システムはコアの少なくとも一つのグループを有し、それぞれが複数のコアを含む複数のノードを有していてもよい。ノードは通例、相互接続によって接続されており、少なくとも一つのマルチコア・プロセッサおよび入出力機能とともに特定のメモリ領域を含む。
上記で述べられた本発明の陳述は、特にスレッドに言及している。しかしながら、本発明は、コンピューティング・システムにおけるイベントの別の独立なシーケンスであるプロセスにも等しく適用可能である。よって、上記の陳述のすべては、プロセスにも等しく適用可能である。
たとえば、あるさらなる側面のある実施形態によれば、複数のコアをもつコンピュータ・システムにおける同期方法であって、プロセスのグループが複数のコアで並列に実行され、前記プロセスのグループは、グループ内の各プロセスが進む前にバリアにおいて他のすべてのプロセスを待つバリア同期を使って同期され、前記プロセスのグループは、第一のプロセスが前記バリアに到達するまで実行され;前記第一のプロセスがポーリング状態にはいって、バリアの終了を示す解放条件があるかどうかを繰り返しチェックし;前記バリアに到達するその後のプロセスは前記第一のプロセスが実行されているコアに移され;他のコアは移されるプロセスの数が増すにつれてパワーダウンされ;前記第一のプロセスが解放条件を検出するとき、パワーダウンされたコアがパワーアップされ、プロセスによる使用のために利用可能となる、方法が提供される。
プロセスは二つ以上のコアで実行されてもよいが、通常は単一のノード上でのみ実行されうる。各ノードは二つの以上のプロセスを実行していてもよい。
(プロセスのグループが複数のノード上で実行される)いくつかの実施形態では、プロセスはノード間で移動させられてもよい。これは、ノード全体がパワーダウンされることを可能にしうる(ただし、たとえばノード・メモリへの電力が失われるならばこれは不都合でありうる)。二つ以上のノードにまたがる諸プロセスの同期に関わるたいていのシナリオでは、各ノード内の諸プロセスは単一のコアに移され、次いでそのノード内の他のすべてのコアはパワーダウンされる。こうして、全部で一つのコアではなく、ノード当たり一つのコアが立ち上げられたままとなる。
最後の側面のある実施形態によれば、同期方法を実装するよう構成された複数のコアをもつコンピュータ・システムであって、コアのグループが、グループ内の各プロセスが進む前にバリアにおいて他のすべてのプロセスを待つバリア同期を使って複数のプロセスの並列実行を許容するよう構成されており;前記コアは、第一のプロセスが前記バリアに到達するまで前記プロセスの実行を許容するよう構成され;前記第一のプロセスが実行中のコアは、次いで、前記第一のプロセスが、バリアの終了を示す解放条件があるかどうかをチェックするポーリング状態にはいることを許容するよう構成されており;さらなるコアは、その後バリアに到達するその後のプロセスの実行を許容し、前記その後のプロセスが前記第一のプロセスが実行中のコアに移され、移されるプロセスの数が増す際にパワーダウンされることを許容し;前記第一のプロセスが実行されているコアは、前記第一のプロセスが解放条件を検出することを許容し、その後のプロセスが前記さらなるコアに戻ることを許容し、前記さらなるコアは前記プロセスによる使用のためにパワーアップされるよう動作可能である、コンピュータ・システムが提供される。
あるさらなる一般的なプログラム側面によれば、分散コンピュータ・システムのようなコンピューティング装置にロードされた時に該コンピューティング装置を、上記の方法定義の任意のものまたはその任意の組み合わせに基づく方法段階を実行するよう構成するプログラムが提供される。
本発明の種々の側面の任意のものの特徴およびサブ特徴は自由に組み合わされてもよい。たとえば、コンピュータ・システムの好ましい実施形態は、方法の一つまたは複数の好ましい特徴に対応する機能を組み込むよう構成されてもよい。
本発明は、コンピュータ・ハードウェア、ファームウェア、ソフトウェアまたはそれらの組み合わせにおいて実装されることができる。本発明は、一つまたは複数のハードウェア・モジュールによる実行のためにまたは一つまたは複数のハードウェア・モジュールの動作を制御するための、コンピュータ・プログラムまたはコンピュータ・プログラム・プロダクト、すなわち情報担体に、たとえばコンピュータ可読記憶デバイスまたは伝搬される信号に有体に具現されたコンピュータ・プログラムとして実装されることができる。
コンピュータ・プログラムは、コンピュータ・プログラム部分または二つ以上のコンピュータ・プログラムの形であることもでき、コンパイル型またはインタープリタ型を含む任意の形のプログラミング言語で書くことができ、ライブラリ、スタンドアローン・プログラムとしてまたはモジュール、コンポーネント、サブルーチンまたはデータ処理環境における使用に好適な他のユニットとしてを含め、任意の形で展開できる。
本発明の方法段階は、入力データに対して作用して出力を生成することによって本発明の機能を実行するようコンピュータ・プログラムを実行するプログラム可能なプロセッサによって実行されることができる。
本発明は個別的な実施形態を使って記述されている。他の実施形態が付属の請求項の範囲内である。たとえば、本発明の段階は、異なる順序で実行され、それでいて望ましい結果を達成することができる。
実行される実施形態に基づく装置は、ある種の機能を実行するよう構成される、動作可能であるまたは配置されるものとして記述される。この構成または配置は、ハードウェアまたはミドルウェアまたは他の任意の好適なシステムの使用によってであることができる。好ましい実施形態では、構成または配置はソフトウェア、好ましくはアプリケーション・ソフトウェアより低レベルのソフトウェアによる。
本発明についてこれから、図面に示される個別的な限定しない実施形態を参照しつつ説明する。
スレッドおよびバリアの動作を示す概略図である。 本発明の一般的な実施形態を描く流れ図である。 従来技術のバリア動作と発明実施形態に基づくバリア動作の比較を示す図である。 個別的な発明実施形態の動作を示すフローチャートである。
図2は、本発明の一般的な実施形態を流れ図の形で示している。最初、ステップS10においてスレッドが実行され、ステップS20において第一のスレッドがバリアに到達する。次いで、第一のスレッドはS30において解放条件があるかどうかをチェックする。これは、図中で横方向の破線で示される解放条件が満たされるまで繰り返し実行される。第一のスレッドによるこの動作と並列に、その後のスレッドがステップS40においてバリアに到達し、次いでステップS50において移され、それによりスレッドが存在しなくなったコアはステップS60でパワーダウンできる。ひとたび破線で示される解放条件が満たされたら、これらのコアはステップS70においてパワーアップされ、スレッドはステップS80において実行を続ける。
図3は、従来技術(左)の発明実施形態(右)との比較である。これらの概略図はいずれも、ノードにおけるたとえば六つのコアC0〜C5を示している。六つのコアは一緒になってCPUをなしうる(各ノードについて一つまたは複数のCPUが設けられてもよい)。各コアは、関連付けられた実行スレッドT0〜T5をもつ。従来技術では、すべてのスレッドがコアにピン留めされており、バリアの間、アクティブである。右側の概略図では、スレッドは従来技術と同じレイアウトで実行されてくるが、発明実施形態に基づく方法が実行される。
図3の右側に示されるバリアの例では、コアC0、C1、C4およびC5は、スレッド2がバリアの終わりに達するまでパワーダウンされることができる。(コア3上の)スレッド3が最初にバリアに到達する。このスレッドは、ビジー待機を続ける。しかしながら、スレッド0、1、4および5がバリアに達したときは、コア0、1、4および5からピン留め解除され、コア3上でスリープさせられる。コア0、1、4および5はこの時間の間、パワーダウンされることができる。その間、スレッド2はコア2上で走り続ける。スレッド2(最後のスレッド)がバリアに到達するとき、スレッド3がスレッド0、1、4および5を覚醒させ、それらのスレッドは次いで実行継続のためにコア0、1、4および5に戻される。スレッドが移行させられるとき、それらのスレッドはそれまで走っていたコア上にデータを残し、よってそれらのスレッドの移動においてまたは実行の再開においてデータ転送は関与しない。
図4は、発明実施形態において提案されるバリアを通じたさまざまなスレッドの進行を示すフローチャートである。従来技術(ビジー待機)では、すべてのスレッドがステップS100、S110、S120、S130およびS200を通じる左側のルートを取る。各スレッドはカウンタをインクリメントし、カウンタ値がスレッド数に達するまでポーリングする。
この実施形態の方法を使うと、一つのコアのみがこのエネルギー集約的な動作を実行することを要求される。バリアに到達するその後のスレッドはその代わりに、走っているコアから移され、該スレッドが走っていたコアはその後エネルギー節約のためにパワーダウンされる。バリアの終わりには、すべてのコアが再びパワーアップされ、スレッドはもとの位置に戻される。
最初、ノード(同じメモリを共有する一つまたは複数のCPU)内のN個のコアにピン留めされたN個のスレッドがある。これらのスレッドは、プログラム内の並列領域を実行している(すなわち、全部が独立したタスクを実行している)(S100)。該並列領域の終わりに同期点がある。この同期点はバリアを含み、バリアにおいて各スレッドは、何らかの集団的動作を実行する前に、他のすべてのスレッドが完了するのを待たなければならない。
一つのスレッドが最初にバリアに到達する(S110)。従来技術のバリア実装におけるように、このスレッドは共有されるカウンタ(スレッドのうち何個がこのバリアに到達したかを記録するもの)を0から1にインクリメントさせ(S120)、次いでビジー待機を開始するべきである。ビジー待機では、共有されるカウンタの値がNに達したかどうかを繰り返しチェックする(S130)。(コアn上で走る)n番目のスレッドがバリアに到達するとき(S140)、該スレッドもステップS150において共有されるカウンタを(n−1からnに)インクリメントし、カウンタ値がNに達したかどうかを一度チェックする。達していなければ、ビジー待機を実行するのではなく、このスレッドは走っているコアからピン留め解除され、ステップS160においてバリアに到達した最初のスレッドを実行しているコアに移され、ステップS170においてそこでスケジューリング解除される(すなわち、スリープ状態にはいる)。今やコアn上にスケジュールされた作業はなく、よって(コア当たり一スレッドというこのシナリオでは)このコアはエネルギー節約のためにパワーダウンされる。ここでステップS180においてバリアに到達する最後のスレッドを見ると、ステップS190におけるインクリメント後、共有カウンタの値はNに等しくなる。n=Nであり、すべてのスレッドがバリアに到達したのである(すなわち、バリアの終了準備ができた)。この状況において、バリアに到達したこのスレッドは、そのコアからピン留め解除されることなく、ステップS200において通常の実行を続けることができる。
その間、バリアに到達した最初のスレッドは、ステップS130において共有カウンタの値をチェックすることを続けている。最後のスレッドがカウンタをインクリメントしてプログラムの通常実行を続けたあとまもなく、このスレッドはカウンタの値が今やNに等しいことに気づく。従来技術では、その際、このスレッドも通常実行を続ける。しかしながら、ここで詳細に説明している発明実施形態では、このスレッドはまず、並列にまたは任意の順序で、他のコアをパワーアップして他のスレッドを覚醒させ(S210)、ステップS220においてそれらのスレッドをもともと走っていた(そしてローカル・メモリがパワーダウンされる前と同じ状態のままである)コアに戻す動作をする必要がある。ひとたびこれがなされたら、すべてのスレッドはステップS200において通常実行を続けることができる。
図3および図4において示される実施形態のためのバリアにおいて使用される上述した厳密なアルゴリズムは、普通ならビジー待機を実行するところのコアの大半をパワーダウンするという主たる特徴を保持しつつ、やや修正することができる。可能な修正は次のようなものを含む。
・方法は、(最後ではなく)最後から二番目のスレッド(または以前のスレッド)がバリアに達するときにスリープ中のコアをパワーアップしてもよい(そして可能性としては、それらのコアにスレッドを戻すプロセスを開始してもよい)。これは、バリアが終了したら(最後のスレッドがバリアに到達したら)すぐにコアが先に進む準備ができているようにすることによって、時間を節約することになる。スレッドがバリアの終わりより前にコアに戻された場合、それらのスレッドはバリアの終わりを判別するためにビジー待機を実行することができることを注意しておく。
・ピン留め解除され移されたコアは、バリアに達した最初のスレッドを走らせているコアに移されたのち、スケジューリング解除されることを要求されなくてもよい。単にこのコア上ですべてのスレッドにビジー待機を実行させることは、一つのスレッドにそうさせるのに比べエネルギーの点でコスト高とはならないことがありうる(各スレッドは交互にポーリングすることになるので)。これは、標準的なブロッキング・バリアに見られるミューテックスおよび条件変数のコストを被らないという利点がある。しかしながら、スレッドを移す際にデータ移動が実行されないことが重要である。
・コアの間でスレッドを移すこととコアを再開することには(時間の面では確実に、そして可能性としてはエネルギーの点で)コストがある可能性が高い。よって、アプリケーションにおけるバリア動作の平均待機時間(および/または平均エネルギー・コスト)のようなパラメータが何らかの閾値より上である場合にのみ、この挙動をオンにすることが望ましいことがありうる。これは、プロファイルに案内された実行を介して(すなわち、システムはアプリケーションの実行中に上記の新たなバリア実装が有利であるか否かを検出する)、あるいはユーザー(システム管理者)が上記の修正されたバリアが使われるべき時を手動で指定することによって、実装されることができる。
・同じ方法論は、MPIプロセスのようなプロセスのためにも使用されることができる。アルゴリズム・レベルでは、プロセスに等しく適用可能にするために必要とされる変更はない。MPIライブラリ内のビジー待機を置換するために変更を実装する必要があり、何らかのメッセージ渡しが要求されることがありうるが、これはノード内でスレッドを使うときの上記アルゴリズムと完全に同様であろう。たとえば、ノード内のプロセスがスレッド・シナリオにおいてと同じであろう二レベルの階層があってもよいが、ノード間の同期の追加的なレベルがあることになる。二レベルの階層は、各ノードが二つ以上のプロセス(たとえば、二つ以上のノードにまたがるべきではないMPIプロセス)を実行していることがありうるからである。よって、各ノード内のプロセスは、スレッド方法論と同様に実装される、上記階層の一つのレベルであってもよい。一方、より高価なノード内バリアは第二のレベルである(そしてノード間のプロセスの移動を含まなくてもよい)。
・発明実施形態は、コア当たり二つ以上のスレッドがあるハードウェア・マルチスレッド(いくつかのインテル実装ではハイパースレッディング(hyper-threading)として知られている)とともに機能することもできる。その場合、諸スレッドは単に、バリアに達した際に単一の物理的なコアに移され、より多くのスレッドがバリアに到達するにつれて他のコアが徐々にシャットダウンする。あるいはまた、一つのコア上の諸スレッドが、所与の数のスレッドがバリアに到達するまで、ビジー待機を実行することができ、次いですべてが移されて当該コアがシャットダウンされる。これは、コア当たり一つのスレッドをもって実行するアプリケーションに比べて恩恵は小さくなることがあるが、それでも有利である。たとえばPOWERアーキテクチャにおけるインテルのハイパースレッディングまたは同時マルチスレッディング(SMT: simultaneous multi-threading)のようなハードウェア・マルチスレッドは、HPCアプリケーションのサブセットにおいてのみ有利である。
バリア自身はソフトウェアまたはハードウェアのいずれでも実装できる(おそらくソフトウェアがきわめて普通である)。しかしながら、スレッド移行はまず確実にソフトウェア実装を要求するであろう。よって、発明実施形態はおそらくは少なくとも部分的にはソフトウェア・ベースとなる必要があるであろう。
発明実施形態のバリアはスレッド(またはプロセス)を実行しているコード中に直接書かれることができるが、システム上でのスレッドの振る舞い方を制御するオペレーティング・システムまたはライブラリの一部である可能性がより高い。たとえば、ビジー待機を実行するためにそれらのライブラリに現在存在しているコードを直接置換するものであってもよい。
このように、発明実施形態の方法は、すべてのノード上で利用可能なシステム・ソフトウェア(おそらくはオペレーティング・システムまたはライブラリ)において実装される可能性が高い。バリアがアプリケーション・ソフトウェアにおいて直接的に実装されることは、可能ではあるが、可能性は低い(バリアのような単純なものをすべてのアプリケーションのためのソフトウェアにおいて実装し直さなければならないのは望ましくないであろう)。
発明実施形態は、次の有利な特徴をもちうる:
●関連付けられたスレッドがバリアに到達したコアをパワーダウンする
○従来技術は、バリア動作の間にコアをパワーダウンすることができず、エネルギーが無駄になる。
●バリア動作の間、スレッドをコアからピン留め解除する(コアがパワーダウンできるようにするために必要)。バリアの外ではスレッドはコアにピン留めされたままであることに注意
○従来技術はバリア動作の間、コアの間でスレッドを移動させない(バリアのブロッキング実装によって、ピン留めされているコア上でスケジューリング解除されることはあるが)。
発明実施形態の一つの主要な恩恵は、バリアの間、すべてのコアを実行させはしない(特に、潜在的に高電力なビジー待機を実行させない)結果としての、電力節約であると見ることができる。
好ましい実施形態においては、従来技術の場合のようにコア全部ではなく、バリアにおいてアクティブな(アイドル)コアは一つしかない。これは、待機中のスレッドを関連付けられたコアからピン留め解除し、これらのコアをその後パワーダウンすることによって達成されてもよい。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
複数のコアをもつコンピュータ・システムにおける同期方法であって、
スレッドのグループが複数のコアで並列に実行され、前記スレッドのグループは、グループ内の各スレッドが進む前にバリアにおいて他のすべてのスレッドを待つバリア同期を使って同期され;
前記スレッドのグループは、第一のスレッドが前記バリアに到達するまで実行され;
前記第一のスレッドがポーリング状態にはいって、前記バリアの終了を示す解放条件があるかどうかを繰り返しチェックし;
前記バリアに到達するその後のスレッドは前記第一のスレッドが実行されているコアに移され;
他のコアは移されるスレッドの数が増すにつれてパワーダウンされ;
前記第一のスレッドが前記解放条件を検出するとき、パワーダウンされたコアがパワーアップされ、前記スレッドによる使用のために利用可能となる、
同期方法。
(付記2)
前記第一のスレッドが前記解放条件を検出するとき、前記その後のスレッドは以前に実行されていたコアに戻される、
付記1記載の同期方法。
(付記3)
各スレッドが実行のために単一のコアに関連付けられており、コアに関連付けられた唯一のスレッドまたは各スレッドが前記バリアに到達して移される場合、そのコアはパワーダウンされる、
付記1または2記載の同期方法。
(付記4)
各スレッドが、一つの関連付けられたコアにピン留めされており、それにより、デフォルトでは、スレッドは最初から最後までそのコア上で実行され、前記バリアの間にのみ移されうる、
付記1ないし3のうちいずれか一項記載の同期方法。
(付記5)
各スレッドは単一の非一様メモリ・アーキテクチャ(NUMA)領域に関連付けられており、それにより、あるNUMA領域に関連付けられたスレッドが前記バリアに到達し、移される際、前記NUMA領域内のコアはパワーダウンされる、
付記1または2記載の方法。
(付記6)
前記バリアに到達する各スレッドが共有されるカウンタをインクリメントし、
その後のスレッドは、該スレッドによるインクリメント後、前記第一のスレッドが実行されているコアに移される前に、前記解放条件があるかどうかを一度チェックする、
付記1ないし5のうちいずれか一項記載の方法。
(付記7)
前記バリアに到達する最後のスレッドは、前記第一のスレッドが実行されているコアに移されず、スレッド実行を継続する、
付記2ないし6のうちいずれか一項記載の同期方法。
(付記8)
移された前記その後のスレッドが実行されていたコアにあるローカル・メモリが、前記その後のスレッドが該コアに戻されるまで不変の状態に留まる、
付記1ないし7のうちいずれか一項記載の同期方法。
(付記9)
ひとたび前記その後のスレッドが前記第一のスレッドが実行されているコアに移されたとき、前記その後のスレッドはスケジューリング解除され、
前記第一のスレッドが、スケジューリング解除された前記その後のスレッドを、もともと実行されていたコアに戻す前に、覚醒させる、
付記1ないし8のうちいずれか一項記載の同期方法。
(付記10)
前記解放条件は、前記グループのスレッドのうち必要とされる数が前記バリアに到達したというものであり、前記必要とされる数はすべてのスレッドである、
付記1ないし9のうちいずれか一項記載の同期方法。
(付記11)
前記解放条件は、前記グループのスレッドのうち必要とされる数が前記バリアに到達したというものであり、前記必要とされる数はすべてのスレッドより少なく、好ましくは最後のスレッド以外のすべてである、
付記1ないし9のうちいずれか一項記載の同期方法。
(付記12)
前記バリアに到達する一つまたは複数の遅めのスレッドが前記第一のスレッドが実行されているコアに移されず、最後のスレッドが前記バリアに到達するまでポーリング状態にはいり、最後のスレッドが前記バリアに到達したあとでスレッド実行を継続し、
前記その後のスレッドは、最後のスレッドが前記バリアに到達するまで、もともと実行されていたコアに戻されない、あるいは、前記その後のスレッドは、ひとたび前記解放条件が満たされたら前記コアに戻され、最後のスレッドが前記バリアに到達するまでポーリング状態にはいる、
付記11記載の同期方法。
(付記13)
同期方法を実装するよう構成された複数のコアをもつコンピュータ・システムであって、
コアのグループが、グループ内の各スレッドが進む前にバリアにおいて他のすべてのスレッドを待つバリア同期を使って複数のスレッドの並列実行を許容するよう構成されており;
前記コアは、第一のスレッドが前記バリアに到達するまで前記スレッドの実行を許容するよう構成されており;
前記第一のスレッドが実行されているコアは、次いで、前記第一のスレッドが、前記バリアの終了を示す解放条件があるかどうかをチェックするポーリング状態にはいることを許容するよう構成されており;
さらなるコアは、その後前記バリアに到達するその後のスレッドの実行を許容し、前記その後のスレッドが前記第一のスレッドが実行されているコアに移され、移されるスレッドの数が増す際にパワーダウンされることを許容するよう構成されており;
前記第一のスレッドが実行されているコアは、前記第一のスレッドが前記解放条件を検出することを許容し、前記その後のスレッドが前記さらなるコアに戻ることを許容するよう構成されており;
前記さらなるコアは前記スレッドによる使用のためにパワーアップされるよう動作可能である、
コンピュータ・システム。
(付記14)
複数のコアをもつコンピュータ・システム上で実行されるときに方法を実行するコンピュータ・プログラムであって、前記方法において、
スレッドのグループが複数のコアで並列に実行され、前記スレッドのグループは、グループ内の各スレッドが進む前にバリアにおいて他のすべてのスレッドを待つバリア同期を使って同期され;
前記スレッドのグループは、第一のスレッドが前記バリアに到達するまで実行され;
前記第一のスレッドがポーリング状態にはいって、前記バリアの終了を示す解放条件があるかどうかを繰り返しチェックし;
前記バリアに到達するその後のスレッドは前記第一のスレッドが実行されているコアに移され;
他のコアは移されるスレッドの数が増すにつれてパワーダウンされ;
前記第一のスレッドが前記解放条件を検出するとき、パワーダウンされたコアがパワーアップされ、前記スレッドによる使用のために利用可能となる、
コンピュータ・プログラム。
(付記15)
複数のコアをもつコンピュータ・システムにおける同期方法であって、
プロセスのグループが複数のコアで並列に実行され、前記プロセスのグループは、グループ内の各プロセスが進む前にバリアにおいて他のすべてのプロセスを待つバリア同期を使って同期され;
前記プロセスのグループは、第一のプロセスが前記バリアに到達するまで実行され;
前記第一のプロセスがポーリング状態にはいって、前記バリアの終了を示す解放条件があるかどうかを繰り返しチェックし;
前記バリアに到達するその後のプロセスは前記第一のプロセスが実行されているコアに移され;
他のコアは移されるプロセスの数が増すにつれてパワーダウンされ;
前記第一のプロセスが前記解放条件を検出するとき、パワーダウンされたコアがパワーアップされ、前記プロセスによる使用のために利用可能となる、
方法。
(付記16)
同期方法を実装するよう構成された複数のコアをもつコンピュータ・システムであって、
コアのグループが、グループ内の各プロセスが進む前にバリアにおいて他のすべてのプロセスを待つバリア同期を使って複数のプロセスの並列実行を許容するよう構成されており;
前記コアは、第一のプロセスが前記バリアに到達するまで前記プロセスの実行を許容するよう構成されており;
前記第一のプロセスが実行中のコアは、次いで、前記第一のプロセスが、前記バリアの終了を示す解放条件があるかどうかをチェックするポーリング状態にはいることを許容するよう構成されており;
さらなるコアが、その後前記バリアに到達するその後のプロセスの実行を許容し、前記その後のプロセスが前記第一のプロセスが実行されているコアに移され、移されるプロセスの数が増す際にパワーダウンされることを許容するよう構成されており;
前記第一のプロセスが実行されているコアは、前記第一のプロセスが前記解放条件を検出することを許容し、前記その後のプロセスが前記さらなるコアに戻ることを許容するよう構成されており;
前記さらなるコアは前記プロセスによる使用のためにパワーアップされるよう動作可能である、
コンピュータ・システム。
(付記17)
複数のコアをもつコンピュータ・システム上で実行されるときに方法を実行するコンピュータ・プログラムであって、前記方法において、
プロセスのグループが複数のコアで並列に実行され、前記プロセスのグループは、グループ内の各プロセスが進む前にバリアにおいて他のすべてのプロセスを待つバリア同期を使って同期され;
前記プロセスのグループは、第一のプロセスが前記バリアに到達するまで実行され;
前記第一のプロセスがポーリング状態にはいって、前記バリアの終了を示す解放条件があるかどうかを繰り返しチェックし;
前記バリアに到達するその後のプロセスは前記第一のプロセスが実行されているコアに移され;
他のコアは移されるプロセスの数が増すにつれてパワーダウンされ;
前記第一のプロセスが前記解放条件を検出するとき、パワーダウンされたコアがパワーアップされ、前記プロセスによる使用のために利用可能となる、
コンピュータ・プログラム。
S10 スレッドを実行
S20 第一のスレッドがバリアに到達
S30 第一のスレッドが解放条件を検査
S40 その後のスレッドがバリアに到達
S50 その後のスレッドが移される
S60 コアがパワーダウンされる
S70 コアがパワーアップされる
S80 スレッドを実行

S100 通常の実行(全スレッド)
S110 第一のスレッドがバリアに到達
S120 共有カウンタをインクリメント
S130 カウンタがスレッド数に等しいか?
S140 その後のスレッドがバリアに到達
S150 共有カウンタをインクリメント
S160 第一のスレッドを実行中のコアに移動
S170 スリープ
S180 最後のスレッドがバリアに到達
S190 共有カウンタをインクリメント
S200 通常の実行(全スレッド)
S210 スリープ中のスレッドおよびコアを覚醒
S220 もとのコアに移動

Claims (17)

  1. 複数のコアをもつコンピュータ・システムにおける同期方法であって、
    スレッドのグループが複数のコアで並列に実行され、前記スレッドのグループは、グループ内の各スレッドが進む前にバリアにおいて他のすべてのスレッドを待つバリア同期を使って同期され;
    前記スレッドのグループは、第一のスレッドが前記バリアに到達するまで実行され;
    前記第一のスレッドがポーリング状態にはいって、前記バリアの終了を示す解放条件があるかどうかを繰り返しチェックし;
    前記バリアに到達するその後のスレッドは前記第一のスレッドが実行されているコアに移され;
    他のコアは移されるスレッドの数が増すにつれてパワーダウンされ;
    前記第一のスレッドが前記解放条件を検出するとき、パワーダウンされたコアがパワーアップされ、前記スレッドによる使用のために利用可能となる、
    同期方法。
  2. 前記第一のスレッドが前記解放条件を検出するとき、前記その後のスレッドは以前に実行されていたコアに戻される、
    請求項1記載の同期方法。
  3. 各スレッドが実行のために単一のコアに関連付けられており、コアに関連付けられた唯一のスレッドまたは各スレッドが前記バリアに到達して移される場合、そのコアはパワーダウンされる、
    請求項1または2記載の同期方法。
  4. 各スレッドが、一つの関連付けられたコアにピン留めされており、それにより、デフォルトでは、スレッドは最初から最後までそのコア上で実行され、前記バリアの間にのみ移されうる、
    請求項1ないし3のうちいずれか一項記載の同期方法。
  5. 各スレッドは単一の非一様メモリ・アーキテクチャ(NUMA)領域に関連付けられており、それにより、あるNUMA領域に関連付けられたスレッドが前記バリアに到達し、移される際、前記NUMA領域内のコアはパワーダウンされる、
    請求項1または2記載の方法。
  6. 前記バリアに到達する各スレッドが共有されるカウンタをインクリメントし、
    その後のスレッドは、該スレッドによるインクリメント後、前記第一のスレッドが実行されているコアに移される前に、前記解放条件があるかどうかを一度チェックする、
    請求項1ないし5のうちいずれか一項記載の方法。
  7. 前記バリアに到達する最後のスレッドは、前記第一のスレッドが実行されているコアに移されず、スレッド実行を継続する、
    請求項2ないし6のうちいずれか一項記載の同期方法。
  8. 移された前記その後のスレッドが実行されていたコアにあるローカル・メモリが、前記その後のスレッドが該コアに戻されるまで不変の状態に留まる、
    請求項1ないし7のうちいずれか一項記載の同期方法。
  9. ひとたび前記その後のスレッドが前記第一のスレッドが実行されているコアに移されたとき、前記その後のスレッドはスケジューリング解除され、
    前記第一のスレッドが、スケジューリング解除された前記その後のスレッドを、もともと実行されていたコアに戻す前に、覚醒させる、
    請求項1ないし8のうちいずれか一項記載の同期方法。
  10. 前記解放条件は、前記グループのスレッドのうち必要とされる数が前記バリアに到達したというものであり、前記必要とされる数はすべてのスレッドである、
    請求項1ないし9のうちいずれか一項記載の同期方法。
  11. 前記解放条件は、前記グループのスレッドのうち必要とされる数が前記バリアに到達したというものであり、前記必要とされる数はすべてのスレッドより少なく、好ましくは最後のスレッド以外のすべてである、
    請求項1ないし9のうちいずれか一項記載の同期方法。
  12. 前記バリアに到達する一つまたは複数の遅めのスレッドが前記第一のスレッドが実行されているコアに移されず、最後のスレッドが前記バリアに到達するまでポーリング状態にはいり、最後のスレッドが前記バリアに到達したあとでスレッド実行を継続し、
    前記その後のスレッドは、最後のスレッドが前記バリアに到達するまで、もともと実行されていたコアに戻されない、あるいは、前記その後のスレッドは、ひとたび前記解放条件が満たされたら前記コアに戻され、最後のスレッドが前記バリアに到達するまでポーリング状態にはいる、
    請求項11記載の同期方法。
  13. 同期方法を実装するよう構成された複数のコアをもつコンピュータ・システムであって、
    コアのグループが、グループ内の各スレッドが進む前にバリアにおいて他のすべてのスレッドを待つバリア同期を使って複数のスレッドの並列実行を許容するよう構成されており;
    前記コアは、第一のスレッドが前記バリアに到達するまで前記スレッドの実行を許容するよう構成されており;
    前記第一のスレッドが実行されているコアは、次いで、前記第一のスレッドが、前記バリアの終了を示す解放条件があるかどうかをチェックするポーリング状態にはいることを許容するよう構成されており;
    さらなるコアは、その後前記バリアに到達するその後のスレッドの実行を許容し、前記その後のスレッドが前記第一のスレッドが実行されているコアに移され、移されるスレッドの数が増す際にパワーダウンされることを許容するよう構成されており;
    前記第一のスレッドが実行されているコアは、前記第一のスレッドが前記解放条件を検出することを許容し、前記その後のスレッドが前記さらなるコアに戻ることを許容するよう構成されており;
    前記さらなるコアは前記スレッドによる使用のためにパワーアップされるよう動作可能である、
    コンピュータ・システム。
  14. 複数のコアをもつコンピュータ・システム上で実行されるときに方法を実行するコンピュータ・プログラムであって、前記方法において、
    スレッドのグループが複数のコアで並列に実行され、前記スレッドのグループは、グループ内の各スレッドが進む前にバリアにおいて他のすべてのスレッドを待つバリア同期を使って同期され;
    前記スレッドのグループは、第一のスレッドが前記バリアに到達するまで実行され;
    前記第一のスレッドがポーリング状態にはいって、前記バリアの終了を示す解放条件があるかどうかを繰り返しチェックし;
    前記バリアに到達するその後のスレッドは前記第一のスレッドが実行されているコアに移され;
    他のコアは移されるスレッドの数が増すにつれてパワーダウンされ;
    前記第一のスレッドが前記解放条件を検出するとき、パワーダウンされたコアがパワーアップされ、前記スレッドによる使用のために利用可能となる、
    コンピュータ・プログラム。
  15. 複数のコアをもつコンピュータ・システムにおける同期方法であって、
    プロセスのグループが複数のコアで並列に実行され、前記プロセスのグループは、グループ内の各プロセスが進む前にバリアにおいて他のすべてのプロセスを待つバリア同期を使って同期され;
    前記プロセスのグループは、第一のプロセスが前記バリアに到達するまで実行され;
    前記第一のプロセスがポーリング状態にはいって、前記バリアの終了を示す解放条件があるかどうかを繰り返しチェックし;
    前記バリアに到達するその後のプロセスは前記第一のプロセスが実行されているコアに移され;
    他のコアは移されるプロセスの数が増すにつれてパワーダウンされ;
    前記第一のプロセスが前記解放条件を検出するとき、パワーダウンされたコアがパワーアップされ、前記プロセスによる使用のために利用可能となる、
    方法。
  16. 同期方法を実装するよう構成された複数のコアをもつコンピュータ・システムであって、
    コアのグループが、グループ内の各プロセスが進む前にバリアにおいて他のすべてのプロセスを待つバリア同期を使って複数のプロセスの並列実行を許容するよう構成されており;
    前記コアは、第一のプロセスが前記バリアに到達するまで前記プロセスの実行を許容するよう構成されており;
    前記第一のプロセスが実行中のコアは、次いで、前記第一のプロセスが、前記バリアの終了を示す解放条件があるかどうかをチェックするポーリング状態にはいることを許容するよう構成されており;
    さらなるコアが、その後前記バリアに到達するその後のプロセスの実行を許容し、前記その後のプロセスが前記第一のプロセスが実行されているコアに移され、移されるプロセスの数が増す際にパワーダウンされることを許容するよう構成されており;
    前記第一のプロセスが実行されているコアは、前記第一のプロセスが前記解放条件を検出することを許容し、前記その後のプロセスが前記さらなるコアに戻ることを許容するよう構成されており;
    前記さらなるコアは前記プロセスによる使用のためにパワーアップされるよう動作可能である、
    コンピュータ・システム。
  17. 複数のコアをもつコンピュータ・システム上で実行されるときに方法を実行するコンピュータ・プログラムであって、前記方法において、
    プロセスのグループが複数のコアで並列に実行され、前記プロセスのグループは、グループ内の各プロセスが進む前にバリアにおいて他のすべてのプロセスを待つバリア同期を使って同期され;
    前記プロセスのグループは、第一のプロセスが前記バリアに到達するまで実行され;
    前記第一のプロセスがポーリング状態にはいって、前記バリアの終了を示す解放条件があるかどうかを繰り返しチェックし;
    前記バリアに到達するその後のプロセスは前記第一のプロセスが実行されているコアに移され;
    他のコアは移されるプロセスの数が増すにつれてパワーダウンされ;
    前記第一のプロセスが前記解放条件を検出するとき、パワーダウンされたコアがパワーアップされ、前記プロセスによる使用のために利用可能となる、
    コンピュータ・プログラム。
JP2014240199A 2014-04-24 2014-11-27 同期方法 Active JP6424590B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
EP14165831.0 2014-04-24
EP14165831.0A EP2937783B1 (en) 2014-04-24 2014-04-24 A synchronisation method

Publications (2)

Publication Number Publication Date
JP2015210813A true JP2015210813A (ja) 2015-11-24
JP6424590B2 JP6424590B2 (ja) 2018-11-21

Family

ID=50624444

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014240199A Active JP6424590B2 (ja) 2014-04-24 2014-11-27 同期方法

Country Status (3)

Country Link
US (1) US9910717B2 (ja)
EP (1) EP2937783B1 (ja)
JP (1) JP6424590B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6468066B2 (ja) * 2015-05-13 2019-02-13 富士通株式会社 並列演算装置、並列演算システム、集合通信方法及び集合通信プログラム
US10996737B2 (en) 2016-03-31 2021-05-04 Intel Corporation Method and apparatus to improve energy efficiency of parallel tasks
US11353868B2 (en) 2017-04-24 2022-06-07 Intel Corporation Barriers and synchronization for machine learning at autonomous machines
US10289306B1 (en) * 2018-01-31 2019-05-14 EMC IP Holding Company LLC Data storage system with core-affined thread processing of data movement requests
US10824481B2 (en) * 2018-11-13 2020-11-03 International Business Machines Corporation Partial synchronization between compute tasks based on threshold specification in a computing system
US11409579B2 (en) * 2020-02-24 2022-08-09 Intel Corporation Multiple independent synchonization named barrier within a thread group

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03144847A (ja) * 1989-10-26 1991-06-20 Internatl Business Mach Corp <Ibm> マルチプロセッサ・システムおよびそのプロセス同期方法
JPH11202988A (ja) * 1998-01-13 1999-07-30 Hitachi Ltd システム消費電力制御方法
JP2005166056A (ja) * 2003-12-01 2005-06-23 Sony Computer Entertainment Inc マルチタスク処理方法および装置
JP2008197943A (ja) * 2007-02-14 2008-08-28 Renesas Technology Corp コンピュータシステム
WO2008129786A1 (ja) * 2007-04-09 2008-10-30 Panasonic Corporation マルチプロセッサ制御装置、その制御方法および集積回路
US20090172424A1 (en) * 2007-12-31 2009-07-02 Qiong Cai Thread migration to improve power efficiency in a parallel processing environment

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4168281B2 (ja) * 2004-09-16 2008-10-22 日本電気株式会社 並列処理システム、インタコネクションネットワーク、ノード及びネットワーク制御プログラム
US8615647B2 (en) * 2008-02-29 2013-12-24 Intel Corporation Migrating execution of thread between cores of different instruction set architecture in multi-core processor and transitioning each core to respective on / off power state
US20100262966A1 (en) * 2009-04-14 2010-10-14 International Business Machines Corporation Multiprocessor computing device
US20140115596A1 (en) * 2010-08-25 2014-04-24 Et International, Inc. Codeletset representation, manipulatoin, and execution - method, system and apparatus
WO2014021995A1 (en) * 2012-07-31 2014-02-06 Empire Technology Development, Llc Thread migration across cores of a multi-core processor
US9411641B2 (en) * 2012-10-04 2016-08-09 Lawrence J. Dickson Method and apparatus implemented in processors for real-time scheduling and task organization based on response time order of magnitude
US20150067356A1 (en) * 2013-08-30 2015-03-05 Advanced Micro Devices, Inc. Power manager for multi-threaded data processor

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03144847A (ja) * 1989-10-26 1991-06-20 Internatl Business Mach Corp <Ibm> マルチプロセッサ・システムおよびそのプロセス同期方法
JPH11202988A (ja) * 1998-01-13 1999-07-30 Hitachi Ltd システム消費電力制御方法
JP2005166056A (ja) * 2003-12-01 2005-06-23 Sony Computer Entertainment Inc マルチタスク処理方法および装置
JP2008197943A (ja) * 2007-02-14 2008-08-28 Renesas Technology Corp コンピュータシステム
WO2008129786A1 (ja) * 2007-04-09 2008-10-30 Panasonic Corporation マルチプロセッサ制御装置、その制御方法および集積回路
US20090172424A1 (en) * 2007-12-31 2009-07-02 Qiong Cai Thread migration to improve power efficiency in a parallel processing environment

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
JIAN LI, JOSE F. MARTINEZ, MICHAEL C. HUANG: "The Thrifty Barrier : Energy-Aware Synchronization in Shared-Memory Multiprocessors", IEE PROCEEDING OF SOFTWARE, JPN6018020552, 14 February 2004 (2004-02-14), pages all 10 pages *
WENJING YANG, CANQUN YANG: "Exploiting Energy Saving Opportunity of Barrier Operation in MPI Programs", PROCEEDINGS OF SECOND ASIA INTERNATIONAL CONFERENCE ON MODELING & SIMULATION 2008 (AICMS 08), JPN6018020553, 13 May 2008 (2008-05-13), pages Pages:144-149 *

Also Published As

Publication number Publication date
US9910717B2 (en) 2018-03-06
EP2937783A1 (en) 2015-10-28
JP6424590B2 (ja) 2018-11-21
EP2937783B1 (en) 2018-08-15
US20150309845A1 (en) 2015-10-29

Similar Documents

Publication Publication Date Title
JP6424590B2 (ja) 同期方法
TWI550518B (zh) 用於包括執行緒合併之能源效率及能源節約的方法、裝置及系統
JP4413924B2 (ja) マルチコアプロセッサのパフォーマンス改善のための方法、システムおよび装置
US8321693B2 (en) Parallel processing method and system, for instance for supporting embedded cluster platforms, computer program product therefor
KR101332840B1 (ko) 병렬 컴퓨팅 프레임워크 기반의 클러스터 시스템, 호스트 노드, 계산 노드 및 어플리케이션 실행 방법
TWI489266B (zh) 指定應用程式執行緒的效能狀態之指令
US20090037927A1 (en) Apparatus and method for direct switching of software threads
KR20100011891A (ko) 그레이스 주기의 저 전력 검출을 위한 방법, 시스템 및 컴퓨터 판독 가능한 저장 매체
JP2015507771A (ja) 消費電力を低減する優先度に基づくアプリケーションイベント制御(paec)
JP2010079622A (ja) マルチコアプロセッサシステム、および、そのタスク制御方法
US11537429B2 (en) Sub-idle thread priority class
US20130097382A1 (en) Multi-core processor system, computer product, and control method
US20160314024A1 (en) Clearance mode in a multicore processor system
Tang et al. Scheduling computation graphs of deep learning models on manycore cpus
Fan Job scheduling in high performance computing
US20230127112A1 (en) Sub-idle thread priority class
JP2012048545A (ja) 特定のプロセスを短時間で処理する方法およびコンピュータ
Whitham et al. Investigation of scratchpad memory for preemptive multitasking
US20190073243A1 (en) User-space spinlock efficiency using c-state and turbo boost
Gouicem et al. Fewer Cores, More Hertz: Leveraging {High-Frequency} Cores in the {OS} Scheduler for Improved Application Performance
KR101332839B1 (ko) 병렬 컴퓨팅 프레임워크 기반 클러스터 시스템의 호스트 노드 및 메모리 관리 방법
Dauphin et al. Odyn: Deadlock prevention and hybrid scheduling algorithm for real-time dataflow applications
Varisteas et al. Palirria: accurate on-line parallelism estimation for adaptive work-stealing
Porterfield et al. Multi-threaded library for many-core systems
Singh Toward predictable execution of real-time workloads on modern GPUs

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170804

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180515

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180605

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180713

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180807

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180905

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20181008

R150 Certificate of patent or registration of utility model

Ref document number: 6424590

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150