特許第6442947号(P6442947)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 日本電気株式会社の特許一覧

特許6442947情報処理装置、情報処理方法及びそのプログラム
<>
  • 特許6442947-情報処理装置、情報処理方法及びそのプログラム 図000002
  • 特許6442947-情報処理装置、情報処理方法及びそのプログラム 図000003
  • 特許6442947-情報処理装置、情報処理方法及びそのプログラム 図000004
  • 特許6442947-情報処理装置、情報処理方法及びそのプログラム 図000005
  • 特許6442947-情報処理装置、情報処理方法及びそのプログラム 図000006
  • 特許6442947-情報処理装置、情報処理方法及びそのプログラム 図000007
  • 特許6442947-情報処理装置、情報処理方法及びそのプログラム 図000008
  • 特許6442947-情報処理装置、情報処理方法及びそのプログラム 図000009
  • 特許6442947-情報処理装置、情報処理方法及びそのプログラム 図000010
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6442947
(24)【登録日】2018年12月7日
(45)【発行日】2018年12月26日
(54)【発明の名称】情報処理装置、情報処理方法及びそのプログラム
(51)【国際特許分類】
   G06F 9/52 20060101AFI20181217BHJP
【FI】
   G06F9/52 150A
【請求項の数】7
【全頁数】15
(21)【出願番号】特願2014-190807(P2014-190807)
(22)【出願日】2014年9月19日
(65)【公開番号】特開2016-62388(P2016-62388A)
(43)【公開日】2016年4月25日
【審査請求日】2017年8月9日
(73)【特許権者】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100109313
【弁理士】
【氏名又は名称】机 昌彦
(74)【代理人】
【識別番号】100124154
【弁理士】
【氏名又は名称】下坂 直樹
(72)【発明者】
【氏名】水野 佑基
【審査官】 大桃 由紀雄
(56)【参考文献】
【文献】 特開2006−259821(JP,A)
【文献】 特開2006−155480(JP,A)
【文献】 特開平07−319716(JP,A)
【文献】 特開2011−175378(JP,A)
【文献】 特開2005−135082(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/52
(57)【特許請求の範囲】
【請求項1】
複数のコアのうち、並列に実行することが可能である複数のスレッドによって動作する並列プログラムの実行開始を検出し、前記実行開始が検出されるのに応じて、前記並列プログラムを実行するために使用できる前記コアの数である利用可能コア数を特定するコア数特定手段と、
前記複数のスレッドのいずれかの破棄及び新たなスレッドの生成を検出し、前記破棄又は前記生成が検出されるのに応じて、前記複数のスレッドの数である並列実行スレッド数を特定するスレッド数特定手段と、
特定された前記利用可能コア数と、特定された前記並列実行スレッド数と、に基づいて、前記複数のコアが前記並列プログラムを実行するバリア同期の方式を決定する決定手段と、
を備え、
前記決定手段は、特定された前記並列実行スレッド数が、特定された前記利用可能コア数以下である場合、バリア同期の方式としてビジーウェイト方式を決定し、特定された前記並列実行スレッド数が、特定された前記利用可能コア数より大きい場合、バリア同期の方式としてサスペンド・リジューム方式を決定する
情報処理装置。
【請求項2】
前記コア数特定手段は、さらに、前記バリア同期の開始を検出し、前記バリア同期の開始が検出されるのに応じて、前記利用可能コア数を特定する
請求項1に記載の情報処理装置。
【請求項3】
前記スレッド数特定手段は、さらに、前記バリア同期の開始を検出し、前記バリア同期の開始が検出されるのに応じて、前記並列実行スレッド数を特定する
請求項1又は2に記載の情報処理装置。
【請求項4】
前記複数のスレッドが割り当てられ、前記バリア同期の方式を表す信号を受信するのに応じて、受信した信号に応じた方式で割り当てられている前記スレッドを実行する前記複数のコアの各々に、決定された前記バリア同期の方式を表す信号を送信する制御手段
をさらに備える請求項1乃至3のいずれかに記載の情報処理装置。
【請求項5】
前記複数のコアをさらに備える請求項1乃至4のいずれかに記載の情報処理装置。
【請求項6】
複数のコアのうち、並列に実行することが可能である複数のスレッドによって動作する並列プログラムの実行開始を検出し、前記実行開始が検出されるのに応じて、前記並列プログラムを実行するために使用できる前記コアの数である利用可能コア数を特定し、
前記複数のスレッドのいずれかの破棄及び新たなスレッドの生成を検出し、前記破棄又は前記生成が検出されるのに応じて、前記複数のスレッドの数である並列実行スレッド数を特定し、
特定された前記利用可能コア数と、特定された前記並列実行スレッド数と、に基づいて、前記複数のコアが前記並列プログラムを実行するバリア同期の方式を決定し、
特定された前記並列実行スレッド数が、特定された前記利用可能コア数以下である場合、バリア同期の方式としてビジーウェイト方式を決定し、特定された前記並列実行スレッド数が、特定された前記利用可能コア数より大きい場合、バリア同期の方式としてサスペンド・リジューム方式を決定する
情報処理方法。
【請求項7】
コンピュータに、
複数のコアのうち、並列に実行することが可能である複数のスレッドによって動作する並列プログラムの実行開始を検出し、前記実行開始が検出されるのに応じて、前記並列プログラムを実行するために使用できる前記コアの数である利用可能コア数を特定するコア数特定処理と、
前記複数のスレッドのいずれかの破棄及び新たなスレッドの生成を検出し、前記破棄又は前記生成が検出されるのに応じて、前記複数のスレッドの数である並列実行スレッド数を特定するスレッド数特定処理と、
特定された前記利用可能コア数と、特定された前記並列実行スレッド数と、に基づいて、前記複数のコアが前記並列プログラムを実行するバリア同期の方式を決定する決定処理と、
を実行させ、
前記決定処理は、特定された前記並列実行スレッド数が、特定された前記利用可能コア数以下である場合、バリア同期の方式としてビジーウェイト方式を決定し、特定された前記並列実行スレッド数が、特定された前記利用可能コア数より大きい場合、バリア同期の方式としてサスペンド・リジューム方式を決定する
プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、並列化されたプログラムが実行される計算機においてバリア同期方式を選択する技術に関する。
【背景技術】
【0002】
並列プログラムの実行時間の短縮のためには、バリア同期の高速化が重要である。実行時に最適なバリア同期を選択する方法を含め、バリア同期を最適化する手法が、例えば、特許文献1及び2によって開示されている。
【0003】
特許文献1には、過去の実績に基づくプロセス毎の通信待ち時間と閾値とを比較し、その結果によって通信待ち合わせの方式を選択する通信システムが記載されている。特許文献1の通信システムは、通信待ち時間が閾値以下である場合、ビジーウェイト方式を選択し、通信待ち時間が閾値より大きい場合、サスペンド方式を選択する。
【0004】
特許文献2には、同期開始時にビジーウェイト方式を選択し、一定時間ロックが成立しない場合に、サスペンド・リジューム方式を選択するマルチプロセッサシステムが記載されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2001−117787号公報
【特許文献2】特開平5−225149号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
プログラムの並列化にはOpenMP、MPI(Message Passing Interface)などの並列ライブラリを利用することが一般的である。これらの並列プログラムでは、その開始前にどちらかのバリア同期方式を選択してから実行するのが一般的である。しかし、これらを用いた並列化では、並列に実行されるスレッド数がプログラムの処理内容によって増減することがある。そして、並列に実行されるスレッド数は、利用可能なコア数より多くなったり少なくなったりすることがある。そのため、並列プログラムの開始前にどちらかのバリア同期方式を選択する場合、常に適したバリア同期方式が選択されるとは限らず、プログラムの実行時間が延びる。
【0007】
特許文献1に記載の通信システムは、過去の実績に基づいて方式を選択するので、十分な数の過去の実績が蓄積されるまで、適した方式を精度よく選択することはできない。特許文献1の技術では、特に通信システムの動作開始時において、適したバリア同期方式が選択されないことによるオーバーヘッドが生じる。
【0008】
特許文献2に記載されているマルチプロセッサシステムは、同期開始時にサスペンド・リジューム方式が適している場合であっても、一定時間にわたってビジーウェイト方式で動作する。特許文献2の技術では、同期開始時において、適したバリア同期方式が選択されないことによるオーバーヘッドが生じる。
【0009】
本発明の目的の一つは、並列プログラムの実行時間を短縮できる情報処理装置等を提供することにある。
【課題を解決するための手段】
【0010】
本発明の一態様に係る情報処理装置は、複数のコアのうち、並列に実行することが可能である複数のスレッドによって動作する並列プログラムの実行開始を検出し、前記実行開始が検出されるのに応じて、前記並列プログラムを実行するために使用できる前記コアの数である利用可能コア数を特定するコア数特定手段と、前記複数のスレッドのいずれかの破棄及び新たなスレッドの生成を検出し、前記破棄又は前記生成が検出されるのに応じて、前記複数のスレッドの数である並列実行スレッド数を特定するスレッド数特定手段と、特定された前記利用可能コア数と、特定された前記並列実行スレッド数と、に基づいて、前記複数のコアが前記並列プログラムを実行するバリア同期の方式を決定する決定手段と、を備える。
【0011】
本発明の一態様に係る情報処理方法は、複数のコアのうち、並列に実行することが可能である複数のスレッドによって動作する並列プログラムの実行開始を検出し、前記実行開始が検出されるのに応じて、前記並列プログラムを実行するために使用できる前記コアの数である利用可能コア数を特定し、前記複数のスレッドのいずれかの破棄及び新たなスレッドの生成を検出し、前記破棄又は前記生成が検出されるのに応じて、前記複数のスレッドの数である並列実行スレッド数を特定し、特定された前記利用可能コア数と、特定された前記並列実行スレッド数と、に基づいて、前記複数のコアが前記並列プログラムを実行するバリア同期の方式を決定する。
【0012】
本発明の一態様に係るプログラムは、コンピュータを、複数のコアのうち、並列に実行することが可能である複数のスレッドによって動作する並列プログラムの実行開始を検出し、前記実行開始が検出されるのに応じて、前記並列プログラムを実行するために使用できる前記コアの数である利用可能コア数を特定するコア数特定手段と、前記複数のスレッドのいずれかの破棄及び新たなスレッドの生成を検出し、前記破棄又は前記生成が検出されるのに応じて、前記複数のスレッドの数である並列実行スレッド数を特定するスレッド数特定手段と、特定された前記利用可能コア数と、特定された前記並列実行スレッド数と、に基づいて、前記複数のコアが前記並列プログラムを実行するバリア同期の方式を決定する決定手段と、して動作させる。
【発明の効果】
【0013】
本発明には、並列プログラムの実行時間を短縮できるという効果がある。
【図面の簡単な説明】
【0014】
図1図1は、並列に実行されるスレッド数が利用可能なコア数以下の場合における、ビジーウェイト方式による処理時間及びサスペンド・リジューム方式による処理時間の大小関係を模式的に表す図である。
図2図2は、利用可能なコア数が並列に実行されるスレッド数より少ない場合における、ビジーウェイト方式による処理時間及びサスペンド・リジューム方式による処理時間の大小関係を模式的に表す図である。
図3図3は、本発明の第1及び第2の実施形態に係る情報処理装置1の構成の例を表すブロック図である。
図4図4は、本発明の第1及び第2の実施形態の情報処理装置1の動作の例を表すフローチャートである。
図5図5は、本発明の第1及び第2の実施形態の情報処理装置1の、コア数特定処理の動作の例を表すフローチャートである。
図6図6は、本発明の第1及び第2の実施形態の情報処理装置1の、スレッド数特定処理の動作の例を表すフローチャートである。
図7図7は、本発明の第2の実施形態の情報処理装置1の、並列プログラム実行中における動作の例を表すフローチャートである。
図8図8は、本発明の第3の実施形態の情報処理装置1Aの構成の例を表すブロック図である。
図9図9は、本発明の各実施形態に係る情報処理装置を実現することができる、コンピュータ1000のハードウェア構成の一例を表す図である。
【発明を実施するための形態】
【0015】
本発明の実施形態の説明の前に、本発明の理解を容易にするために、バリア方式の例について説明する。
【0016】
並列プログラムは、一般に、複数のコアで並列に処理できる部分を含むプログラムである。並列プログラムを実行する場合、並列処理が可能な部分では、例えば複数のスレッドが生成される。そして、それらの複数のスレッドのそれぞれに、例えば複数のコアのいずれかが割り当てられる。複数のスレッドは、それぞれ、割り当てられたコアによって実行される。例えば、そのような並列に処理される複数のスレッドの各々において処理の途中で得られる結果が、その後の複数のスレッドの各々において使用されることがある。そのような場合、複数のスレッド全ての処理の結果が揃うまで、必要な結果を得る処理が終了したスレッドを、処理を進めない状態にしておく必要がある。そのための技術として、バリア同期と呼ばれる技術がある。バリア同期では、例えば、プログラムにバリアと呼ばれる箇所を設定しておき、スレッドにおける処理がバリアに到達した場合、そのスレッドを処理するコアは、全てのスレッドがバリアに到達するまで、そのスレッドの処理を進めない(すなわち待機する)。全てのスレッドによるバリアへの到達の判定は、例えば、カウンタによって行われる。その場合、スレッドがバリアに達した場合、カウンタに1を加算する。カウンタの値が、バリア同期によって動作するスレッドの数に達した場合、全てのスレッドがバリアに達したと判定される。全てのスレッドがバリアに達した場合、停止していた全てのスレッドにおいて処理が再開される。
【0017】
このように、並列プログラムでは、スレッド間の協調処理を実現するためにバリア同期が用いられる。並列プログラムの性能向上のためには、バリア同期の時間短縮が重要である。
【0018】
バリア同期の代表的な方式に、ビジーウェイト方式とサスペンド・リジューム方式がある。なお、以下の説明では、スレッドを実行するプロセッサコア(以下、コアと表記する)が行う動作を、そのスレッドが行う動作として表記することがある。また、OS(Operating System)によって制御されるコアが行う動作を、OSが行う動作として説明することもある。
【0019】
ビジーウェイト方式は、以下のように動作する方式である。ビジーウェイト方式では、スレッド間で共有されたカウンタが用いられる。各スレッドはバリア同期到達時にカウンタを更新する。そして、各スレッドは、他のスレッドがカウンタを更新したのかどうかをループで確認(カウンタ監視)する。各スレッドは、他の全てのスレッドがカウンタを更新したことを確認できたら計算処理を再開する。
【0020】
サスペンド・リジューム方式は、以下のように動作する方式である。OSは、バリア同期に到達したスレッドを中断(サスペンド)する。そして、OSは、他のスレッドにコアを割り当てる。OSは、全スレッドがバリア同期に到達したら、中断したスレッドを再開(リジューム)させる。
【0021】
以上の両方式のうち、ビジーウェイト方式は、バリア同期を行うためにOSによる処理が必要ない。そのため、ビジーウェイト方式は、サスペンド・リジューム方式より、OSによる処理のオーバーヘッドが小さい。一方、ビジーウェイト方式は、バリア同期に到達したスレッドに、カウンタ監視のためにコアを割り当てる必要がある。
【0022】
サスペンド・リジューム方式では、バリア同期に到達したスレッドはサスペンドしている。サスペンド・リジューム方式では、各スレッドは、全スレッドがバリア同期に到達したことを確認するためのカウンタ監視を行わない。そのため、サスペンド・リジューム方式は、バリア同期に到達したスレッドに、コアを割り当てる必要がない。一方、サスペンド・リジューム方式は、スレッドの中断及び再開を行うOSの処理が必要となる。そのため、サスペンド・リジューム方式は、ビジーウェイト方式より、OSの処理のオーバーヘッドが大きい。
【0023】
次に、ビジーウェイト方式による処理及びサスペンド・リジューム方式による処理の時間について説明する。
【0024】
図1図2は、ビジーウェイト方式による処理時間及びサスペンド・リジューム方式による処理時間の大小関係を模式的に表す図である。図1及び図2において、C0〜C3は、例えば、コアの識別子を表す。P0からP3は、スレッドの識別子を表す。
【0025】
図1は、並列に実行されるスレッド数が利用可能なコア数以下の場合における、ビジーウェイト方式による処理時間及びサスペンド・リジューム方式による処理時間の大小関係を模式的に表す図である。図1に示す例では、利用可能なコア数と、並列に実行されるスレッド数は、共に4である。各スレッドは別々のコアを占有して実行される。この場合、ビジーウェイト方式のカウンタ監視は、スレッドが割り当てられたコアで実行できる。そのため、OS処理が必要ないビジーウェイト方式の方がサスペンド・リジューム方式よりも短時間で処理が完了する。
【0026】
図2は、利用可能なコア数が並列に実行されるスレッド数より少ない場合における、ビジーウェイト方式による処理時間及びサスペンド・リジューム方式による処理時間の大小関係を模式的に表す図である。図2に示す例では、利用可能なコア数は1である。並列に実行されるスレッド数は4である。各スレッドは、OSによって順番にコアを割り当てられ、割り当てられたコアによって実行される。たとえば、P0、P1がP2、P3よりも早くバリア同期に到達した場合(すなわち、割り当てられたスレッドの処理が完了した場合)を考える。例えば、P0及びP1が割り当てられたスレッドの処理を完了した後、P2及びP3が割り当てられたスレッドの処理を完了していない間、ビジーウェイト方式の場合、計算処理ではなく単なるカウンタ監視のためにP0、P1にコアが割り当てられる。そのため、P0及びP1においてカウンタ監視が行われる時間、P2、P3の計算処理が遅延する。その結果、全てのスレッドにおける処理がバリア同期に到達するまでの時間が遅延する。サスペンド・リジューム方式の場合、バリア同期に到達したスレッドにはコアが割り当てられない。そのため、カウンタ監視のためにコアが割り当てられることがない。バリア同期に到達したスレッドに割り当てられていたコアが行うカウンタ監視に時間を割り当てる代わりに、バリア同期に到達していないコアに計算処理を行う時間を割り当てることができる。そのため、サスペンド・リジューム方式に夜処理は、ビジーウェイト方式による処理よりも短時間で完了する。
【0027】
図1及び図2に示す通り、並列に実行されるスレッド数が利用可能なコア数以下である場合、一般に、ビジーウェイト方式の方が、全てのスレッドがバリア同期に到達するまでの時間が短い。それ以外の場合、一般に、サスペンド・リジューム方式が、全てのスレッドがバリア同期に到達するまでの時間が短い。
【0028】
次に、本発明の第1の実施の形態について図面を参照して詳細に説明する。
【0029】
<第1の実施形態>
図3は、本実施形態に係る情報処理装置1の構成の例を表すブロック図である。
【0030】
本実施形態の情報処理装置1は、コア数特定部11と、スレッド数特定部12と、決定部13と、制御部14と、コア数記憶部15と、スレッド数記憶部16とを含む。情報処理装置1は、さらに、複数のコア(コア21、コア22、・・・、コア2N)を含む。複数のコアは、情報処理装置1が備えるプロセッサのコアである。本発明の各実施形態の説明では、プロセッサのコアを単にコアと表記する。情報処理装置1は、例えば、並列プログラムをロードすることができるメモリ(図3において図示されない)や、並列プログラムが格納されている記録媒体等(図3において図示されない)を含んでいればよい。
【0031】
コア数特定部11は、例えば並列プログラムが起動するのを検出する。複数のコアのいずれかが、並列プログラムを実行してもよい。複数のコアとは別の制御プロセッサが、並列プログラムを実行してもよい。コア数特定部11は、並列プログラムを実行するコア又はプロセッサなどから、その並列プロセッサが実行されたことを表す信号を受信することによって、当該並列プログラムが起動するのを検出すればよい。そして、当該並列プログラムが起動したことが検出された場合、コア数特定部11は、複数のコアのうち、起動した並列プログラムのスレッドを実行できるコアの数である、利用可能コア数を特定する。コア数特定部11は、例えば、他のプログラムや、OS等を実行していないコアの数を特定すればよい。コア数を特定する方法として、既存の様々な方法が適用可能である。コア数特定部11は、特定した利用可能コア数を、コア数記憶部15に格納する。
【0032】
コア数記憶部15は、特定された利用可能コア数を記憶する。
【0033】
スレッド数特定部12は、例えば、並列プログラムのスレッドが新たに生成されたこと及び既に生成されているスレッドが廃棄されたことの少なくともいずれかを検出すればよい。そして、スレッド数特定部12は、例えば、並列プログラムのスレッドが生成されたこと及び廃棄されたことの少なくともいずれかを検出した場合、並列に実行することができるスレッド数を特定すればよい。スレッド数特定部12が並列プログラムのスレッドが生成されたこと及び廃棄されたことを検出する方法として、既存の様々な方法が適用可能である。例えば、スレッド数特定部12は、並列プログラムを実行し、その並列プログラムを実行する過程においてスレッドを生成及び廃棄する、コアやプロセッサ等から、スレッドが生成されたこと及び廃棄されたことを表す信号を受信すればよい。そして、スレッド数特定部12は、そのような信号を受信することによって、並列プログラムのスレッドが生成されたこと及び廃棄されたことを検出すればよい。スレッド数特定部12が並列プログラムのスレッド数を特定する方法として、既存の任意の方法を適用することができる。スレッド数特定部12は、例えば、並列プログラムを実行し、スレッドを生成し廃棄する、コアやプロセッサなどから、並列に実行することができるスレッド数を受信すればよい。スレッド数特定部12は、特定した、並列に実行できるスレッド数である、並列実行スレッド数を、スレッド数記憶部16に格納する。
【0034】
スレッド数記憶部16は、並列プログラムの並列実行スレッド数を記憶する。
【0035】
決定部13は、特定された利用可能コア数と、特定された並列実行スレッド数とを比較する。特定された利用可能コア数は、例えば、コア数記憶部15に格納されている。並列実行スレッド数は、例えば、スレッド数記憶部16に格納されている。並列可能スレッド数が利用可能コア数以下である場合、決定部13は、バリア同期の方式に、ビジーウェイト方式を決定する。並列可能スレッド数が利用可能コア数より大きい場合、決定部13は、バリア同期の方式に、サスペンド・リジューム方式を選択する。
【0036】
制御部14は、決定されたバリア同期の方式で、並列プログラムの各スレッドのバリア同期を実行するよう、並列プログラムのスレッドを実行するコアを制御する。制御部14がコアを制御する方法として、既存の様々な方法が適用可能である。例えば、制御部14は、並列プログラムを実行するコア又はプロセッサに対して、決定されたバリア同期の方式にあらかじめ関連付けられている信号を送信すればよい。そのような信号を受信したコア又はプロセッサは、受信した信号が表すバリア同期の方式に従ってスレッドを実行する指示を、並列プログラムによって生成されたスレッドを実行する複数のコアに送信すればよい。そして、並列プログラムを実行するコア又はプロセッサは、生成したスレッドにコアを割り当て、スレッドが割り当てられたコアに、受信した信号が表すバリア同期の方式に従ってそのスレッドを実行させればよい。
【0037】
なお、例えば、並列プログラムを実行するコア又はプロセッサが、さらに、コア数特定部11、スレッド数特定部12、決定部13、制御部14、コア数記憶部15、及びスレッド数記憶部16として動作してもよい。並列プログラムを実行するコア又はプロセッサとは別の、コア、プロセッサ、又は専用の回路が、コア数特定部11、スレッド数特定部12、決定部13、制御部14、コア数記憶部15、及びスレッド数記憶部16として動作してもよい。
【0038】
次に、本実施形態の情報処理装置1の動作について、図面を参照して詳細に説明する。
【0039】
図4は、本実施形態の情報処理装置1の動作の例を表すフローチャートである。
【0040】
図4を参照すると、まず、コア数特定部11が、コア数特定処理を実行する(ステップS101)。まず、本実施形態の情報処理装置1の、コア数特定処理の動作について、詳細に説明する。
【0041】
図5は、本実施形態の情報処理装置1の、コア数特定処理の動作の例を表すフローチャートである。
【0042】
図5を参照すると、コア数特定部11は、並列プログラムが実行されたか否かを検出する(ステップS201)。並列プログラムの実行が検出されない場合(ステップS202においてNo)、コア数特定部11は、並列プログラムが実行されたか否かを検出することを継続する(ステップS201)。並列プログラムの実行が検出された場合(ステップS202においてYes)、コア数特定部11は、並列プログラムの実行に利用することができるコア数である、利用可能コア数を特定する(ステップS203)。コア数特定部11は、特定した利用可能コア数を、コア数記憶部15に格納し(ステップS203)、情報処理装置1は、図5に示す動作を終了する。
【0043】
次に、スレッド数特定部12が、スレッド数特定処理を実行する(ステップS102)。次に、本実施形態の情報処理装置1の、スレッド数特定処理の動作について、詳細に説明する。
【0044】
図6は、本実施形態の情報処理装置1の、スレッド数特定処理の動作の例を表すフローチャートである。
【0045】
図6を参照すると、スレッド数特定部12は、並列に実行されるスレッドの生成及び廃棄を検出する(ステップS301)。並列に実行されるスレッドの生成及び廃棄が検出されない場合(ステップS302においてNo)、スレッド数特定部12は、並列に実行されるスレッドの生成及び廃棄の検出を継続する(ステップS301)。並列に実行されるスレッドの生成又は廃棄が検出された場合(ステップS302においてYes)、スレッド数特定部12は、並列に実行されるスレッドの数を特定する(ステップS303)。スレッド数特定部12は、特定したスレッドの数を、スレッド数記憶部16に格納し、(ステップS304)情報処理装置1は、図6に示す動作を終了する。
【0046】
次に、決定部13は、ステップS101において特定された利用可能コア数と、ステップS102において特定された並列可能スレッド数とを比較する(ステップS103)。
【0047】
並列可能スレッド数が利用可能コア数以下である場合(ステップS104においてYes)、決定部13は、バリア同期の方式として、ビジーウェイト方式を決定する(ステップS105)。すなわち、決定部13は、並列プログラムのスレッドにおけるバリア同期方式を、ビジーウェイト方式に決定する。
【0048】
並列可能スレッド数が利用可能コア数より大きい場合(ステップS104においてNo)、決定部13は、バリア同期の方式として、サスペンド・リジューム方式を決定する(ステップS106)。すなわち、決定部13は、並列プログラムのスレッドにおけるバリア同期方式を、サスペンド・リジューム方式に決定する。
【0049】
制御部14は、決定したバリア同期の方式で動作する指示を、並列プログラムのスレッドを実行するコアに送信する(ステップS107)。
【0050】
以上で説明した本実施形態には、並列プログラムの実行時間を短縮できるという効果がある。その理由は、並列可能スレッド数が利用可能コア数以下である場合、決定部13が、バリア同期の方式として、ビジーウェイト方式を決定するからである。そして、並列可能スレッド数が利用可能コア数より大きい場合、決定部13は、バリア同期の方式として、サスペンド・リジューム方式を決定するからである。以上で説明したように、並列可能スレッド数が利用可能コア数以下である場合、一般に、サスペンド・リジューム方式による処理より、ビジーウェイト方式による処理の方が高速である。また、並列可能スレッド数が利用可能コア数より大きい場合、ビジーウェイト方式による処理より、サスペンド・リジューム方式による処理の方が高速である。すなわち、決定部13は、高速に実行される方式を選択することができる。また、コア数特定部11は、並列プログラムの実行開始を検出し、その実行開始が検出されるのに応じて、利用可能コア数を特定する。さらに、スレッド数特定部12は、スレッドの生成及び破棄を検出し、スレッドの生成又は破棄が検出された場合、並列実行スレッド数を特定する。決定部13は、このように特定された並列実行スレッド数及び利用可能コア数を使用して、バリア同期の方式を決定する。従って、複数のコアは、並列プログラムの起動後すぐに、適したバリア同期の方式で動作することができる。
【0051】
<第2の実施形態>
次に、本発明の第2の実施形態について図面を参照して詳細に説明する。本実施形態は、上述した第1の実施形態を基本とする実施形態である。
【0052】
図3は、本実施形態に係る情報処理装置1の構成の例を表すブロック図である。本実施形態の情報処理装置1の構成は、第1の実施形態の情報処理装置1の構成と同じである。本実施形態の情報処理装置1と、第1の実施形態の情報処理装置1は、以下に示す事項を除き、同じである。
【0053】
本実施形態では、コア数特定部11は、さらに、バリア同期の開始を検出し、バリア同期の開始が検出されるのに応じて、利用可能コア数を特定する。また、スレッド数特定部12は、バリア同期の開始を検出し、バリア同期の開始が検出されるのに応じて、並列実行スレッド数を特定する。バリア同期の開始は、例えば、並列に実行される複数のスレッドのいずれかが割り当てられたコアの各々が、割り当てられたスレッドの、バリア同期を行う処理を開始することである。なお、コア数特定部11及びスレッド数特定部12の双方ではなく、コア数特定部11及びスレッド数特定部12のいずれかが、バリア同期の開始を検出してもよい。バリア同期の開始の検出方法として、既存のさまざまな方法が適用可能である。例えば、並列プログラムが、バリア同期の開始を通知するよう実装されていればよい。そして、並列プログラムを実行するコア又は制御プロセッサ等が、バリア同期を開始する際、コア数特定部11及びスレッド数特定部12の少なくともいずれかに、バリア同期の開始を表す信号を送信すればよい。コア数特定部11及びスレッド数特定部12の一方の部のみにバリア同期の開始を表す信号が送信される場合、その信号を受信した部は、他方の部に、バリア同期の開始を表す信号を転送すればよい。コア数特定部11及びスレッド数特定部12は、バリア同期の開始を表す信号を受信した場合、バリア同期が開始されたことを検出すればよい。
【0054】
次に、本実施形態の情報処理装置1の動作について説明する。本実施形態の情報処理装置1の、並列プログラム実行開始時における動作は、図4図5、及び図6に示す、第1の実施形態の情報処理装置1の動作と同じである。従って、その動作の説明を省略する。
【0055】
次に、本実施形態の情報処理装置1の、並列プログラム実行中における動作について、図面を参照して詳細に説明する。
【0056】
図7は、本実施形態の情報処理装置1の、並列プログラム実行中における動作の例を表すフローチャートである。
【0057】
図7を参照すると、まず、例えばコア数特定部11が、バリア同期の開始を検出する(ステップS401)。スレッド数特定部12が、バリア同期の開始を検出してもよい。コア数特定部11及びスレッド数特定部12が、バリア同期の開始を検出してもよい。バリア同期の開始が検出されない場合(ステップS402においてNo)、ステップS401の動作が継続される。バリア同期の開始が検出された場合(ステップS402においてYes)、情報処理装置1は、図7においてステップS402の後に示すステップにおける、利用可能コア数の特定、並列実行スレッド数の特定、バリア同期の放棄の決定などの処理を行う。これらのステップにおける動作は、同じ符号が付与された、図4図5、又は図6に示すステップの動作と同じであるので、説明を省略する。
【0058】
以上で説明した本実施形態には、第1の実施形態と同じ効果がある。その理由は、第1の実施形態の効果が生じる理由と同じである。
【0059】
本実施形態には、さらに、並列プログラムが実行されている間に、利用可能コア数や並列実行スレッド数が変化した場合であっても、並列プログラムの実行時間を短縮できるという効果がある。その理由は、決定部13が、バリア同期の開始が検出されるのに応じて特定された、利用可能コア数及び並列実行スレッド数を使用して、バリア同期の方式を選択するからである。従って、本実施形態の情報処理装置1は、利用可能コア数や並列実行スレッド数が変化した場合であっても、適したバリア同期の方式を選択することができるので、並列プログラムの実行時間を短縮できる。
【0060】
<第3の実施形態>
次に、本発明の第3の実施形態について、図面を参照して詳細に説明する。本実施形態は、上述した各実施形態に共通する概念を表す実施形態である。
【0061】
図8は、本実施形態の情報処理装置1Aの構成の例を表すブロック図である。
【0062】
図8を参照すると、本実施形態の情報処理装置1Aは、複数のコアのうち、並列に実行することが可能である複数のスレッドによって動作する並列プログラムの実行開始を検出し、前記実行開始が検出されるのに応じて、前記並列プログラムを実行するために使用できる前記コアの数である利用可能コア数を特定するコア数特定部11と、前記複数のスレッドのいずれかの破棄及び新たなスレッドの生成を検出し、前記破棄又は前記生成が検出されるのに応じて、前記複数のスレッドの数である並列実行スレッド数を特定するスレッド数特定部12と、特定された前記利用可能コア数と、特定された前記並列実行スレッド数と、に基づいて、前記複数のコアが前記並列プログラムを実行するバリア同期の方式を決定する決定部13と、を備える。
【0063】
以上で説明した本実施形態には、第1の実施形態と同じ効果がある。その理由は、第1の実施形態の効果が生じる理由と同じである。
【0064】
以上で説明した本発明の各実施形態では、スレッドではなく、並列に指定されたバリア同期の方式に基づいて動作することができるプロセスが、各コアに割り当てられていてもよい。その場合、スレッド数特定部12は、並列に実行されるプロセス数を、並列実行スレッド数として特定してもよい。
【0065】
<他の実施形態>
情報処理装置1、及び情報処理装置1Aは、それぞれ、コンピュータ及びコンピュータを制御するプログラム、専用のハードウェア、又は、コンピュータ及びコンピュータを制御するプログラムと専用のハードウェアの組合せにより実現することができる。
【0066】
図9は、情報処理装置1、及び情報処理装置1Aを実現することができる、コンピュータ1000のハードウェア構成の一例を表す図である。図9を参照すると、コンピュータ1000は、プロセッサ1001と、メモリ1002と、記憶装置1003と、I/O(Input/Output)インタフェース1004とを含む。また、コンピュータ1000は、記録媒体1005にアクセスすることができる。メモリ1002と記憶装置1003は、例えば、RAM(Random Access Memory)、ハードディスクなどの記憶装置である。記録媒体1005は、例えば、RAM、ハードディスクなどの記憶装置、ROM(Read Only Memory)、可搬記録媒体である。記憶装置1003が記録媒体1005であってもよい。プロセッサ1001は、メモリ1002と、記憶装置1003に対して、データやプログラムの読み出しと書き込みを行うことができる。プロセッサ1001は、I/Oインタフェース1004を介して、例えば、情報処理装置1等に接続されている端末装置など(図示されない)にアクセスすることができる。プロセッサ1001は、記録媒体1005にアクセスすることができる。記録媒体1005には、コンピュータ1000を、情報処理装置1、又は情報処理装置1Aとして動作させるプログラムが格納されている。
【0067】
プロセッサ1001は、記録媒体1005に格納されている、コンピュータ1000を、情報処理装置1、又は情報処理装置1Aとして動作させるプログラムを、メモリ1002にロードする。そして、プロセッサ1001が、メモリ1002にロードされたプログラムを実行することにより、コンピュータ1000は、情報処理装置1、又は情報処理装置1Aとして動作する。
【0068】
コア数特定部11、スレッド数特定部12、決定部13、及び制御部14は、例えば、プログラムを記憶する記録媒体1005からメモリ1002に読み込まれた、各部の機能を実現することができる専用のプログラムと、そのプログラムを実行するプロセッサ1001により実現することができる。また、コア数記憶部15、及びスレッド数記憶部16は、コンピュータ1000が含むメモリ1002やハードディスク装置等の記憶装置1003により実現することができる。あるいは、コア数特定部11、スレッド数特定部12、決定部13、制御部14、コア数記憶部15、及びスレッド数記憶部16の一部又は全部を、各部の機能を実現する専用の回路によって実現することもできる。
【0069】
以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【0070】
1 情報処理装置
1A 情報処理装置
11 コア数特定部
12 スレッド数特定部
13 決定部
14 制御部
15 コア数記憶部
16 スレッド数記憶部
21 コア
22 コア
2N コア
1000 コンピュータ
1001 プロセッサ
1002 メモリ
1003 記憶装置
1004 I/Oインタフェース
1005 記録媒体
図1
図2
図3
図4
図5
図6
図7
図8
図9