JP6255721B2 - 処理割り当て装置、処理割り当て方法及び処理割り当てプログラム - Google Patents

処理割り当て装置、処理割り当て方法及び処理割り当てプログラム Download PDF

Info

Publication number
JP6255721B2
JP6255721B2 JP2013120334A JP2013120334A JP6255721B2 JP 6255721 B2 JP6255721 B2 JP 6255721B2 JP 2013120334 A JP2013120334 A JP 2013120334A JP 2013120334 A JP2013120334 A JP 2013120334A JP 6255721 B2 JP6255721 B2 JP 6255721B2
Authority
JP
Japan
Prior art keywords
unit
core
processing
allocation
assignment
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
JP2013120334A
Other languages
English (en)
Other versions
JP2014238683A (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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP2013120334A priority Critical patent/JP6255721B2/ja
Publication of JP2014238683A publication Critical patent/JP2014238683A/ja
Application granted granted Critical
Publication of JP6255721B2 publication Critical patent/JP6255721B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、マスタースレッドからワーカースレッドに処理を割り当てる処理割り当て装置、処理割り当て方法及び処理割り当てプログラムに関する。特に、マルチコアプロセッサ上での並列処理に関する。
マルチコアシステムでは、複数のスレッドを複数のCPUコア(以下コア)上で動作させるマルチスレッド処理が行われる(CPU:Central Processing Unit)。
マルチスレッド処理では、スレッドスケジューラが、どのCPUコア(以下、コア)にスレッドを割り当てるか、同じコアに割り当てられた複数のスレッドのうちどのスレッドをコアで実行するか、といったスケジューリング処理を行う。典型的には、OSがスレッドスケジューラを備えている(OS:Operating System)。
一般に、スレッドスケジューラは、スレッドをコアにバインドする機能を提供する。スレッドをコアにバインドすると、スレッドスケジューラは、そのスレッドを常にバインドされたコアに割り当てる。バインドを行うと、スレッドの動作するコアが変わるスレッドマイグレーションによるオーバーヘッドを削減することや、CPUキャッシュを効率的に利用できるといった利点がある。このため、マルチスレッド処理の性能を向上させるために、スレッドとコアとをバインドすることがしばしば利用される。
一方で、マルチスレッド処理で利用される処理方式の一つに、マスターワーカーモデルがある。マスターワーカーモデルでは、マスタースレッドMが複数のワーカースレッドに処理を割り当て、ワーカースレッドが割り当てられた処理を行う、という方式によって並列処理が行われる。
マスターワーカーモデルでは、利用可能なコア数と同数のワーカースレッドを用いることで、コアを最大限に使って処理するという方式をとることができる。マスターワーカーモデルにおいてスレッドのコアへのバインドを用いる場合、マスタースレッドは、ワーカースレッドの一つと同じコアにバインドされることになる。
図12に、マスタースレッドによるワーカースレッドへの処理の割り当ての例を示す。図12の例は、4コアを利用する場合の例であり、一つのマスタースレッドMと4つのワーカースレッドW0〜W3を用いている。なお、マスタースレッドMとワーカースレッドW0とは、同じコア0にバインドされている。
処理が割り当てられる前、各ワーカーはスリープ状態にある。したがって、ワーカーのみが割り当てられたコア1〜3はアイドル状態である。
マスタースレッドMは、4つの処理J0〜J3をワーカースレッドW0〜W3に割り当てる。図12の例では、マスタースレッドMは、まず処理J0をワーカースレッドW0に、次に処理J1をワーカースレッドW1に、次に処理J2をワーカースレッドW2に、次に処理J3をワーカースレッドW3に、という順番に割り当てている。処理の割り当ては、スレッドライブラリやOSが提供するAPIによって行うことができる(API:Application Programming Interface)。
処理が割り当てられると、各ワーカースレッドは、スリープ状態から実行可能状態になる。スレッドスケジューラは、実行可能状態になったスレッドをコアに割り当てて実行させる。ワーカースレッドW1、W2及びW3がバインドされているコアは、処理の割り当て前はアイドル状態にあるので、各ワーカースレッドは処理が割り当てられると直ちに実行を開始する。
一方、コア0では、マスタースレッドMも実行可能状態にある。そのため、ワーカースレッドW0が実行可能状態となって、マスタースレッドM及びワーカースレッドW0の二つのスレッドが実行可能状態にあるときに、いずれのスレッドをコアで実行するかは、スレッドスケジューラによるスレッドスケジューリングによって決められる。
図12の例では、スレッドスケジューラは、マスタースレッドMをコア0で実行させる。したがって、ワーカースレッドW0は、マスタースレッドMの割り当て処理が終わり、スリープ状態になった後に実行される。なお、マスタースレッドMの割り当て処理に要する時間に比べて、各ワーカースレッドで実行されるジョブの処理時間は十分長い場合は、割り当て処理に要する時間が性能に及ぼす影響は無視できる程度である。
図13は、スレッドスケジューラが異なるスケジューリング戦略をとった場合の処理割り当て例である。図13の例では、ワーカースレッドW0に処理が割り当てられ実行可能になった時点で、スレッドスケジューラが、マスタースレッドMではなく、ワーカースレッドW0をコアで実行させるというスケジューリングを行う。この場合は、マスタースレッドMがワーカースレッドW1〜3に処理を割り当てる前に、ワーカースレッドW0の実行が始まってしまう。そのため、ワーカースレッドW0への処理の割り当てが遅れ、コア1〜3はアイドル状態が続く。
一般に、スレッドスケジューラは、同一コアで複数のスレッドが実行可能状態にある場合、タイムスライスと呼ばれるスケジューリングをとることがある。タイムスライスでは、特定のスレッドのみがコアで実行され続けて、他のスレッドが全く実行されないという事態を防ぐために、一定時間が経過すると、別のスレッドをコアで実行するというスケジューリングが行われる。
図13の例では、ワーカースレッドW0がタイムスライスを使い果たした時点で、再びマスタースレッドMがコアで実行され、処理割り当てを継続し、ワーカースレッドW1〜3に処理が割り当てられる。その結果、それぞれのワーカースレッドが実行を開始する。
特許文献1には、複数のプロセッサを備えるマルチプロセッサ・システムにおいて、プリエンティブ優先度スケジューリングに基づいてスレッドをスケジューリングする方法が開示されている。特許文献1の方法では、ローカル・ディスパッチ・キュー及びグローバル・キューの中に含まれる優先度の高いスレッドがある場合、そのスレッドを最優先して選択する。
特開平10−55284号公報
図13に示した処理割り当ての場合は、図12の例に比べて、タイムスライスの分だけ最後のジョブが終わる時間が遅くなる。タイムスライスの長さがジョブの実行時間に比べて無視できるほど短くない場合は、この遅延が性能劣化を招くことになる。タイムスライスの長さは、スレッドスケジューラや設定によって異なるが、ミリ秒オーダーの時間が用いられることが多く、ジョブの実行時間に比べて無視できない場合も多い。すなわち、図13のようなマスターワーカーモデルでは、スレッドスケジューラのスケジューリング戦略によっては、マスタースレッドからワーカースレッドへの処理の割り当て時に遅延が発生し、性能が低下するという課題がある。
特許文献1の方法では、高優先度のタスクがバグのために無限ループした際にCPUを占有し続けたり、優先度の設定に間違いや変更があった場合に想定外の動作をしたりするという課題がある。
本発明の目的は、スレッドスケジューラのスケジューリング戦略によらず、マスタースレッドによる処理割り当てがワーカースレッドによって妨げられることなく、ワーカースレッドの動作開始を遅延させない処理割り当て装置を提供することである。
本発明の処理割り当て装置は、複数のコアを持つ中央演算装置に処理を割り当てる処理割り当て装置であって、複数のコアに割り当てられて処理を実行する複数の処理部と、処理部に処理を割り当てる割り当て部と、を備え、割り当て部は、割り当て部及び処理部がいずれのコアに割り当てられているのかを検出するコア割り当て検出部と、割り当て部が動作するコアに割り当てられている処理部よりも先に、割り当て部が動作するコアとは異なるコアに割り当てられている処理部を起床する起床部と、を有する。
本発明の処理割り当て方法は、複数のコアを持つ中央演算装置に処理を割り当てる処理割り当て方法であって、複数のコアに割り当てられて処理を実行する処理実行工程と、処理部に処理を割り当てる処理割り当て工程と、を含み、処理割り当て工程において、割り当て工程及び処理実行工程がいずれのコアに割り当てられているのかを検出するコア割り当て検出工程と、割り当て工程を実行するコアに割り当てられている処理実行工程よりも先に、割り当て工程を実行するコアとは異なるコアに割り当てられている処理実行工程を起床する起床工程と、を含む。
本発明の処理割り当てプログラムは、複数のコアを持つ中央演算装置に処理を割り当てる処理割り当てプログラムであって、複数のコアに割り当てられて処理を実行する処理実行処理と、処理部に処理を割り当てる処理割り当て処理と、を含み、処理割り当て処理において、割り当て処理及び処理実行処理がいずれのコアに割り当てられているのかを検出するコア割り当て検出処理と、割り当て処理を実行するコアに割り当てられている処理実行処理よりも先に、割り当て処理を実行するコアとは異なるコアに割り当てられている処理実行処理を起床する起床処理と、をコンピュータに実行させる。
本発明によれば、スレッドスケジューラのスケジューリング戦略によらず、マスタースレッドによる処理割り当てがワーカースレッドによって妨げられることなく、ワーカースレッドの動作開始を遅延させない処理割り当て装置を提供することができる。
本発明の第1の実施形態に係る処理割り当て装置の構成を示すブロック図である。 本発明の第1の実施形態に係る処理割り当て装置における処理部の動作に関するフローチャートである。 本発明の第1の実施形態に係る処理割り当て装置における割り当て部の動作に関するフローチャートである。 本発明の第2の実施形態に係る処理割り当て装置の構成を示すブロック図である。 本発明の第2の実施形態に係る処理割り当て装置における割り当て部の動作に関するフローチャートである。 本発明の実施例1に係る処理割り当て装置の構成を示す図である。 本発明の実施例1に係るスレッド接続を説明するための図である。 本発明の実施例1に係るマスタースレッドの構成を示す図である。 本発明の実施例1に係るワーカースレッドの構成を示す図である。 本発明の実施例1における処理の割り当てを説明するための図である。 本発明の実施例2に係るスレッド接続を説明するための図である。 マスタースレッドからワーカースレッドへの処理の割り当てを説明するための図である。 マスタースレッドからワーカースレッドへの処理の割り当てにおいて、スレッドスケジューラが異なるスケジューリング戦略をとった場合の例を説明するための図である。
以下に、本発明を実施するための形態について図面を用いて説明する。但し、以下に述べる実施形態には、本発明を実施するために技術的に好ましい限定がされているが、発明の範囲を以下に限定するものではない。
なお、本発明の実施形態及び実施例においては、スレッドを例として説明しているが、本発明の実施形態及び実施例の手法は、プロセスに関しても適用可能である。
(第1の実施形態)
(構成)
まず、本発明の第1の実施形態に係る処理割り当て装置1について、図面を参照して詳細に説明する。
図1は、本発明の第1の実施形態に係る処理割り当て装置1の構成を示す図である。
本実施形態に係る処理割り当て装置1は、割り当て部10と、複数の処理部20と、処理部20と同数の転送部30と、を備える。
割り当て部10は、割り当て決定部11と、起床部12と、コア割り当て検出部13と、を備える。
割り当て決定部10は、処理を割り当てる処理部20を決定する機能及び転送部30を通して処理を処理部20に渡す機能を有する。
起床部12は、指定された一つもしくは複数の処理部20の中から待機中の一つもしくは全部をスリープ状態から起床する機能を有する。
コア割り当て検出部13は、割り当て部10又は処理部20が割り当てられているコアを検出する機能を有する。
処理部20は、待機部21と、受信部22と、実行部23と、を備える。複数の処理部20は、それぞれ同じ構成を有する。
待機部21は、処理が割り当てられるまでスリープする機能を有する。なお、スリープするとは、スレッドスケジューラによってコアへ割り当てられることがない状態となることである。
受信部22は、転送部30から処理を受信して実行部23を呼び出す機能及び、転送部30から処理を受信できない場合に待機部21を呼び出す機能を有する。
実行部23は、受信部22から処理を受け取り、処理を実行する機能を有する。
転送部30は、処理を割り当て部10から処理部20に転送する機能を有する。なお、本実施形態では、転送部30は処理部20と同数だけあり、各転送部30は、特定の一つの処理部20との転送において専用に利用される。したがって、割り当て部10は、処理を処理部20に割り当てる際には、対応する転送部30を利用して処理を受け渡す。
以上が、本発明の第1の実施形態に係る処理割り当て装置1の構成についての説明である。
次に、本実施形態の動作について説明する。
(処理部の動作)
まず、図2を用いて、処理部20の動作を説明する。処理部20は、以下のように、待機と実行を繰り返す。
処理部20は、待機部21を呼び出して、処理の割り当て待ちのためのスリープ状態に入る(ステップS1)。
処理部20は、起床部12によって起床される(ステップS2でYes)と、受信部22を呼び出す(ステップS3)。
なお、気象部12によって起床されていない場合(ステップS2でNo)、ステップS1のまま待機する。
ここで、受信部22は、転送部30から処理を受信可能か調べる(ステップS4)。
受信不可能な場合(ステップS4でNo)、ステップS1に戻る。
処理を受信可能な場合(ステップS4でYes)、受信部22は、転送部30から処理を受信する(ステップS5)。
処理を受信後、受信部22は、実行部23を呼び出す(ステップS6)。
実行部23は、処理を実行する(ステップS7)。
処理の実行が終了したら、処理部20は、ステップS3に戻り受信部22を呼び出す。
以上が、処理部20の動作である。
(割り当て部の動作)
次に、図3を用いて、割り当て部10の動作について説明する。割り当て部10は、割り当てる処理の集合と、割り当て先の処理部20の集合を指定して呼び出される。典型的には、処理の数と処理部20の数はともに利用可能なコア数と等しい。
図3において、割り当て決定部11は、コア割り当て検出部13を呼び出し、自身と処理部20とが割り当てられているコアとを調べる(ステップS11)。なお、本実施形態で呼ぶ自身とは、割り当て部10が動作するコアを意味する。
コア割り当て検出部13は、自身とは異なるコアに割り当てられている処理部20が存在するかどうか調べる(ステップS12)。
自身とは異なるコアに割り当てられている処理部20が存在する場合(ステップS12でYes)、下記のステップS13〜S16のフローで動作する。
割り当て決定部11は、異なるコアに割り当てられている処理部20中の一つを選ぶ(ステップS13)。なお、ステップS13において複数の処理部20の中から一つのスレッドを選ぶ方法としては、任意の方法を用いることができる。
割り当て決定部11は、選ばれた処理部20に対応する転送部30を用いて処理の転送を行う(ステップS14)。
起床部12は、選択した処理部20の待機部21に対して、起床するように指示する(ステップS15)。
ここで、起床しようとする処理部20がスリープ状態にある場合、スリープ状態にある処理部20が起床される。なお、対象となる処理部20がスリープ状態にない場合は何も起こらない。また、本実施形態では、起床部12に選択された一つの処理部20の起床を指示するため、選択された処理部20のみが起床されることに注意する必要がある。
処理が終了した後に、割り当て先の処理部20の集合から、割り当てた処理部23を削除する(ステップS16)。
割り当てる処理が残っている場合(ステップS17でYes)、ステップS12に戻り、ステップS16までの処理を繰り返す。
ここで、割り当てる処理が残っていない場合(ステップS17でNo)、図3のフローチャートに従った動作を終了する。
なお、処理の数と処理部の数がともに利用可能なコア数と等しく設定されていた場合は、ステップS17を省くことも可能である。
また、割り当て部10自身と異なるコアに割り当てられている処理部20が存在しない場合(ステップS12でNo)、割り当て処理部11は、割り当て部10自身と同じコアに割り当てられている処理部20があれば、処理を割り当てる(ステップS18)。この後の動作は、ステップS14〜S16と同様である。
自身と同じコアに割り当てられている処理部20に処理を割り当てた後には、異なるコアに割り当てられた処理は存在しない。そのため、ステップS14〜S16を経た後に、ステップS17でNoとなるため、割り当て部10の動作を終了する。
以上の動作では、処理部20の数よりも処理の数が多い場合には、以上の動作が終了した際に、割り当てられていない処理が残ることになる。この場合は、直ちに再び上記の割り当て動作を行って割り当てを行っても良いし、割り当てた処理が終了するのを待ってから、割り当て動作を行ってもよい。
以上が、本発明の第1の実施形態に係る処理割り当て装置1の動作についての説明である。
また、図2及び図3の動作フローを用いる処理割り当て方法も、本実施形態の範囲に含まれる。本実施形態の処理割り当て方法においては、複数の処理を処理部に割り当てる場合に、割り当て部が、割り当て部及び処理部が割り当てられているコアを調べる。そして、割り当て部が、割り当て部自身の割り当てられたコアとは異なるコアに割り当てられている処理部に対して優先的に処理を割り当てることを特徴とする。なお、第1の実施形態に係る処理割り当て方法は、必ずしも図1に示した処理割り当て装置1の構成に限定されず、図2及び図3の動作フローを用いた処理割り当て方法であれば、本実施形態の範囲に含まれる。この際、図2及び図3の動作フローの一部を変更しても、本実施形態と同様の効果が得られれば、本実施形態の範囲に含まれる。さらに、本実施形態の処理割り当て方法を用いた処理をコンピュータに実行させる処理割り当てプログラムも、本実施形態の範囲に含まれる。
(効果)
本発明の第1の実施形態によれば、割り当て部と同じコアに割り当てられている処理部20に対しては最後に処理が割り当てられる。したがって、割り当て部の割り当て動作中に、他のコアがあいているにも関わらず、同じコアで実行部の動作が開始し、割り当て部の動作が中断してしまうということがない。
(第2の実施形態)
(構成)
次に、本発明の第2の実施形態に係る処理割り当て装置1について、図面を参照して詳細に説明する。
図4は、本発明の第2の実施形態に係る処理割り当て装置2の構成を示す図である。なお、ここでは、第1の実施形態と同様の構成については説明を省略し、第2の実施形態に係る処理割り当て装置2において特徴的な構成について説明する。
本実施形態に係る処理割り当て装置2は、第1の実施形態の転送部30と同様の機能を有する処理転送部35を一つ備える。すなわち、全ての処理部20は、同一の処理転送部35から処理を受信する。
また、本実施形態では、第1の実施形態に係る割り当て決定部11の代わりに、処理投入部16が利用される。
処理投入部16は、指定された処理を処理転送部35に投入し、起床部17に対して複数の処理部20の中から一つを起床するように指示する機能を有する。
本実施形態の起床部17は、第1の実施形態に係る起床部12と同様に、指定された一つもしくは複数の処理部20の中から、待機中の一つ又は全部をスリープ状態から起床する機能を有する。起床部17は、待機中である複数の処理部20の中から一つの処理部20を起床する場合に、コア割り当て検出部18を呼び出して、自身が割り当てられているコアと異なるコアに割り当てられている処理部20を起床するという機能を有する。
(割り当て部の動作)
次に、図5を用いて本実施形態の動作について説明する。処理部20の動作は、第1の実施形態と同様であるので、割り当て部15の動作について詳細に説明する。割り当て部15は、割り当てる処理の集合と、割り当て先の処理部20の集合を指定して呼び出される。典型的には、コア数と同数の処理部20と一つの処理が指定される。
図5において、処理投入部16は、指定された処理を全て処理転送部35に投入する(ステップS21)。
以下のステップS22〜S27の動作は、処理の数だけ繰り返される。
処理投入部16は、起床部17に対して割り当て先の処理部20の中から一つを起床するように指示する(ステップS22)。
起床部17は、対象となる処理部20の中に待機中(スリープ中)の処理部20があれば(ステップS23でYes)、その待機中の処理部20を候補処理部とする(ステップS24)。なお、待機中の処理部20がなければ(ステップS23でNo)、ステップS29に進む。
起床部17は、コア割り当て検出部18を呼び出し、候補処理部が割り当てられているコア及び自身が割り当てられているコアをコア割り当て検出部18に調べさせる(ステップS25)。
コア割り当て検出部18は、自身と異なるコアに割り当てられている候補処理部が存在するか調べる(ステップS26)。
自身と異なるコアに割り当てられている候補処理部が存在する場合(ステップS26でYes)、対象となる処理部20を起床する(ステップS27)。
ステップS27の後、ステップS23に戻り、割り当てが終了するまで処理を繰り返す。
自身と異なるコアに割り当てられている候補処理部が存在しない場合(ステップS26でNo)、自身と同じコアに割り当てられている処理部20を起床する(ステップS28)。
割り当てる処理が残っている場合(ステップS29でYes)、ステップS22に戻り、割り当てが終了するまで処理を繰り返す。
割り当てる処理が残っていない場合(ステップS29でNo)、図5のフローは終了となる。
なお、処理の数と処理部の数がともに利用可能なコア数と等しく設定されていた場合は、ステップS29を省くことも可能である。
以上が、本発明の第2の実施形態に係る処理割り当て装置2の動作についての説明である。また、図2及び図5の動作フローを用いる処理割り当て方法も、本実施形態の範囲に含まれる。なお、第2の実施形態に係る処理割り当て方法は、必ずしも図1に示した処理割り当て装置1の構成に限定されず、図2及び図5の動作フローを用いた処理割り当て方法であれば、本実施形態の範囲に含まれる。この際、図2及び図5の動作フローの一部を変更しても、本実施形態と同様の効果が得られれば、本実施形態の範囲に含まれる。さらに、本実施形態の処理割り当て方法を用いた処理をコンピュータに実行させる処理割り当てプログラムも、本実施形態の範囲に含まれる。
(効果)
本発明の第2の実施形態によれば、割り当て部とは異なるコアに割り当てられている処理部に先に処理が割り当てられる。そのため、スリープ状態の処理部があるにも関わらず、割り当て部の動作が中断して、同じコアで処理部が動作するということがない。
さらに、第2の実施形態によれば、処理部が一つの処理転送部から処理を受け取るような構成の場合にも適用できる。
(実施例1)
次に、具体的な実施例を用いて本発明の実施形態に係る処理割り当て装置の動作について説明する。
図6は、本発明の実施例1の構成を説明するための図面である。
実施例1では、メモリ41を構成した4コアのCPU42(コア0〜3)上に、単一のOS43が搭載されている(CPU:Central Processing Unit)。また、OS43上には、一つのマスタースレッド40(M)と4つのワーカースレッド50(W0〜W3)が乗っている。なお、OS43は、スレッドスケジューリング機能を備えている。
図7は、実施例1のマスタースレッドMとワーカースレッドW0〜W3の接続を説明するための図面である。
実施例1では、各ワーカースレッドW0〜W3に対して、対応する専用のキュー60〜63を用いている。
マスタースレッドMがワーカースレッドW0〜W3のそれぞれに対応する専用のキュー60〜63に処理を投入すると、ワーカースレッドW0〜W3は、専用のキュー60〜63に投入された処理を実行するという方式をとる。
専用のキュー60〜63は、複数のスレッドからアクセスさせるため、排他処理を用いてアクセスされる。
また、ワーカースレッドW0〜W3は、対応するキュー60〜63が空の場合は、割り当て待ち状態に入る。
一般に、スレッド機能を提供するスレッドライブラリは、スレッド間での排他処理や待ち状態を実現するための機能を提供している。例えば、POSIXスレッド(pthread)は、mutexと呼ばれる排他処理を実現できる機能や、条件変数と呼ばれる待ち状態を実現できるAPIを提供している(POSIX:Portable Operating System Interface、mutex:mutual exclusion)。
mutexは、ロック変数に対するロック・アンロックによって排他処理を行うことができる。条件変数は、条件変数に対するシグナルが送信されるまでスリープ状態で待つ機能と、シグナルを送信して条件変数を待っているスレッドを起床する機能によって、待ち状態を実現することができる。なお、これらのスレッドに関する機能は一般的なものであるので、ここでは詳細な説明は省略する。
図8は、実施例1のマスタースレッドMの構成を示した図である。
マスタースレッドMは、本発明の第1の実施形態に係る割り当て部10(図1)と同じ構成の割り当て部10を備えている。関連する構成要素の機能は、第1の実施形態と同様であるために同一の符号を付し、詳細な説明は省略する。
割り当て決定部11は、ワーカースレッドW0〜W3のそれぞれに対応する専用のキュー60〜63に接続されている。なお、起床部12は、スレッドライブラリが提供する機能であるが、マスタースレッドMによって実行されるため、マスタースレッドMの中に記載している。
図9は、実施例1に係るワーカースレッドW0〜W3の一つの構成を示した図である。なお、全てのワーカースレッドW0〜W3は同じ構成である。ワーカースレッドW0〜W3は、本発明の第1の実施形態に係る処理部20と同じ構成の処理部を備えている。関連する構成要素の機能は、第1の実施形態と同様であるために同一の符号を付し、詳細な説明は省略する。
受信部22は、スレッド毎の専用のキュー60〜63に接続されている。
実施例1では、キュー60〜63毎にロック変数と条件変数を用いて、キュー60〜63毎の排他処理と待ち処理を行う。なお、これらは図面では省略されている。
次に、本実施例の動作について説明する。まず、ワーカースレッドW0〜W3の動作について説明する。
ワーカースレッドW0〜W3の受信部22は、対応する専用のキュー60〜63に処理が格納されているか調べる。キュー60〜63に処理が格納されている場合は、その処理を取り出して実行する。
実行が終わると、ワーカースレッドW0〜W3の受信部22は、再びキュー60〜63に処理が格納されているか調べる。
処理が格納されていない場合、すなわちキュー60〜63が空の場合、ワーカースレッドW0〜W3は、キュー60〜63毎に用意された条件変数に対する待ち状態に入る。
この待ち状態からは、マスタースレッドMがシグナルを送信すると起床され、その後再度キュー60〜63のチェックを行う。
マスタースレッドMの特徴的な動作は、下記の2点である。
一つは、割り当て決定部11が、割り当ての決定後に、処理を割り当てワーカースレッドに対応するキューに処理を投入することである。
もう一つは、割り当て決定部11が、スレッドライブラリの提供する条件変数に対するシグナルを送信するAPIを呼び出すことによって、起床部12を呼び出すことである。
本実施例1では、ワーカースレッドW0〜W3毎に条件変数が容易されているため、割り当て決定部11は、起床するワーカースレッドW0〜W3を指定して起床部12を呼び出すことができる。
次に、具体的な割り当ての例を用いて本実施例の動作について説明する。
この動作例では、4つの処理J0〜J3をワーカースレッドW0〜W3に割り当てる場合の例について示す。なお、本動作例においては、J0はW0、J1はW1、J2はW2、J3はW3というように対応して割り当てる場合について説明するが、これに限らない場合にも容易に応用できる。
本動作例では、マスタースレッドMはコア0に、ワーカースレッドW0はコア0に、ワーカースレッドW1はコア1に、ワーカースレッドW2はコア2に、というようにバインドされている。
スレッドのコアへの割り当ては、OS43のスレッドスケジューラによって行われる。スレッドのコアへのバインドには、OS43が適用するAPIを用いることができる。
例えば、Linux(登録商標)では、sched_setaffinity関数を用いることができる。これは、スレッドを割り当てることが可能なコアを指定するAPIで、ただ一つのコアを指定することによって、特定のコアにバインドすることができる。
割り当て処理が開始されると、マスタースレッドMの割り当て決定部11は、コア割り当て検出部13を用いて、各スレッドが割り当てられているコアを調べる。なお、コアを調べるためには、OS43のAPIを利用することができる。
例えば、Linuxでは、sched_getaffinity関数によって、スレッドを割り当て可能なコア集合を得ることができる。このコア集合がただ一つのコアを含む場合は、スレッドが割り当てられているコアはただ一つに特定することができる。集合が複数のコアを含む場合は、含まれる全てのコアに割り当てられる可能性があるとする方法をとることができる。
次に、割り当て決定部11は、調べたスレッドとコアの関係から、マスタースレッドMと異なるコアに割り当てられたスレッドの集合を求める。本動作例では、ワーカースレッドW1、W2、W3である。
次に、この中から処理の割り当てを行うワーカースレッドを一つ決める。本動作例では、スレッド番号が小さい順番に選ぶ。この場合、はじめにワーカースレッドW1が選ばれる。割り当て決定部11は、ワーカースレッドW1に割り当てる処理J1をワーカースレッドW1に対応するキュー61に投入する。
次に、ワーカースレッドW1を起床するために起床部12を呼び出し、キュー61に対応する条件変数に対してシグナルを送る。
このスレッドによって、ワーカースレッドW1が起床し、前述したように処理が実行される。なお、ワーカースレッドW1が待ち状態にない場合、シグナルは無視されるものの、キュー61に処理は入れられるため、ワーカースレッドW1が次にキュー61を確認した際に、割り当てられた処理が見つけられ実行される。
次に、割り当て決定部11は、ワーカースレッドW2を割り当て対象に選び、同様に割り当て処理が行われる。
その後、ワーカースレッドW3に割り当てを行った後に、マスタースレッドMとは異なるコアのワーカースレッドはないため、同じコアに割り当てられたワーカースレッドW0に処理を割り当てる。以上によって、割り当て処理は完了する。
図10に、以上の動作によって割り当てが行われた場合の、割り当て結果を示す。
図10に示されているように、ワーカースレッドW0に最後に割り当てが行われるために、コア1−3でワーカースレッドW1〜W3の動作の開始が遅れていない。
なお、本動作例では、各処理を割り当てるワーカースレッドはあらかじめ決められていたが、割り当て決定部11が決めるという構成としても良い。第1の実施形態の特徴は、処理を割り当てるスレッドの順番に関するものであるから、この場合の処理を割り当てるスレッドの決め方は本実施形態の特徴とは独立している。
(変形例)
実施例1の変形例1として、割り当て部10及び処理部20を割り当てるコアとスレッドをあらかじめ表に記録し、コア割り当て検出部13がその表を参照することによって、コア割り当てを調べる構成としてもよい。
この場合、処理割り当て時に毎回OS43を呼び出してコア割り当てを調べるオーバーヘッドが発生しないという効果がある。
また、実施例1の変形例2として、スレッド(処理部)の識別子(例えばスレッド番号)とコアの割り当てを一意に決めておき、コア割り当て検出部13がスレッド識別子から割り当てられているコアを調べる方式としても良い。
例えば、ワーカースレッドW0はコア0、ワーカースレッドW1はコア1、といったように割り当てが決められているといった場合である。この場合は、OS43を呼び出すオーバーヘッドや表を参照するオーバーヘッドが発生しないという利点がある。また、この場合で、マスタースレッドMをコア0に割り当てた場合、割り当て決定部11は、スレッド番号の大きいワーカースレッドから順番に割り当てるという方法をとることができる。これは、異なるコアに割り当てられた複数のワーカースレッドの中から一つのスレッドを選ぶ方法の一つの例である。
(実施例2)
次に本発明に係る実施例2について説明する。実施例2は、本発明の第2の実施形態に対応する実施例である。実施例2のワーカースレッド50(W0〜W3)の構成は、OS43、4コアのCPU42(コア0〜3)の構成は、実施例1と同じである。また、スレッドとコアのバインドも実施例1と同様である。なお、実施例2のマスタースレッドM40の構成は、図4に示した第2の実施形態に係る割り当て部11に対応する。
図11に、実施例2のスレッドの接続関係を示す。実施例2では、マスタースレッドM40と各ワーカースレッドW0〜W3とが単一のキュー65で接続されていることを特徴とする。また、この場合は、キュー65に対応した一つのロック変数と条件変数を用いて全てのスレッドが排他制御と待ち状態とを実現する。
実施例2のような構成は、ワーカースレッドの数よりも多数の処理を割り当てる際に、各処理の処理時間がばらつく場合において用いられることがある。処理とワーカースレッドの割り当てを固定化すると、処理時間のばらつきにより、各コアの負荷バランスが悪くなる。そのため、一つにキュー65に処理を投入し、処理の実行を終えたワーカースレッドが次の処理を取得するという方法がとられる。
なお、実施例2のような構成であっても、実施例2によらない場合の全てのワーカースレッドW0〜W3がアイドル状態にあるときの処理の割り当てにおいては、ワーカースレッドへW0〜W3の処理の割り当て順によっては、マスタースレッドの処理割り当てが中断されてしまう。その結果、ワーカースレッドの処理が遅れて、コア42のいずれかがアイドル状態となるという問題がある。
実施例2で特徴的な動作は、条件変数が一つであるため、起床するスレッドは、割り当て決定部11によって指定することができず、起床部17(図4)によって決定されることである。実施例2では、4つのワーカースレッドW0〜W3が全てスリープ状態、すなわち条件変数に対する待ち状態にあるときに、マスタースレッドMが一つの処理を割り当てる場合の動作について説明する。
まず、処理投入部16は、処理をキュー65に投入後、起床部17に対して条件変数を待っているスレッドのうち一つを起床するように指示する。
起床部17は、コア割り当て検出部18を用いて、マスタースレッドMとワーカースレッドW0〜W3が割り当てられているコアを調べる。
起床部17は、条件変数を待っているワーカースレッド50のうち、マスタースレッドMと異なるコアのワーカースレッド50があればそれを起床し、なければ同じコアのワーカースレッドを起床する。
この動作により、マスタースレッドMと異なるコアのワーカースレッド50が起床されるため、マスタースレッドMは、後続の処理を継続することができるという効果がある。そのため、続いて複数の処理を割り当てる場合は、その割り当て処理が妨げられることがない。
実施例2によらない場合は、最初の割り当てによって、マスタースレッドMと同じコア0のワーカースレッドW0が起床された場合、後続の割り当て処理の実行が遅れることは明らかである。
(変形例)
実施例2の変形例として、処理投入部16は、起床部17に対して条件変数に対するシグナルの送信を待っているスレッド(処理部)の全てを起床するように指示をしても良い。起床部17は、全てのスレッドの起床を指示された場合も、まず、最初に一つのスレッドを起床し、その他のスレッドは、起床したスレッドが確保したロックに対する待ち状態にすることができる。
このとき、最初に起床するスレッドを選択する際に、実施例2にあるように、マスタースレッドMとワーカースレッド50のコア割り当てを調べて、マスタースレッドMとは異なるワーカースレッド50を選ぶことができる。一般に、条件変数は、ロック変数とともに利用されるため、変形例のような動作をとることが可能である。
以上、実施形態及び実施例を参照して本発明を説明してきたが、本発明は上記実施形態及び実施例に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
本発明は、科学技術計算において、マスタースレッドが大規模な配列を分割し、ワーカースレッドが行列計算を行うといった用途に利用することができる。また、本発明は、画像処理において、マスタースレッドが画像を分割して、ワーカースレッドが画像処理を行うといった処理に利用することができる。
1、2 処理割り当て装置
10、15 割り当て部
11 割り当て決定部
12、17 起床部
16 処理投入部
13、18 コア割り当て検出部
20 処理部
21 待機部
22 受信部
23 実行部
30 転送部
35 処理転送部
40 マスタースレッド
41 メモリ
42 コア
43 OS
50 ワーカースレッド
60 キュー

Claims (10)

  1. 複数のコアを持つ中央演算装置に処理を割り当てる処理割り当て装置であって、
    複数の前記コアに割り当てられて前記処理を実行する複数の処理部と、
    前記処理部に前記処理を割り当てる割り当て部と、を備え、
    前記割り当て部は、
    前記割り当て部及び前記処理部がいずれの前記コアに割り当てられているのかを検出するコア割り当て検出部と、
    前記割り当て部が動作する前記コアに割り当てられている前記処理部よりも先に、前記割り当て部が動作する前記コアとは異なる前記コアに割り当てられている前記処理部を起床する起床部と、を有することを特徴とする処理割り当て装置。
  2. 前記処理部への前記処理の割り当てを決定し、前記割り当て部が動作する前記コアに割り当てられている前記処理部よりも先に、前記割り当て部が動作する前記コアとは異なる前記コアに割り当てられている前記処理部のうち指定された一つを起床することを前記起床部に指示する割り当て決定部を有し、
    前記起床部は、前記割り当て決定部の指示に応じて前記処理部を起床することを特徴とする請求項1に記載の処理割り当て装置。
  3. 複数の前記処理部のそれぞれに対応するように設けられ、前記割り当て決定部を介して前記割り当て部から複数の前記処理部へと処理を転送する複数の転送部を備えることを特徴とする請求項1又は2に記載の処理割り当て装置。
  4. 前記コア割り当て検出部は、
    前記割り当て部及び前記処理部を割り当てる前記コアを記録した表を用いて、前記割り当て部が動作する前記コアと、前記処理部の割り当てられている前記コアと、を調べることを特徴とする請求項1乃至3のいずれか一項に記載の処理割り当て装置。
  5. 前記コア割り当て検出部は、
    一意に決められた前記処理部の識別子と前記コアの割り当てを基に、前記識別子から前記処理部が割り当てられている前記コアを調べることを特徴とする請求項1乃至3のいずれか一項に記載の処理割り当て装置。
  6. 前記割り当て部は、
    複数の前記処理部の起床を前記起床部に指示する処理投入部を有し、
    指定された複数の前記処理部の中から待ち状態にあると同時に前記割り当て部とは異なる前記コアに割り当てられている前記処理部があることが前記コア割り当て検出部によって判明した場合、
    前記起床部は、
    前記処理投入部の指示に応じて、前記割り当て部が動作する前記コアとは異なる前記コアに割り当てられている前記処理部の中から一つの前記処理部を起床することを特徴とする請求項1に記載の処理割り当て装置。
  7. 前記処理投入部を介して前記割り当て部から複数の前記処理部へと前記処理を転送する処理転送部を備えることを特徴とする請求項6に記載の処理割り当て装置。
  8. 前記処理投入部は、
    条件変数に対するシグナルの送信を待っている処理部の全てを起床する指示を前記起床部に出し、
    前記起床部は、
    前記処理投入部の指示に応じて一つの前記処理部を起床し、起床した前記処理部が確保したロックに対して、起床させていない前記処理部を待ち状態とすることを特徴とする請求項6又は7に記載の処理割り当て装置。
  9. 複数のコアを持つ中央演算装置に処理を割り当てる処理割り当て方法であって、
    複数の前記コアに前記処理を割り当てる割り当て処理及び前記処理がいずれの前記コアに割り当てられているのかを検出
    前記割り当て処理を実行する前記コアに割り当てられている前記処理実行するよりも先に、前記割り当て処理を実行する前記コアとは異なる前記コアに割り当てられている前記処理を起床することを特徴とする処理割り当て方法。
  10. 複数のコアを持つ中央演算装置に処理を割り当てる処理割り当てプログラムであって、
    複数の前記コアに前記処理を割り当てる割り当て処理及び前記処理がいずれの前記コアに割り当てられているのかを検出する処理と、
    前記割り当て処理を実行する前記コアに割り当てられている前記処理実行するよりも先に、前記割り当て処理を実行する前記コアとは異なる前記コアに割り当てられている前記処理を起床する処理と、をコンピュータに実行させることを特徴とする処理割り当てプログラム。
JP2013120334A 2013-06-07 2013-06-07 処理割り当て装置、処理割り当て方法及び処理割り当てプログラム Active JP6255721B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013120334A JP6255721B2 (ja) 2013-06-07 2013-06-07 処理割り当て装置、処理割り当て方法及び処理割り当てプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013120334A JP6255721B2 (ja) 2013-06-07 2013-06-07 処理割り当て装置、処理割り当て方法及び処理割り当てプログラム

Publications (2)

Publication Number Publication Date
JP2014238683A JP2014238683A (ja) 2014-12-18
JP6255721B2 true JP6255721B2 (ja) 2018-01-10

Family

ID=52135807

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013120334A Active JP6255721B2 (ja) 2013-06-07 2013-06-07 処理割り当て装置、処理割り当て方法及び処理割り当てプログラム

Country Status (1)

Country Link
JP (1) JP6255721B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7039424B2 (ja) * 2018-08-31 2022-03-22 富士フイルム株式会社 画像処理装置、画像処理方法、及び画像処理プログラム

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004006097A2 (en) * 2002-07-03 2004-01-15 Koninklijke Philips Electronics N.V. Multi-processor computer system
NL2004392A (en) * 2009-04-15 2010-10-18 Asml Netherlands Bv Lithographic apparatus, control system, multi-core processor, and a method to start tasks on a multi-core processor.

Also Published As

Publication number Publication date
JP2014238683A (ja) 2014-12-18

Similar Documents

Publication Publication Date Title
US8875151B2 (en) Load balancing method and apparatus in symmetric multi-processor system
US9176774B2 (en) Workflow control of reservations and regular jobs using a flexible job scheduler
WO2017166777A1 (zh) 一种任务调度方法及装置
US8893148B2 (en) Performing setup operations for receiving different amounts of data while processors are performing message passing interface tasks
US8108876B2 (en) Modifying an operation of one or more processors executing message passing interface tasks
US9396028B2 (en) Scheduling workloads and making provision decisions of computer resources in a computing environment
KR101626378B1 (ko) 병렬도를 고려한 병렬 처리 장치 및 방법
US8145820B2 (en) Multiprocessor system and computer program product
US20090064165A1 (en) Method for Hardware Based Dynamic Load Balancing of Message Passing Interface Tasks
US20160350159A1 (en) Efficient critical thread scheduling for non-privileged thread requests
US9588808B2 (en) Multi-core system performing packet processing with context switching
JP2009294712A (ja) 優先度制御装置及び優先度制御方法
US20120284720A1 (en) Hardware assisted scheduling in computer system
KR101901587B1 (ko) 연성 실시간 운영체제의 실시간성을 확보하는 방법 및 장치
CN103365718A (zh) 一种线程调度方法、线程调度装置及多核处理器系统
WO2014101561A1 (zh) 单个处理器上实现多应用并行处理的方法及装置
CN109766168B (zh) 任务调度方法和装置、存储介质以及计算设备
JP5726006B2 (ja) タスクおよびリソースのスケジューリング装置及びその方法並びに制御装置
JP6255721B2 (ja) 処理割り当て装置、処理割り当て方法及び処理割り当てプログラム
US11301304B2 (en) Method and apparatus for managing kernel services in multi-core system
JP3644042B2 (ja) マルチタスク処理装置
KR101377195B1 (ko) 컴퓨터 마이크로 작업
WO2021253875A1 (zh) 内存管理方法和相关产品
JP2008225641A (ja) コンピュータシステム、割り込み制御方法及びプログラム
JP3893136B2 (ja) 組込みコンピュータ制御プログラム、そのプログラムを記録した記録媒体、及び組込みシステム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160516

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170214

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170314

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170926

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171016

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20171120

R150 Certificate of patent or registration of utility model

Ref document number: 6255721

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150