(57)【特許請求の範囲】
【請求項１】
複数のコアのうち、並列に実行することが可能である複数のスレッドによって動作する並列プログラムの実行開始を検出し、前記実行開始が検出されるのに応じて、前記並列プログラムを実行するために使用できる前記コアの数である利用可能コア数を特定するコア数特定手段と、
前記複数のスレッドのいずれかの破棄及び新たなスレッドの生成を検出し、前記破棄又は前記生成が検出されるのに応じて、前記複数のスレッドの数である並列実行スレッド数を特定するスレッド数特定手段と、
特定された前記利用可能コア数と、特定された前記並列実行スレッド数と、に基づいて、前記複数のコアが前記並列プログラムを実行するバリア同期の方式を決定する決定手段と、
を備え、
前記決定手段は、特定された前記並列実行スレッド数が、特定された前記利用可能コア数以下である場合、バリア同期の方式としてビジーウェイト方式を決定し、特定された前記並列実行スレッド数が、特定された前記利用可能コア数より大きい場合、バリア同期の方式としてサスペンド・リジューム方式を決定する
情報処理装置。
【請求項２】
前記コア数特定手段は、さらに、前記バリア同期の開始を検出し、前記バリア同期の開始が検出されるのに応じて、前記利用可能コア数を特定する
請求項１に記載の情報処理装置。
【請求項３】
前記スレッド数特定手段は、さらに、前記バリア同期の開始を検出し、前記バリア同期の開始が検出されるのに応じて、前記並列実行スレッド数を特定する
請求項１又は２に記載の情報処理装置。
【請求項４】
前記複数のスレッドが割り当てられ、前記バリア同期の方式を表す信号を受信するのに応じて、受信した信号に応じた方式で割り当てられている前記スレッドを実行する前記複数のコアの各々に、決定された前記バリア同期の方式を表す信号を送信する制御手段
をさらに備える請求項１乃至３のいずれかに記載の情報処理装置。
【請求項５】
前記複数のコアをさらに備える請求項１乃至４のいずれかに記載の情報処理装置。
【請求項６】
複数のコアのうち、並列に実行することが可能である複数のスレッドによって動作する並列プログラムの実行開始を検出し、前記実行開始が検出されるのに応じて、前記並列プログラムを実行するために使用できる前記コアの数である利用可能コア数を特定し、
前記複数のスレッドのいずれかの破棄及び新たなスレッドの生成を検出し、前記破棄又は前記生成が検出されるのに応じて、前記複数のスレッドの数である並列実行スレッド数を特定し、
特定された前記利用可能コア数と、特定された前記並列実行スレッド数と、に基づいて、前記複数のコアが前記並列プログラムを実行するバリア同期の方式を決定し、
特定された前記並列実行スレッド数が、特定された前記利用可能コア数以下である場合、バリア同期の方式としてビジーウェイト方式を決定し、特定された前記並列実行スレッド数が、特定された前記利用可能コア数より大きい場合、バリア同期の方式としてサスペンド・リジューム方式を決定する
情報処理方法。
【請求項７】
コンピュータに、
複数のコアのうち、並列に実行することが可能である複数のスレッドによって動作する並列プログラムの実行開始を検出し、前記実行開始が検出されるのに応じて、前記並列プログラムを実行するために使用できる前記コアの数である利用可能コア数を特定するコア数特定処理と、
前記複数のスレッドのいずれかの破棄及び新たなスレッドの生成を検出し、前記破棄又は前記生成が検出されるのに応じて、前記複数のスレッドの数である並列実行スレッド数を特定するスレッド数特定処理と、
特定された前記利用可能コア数と、特定された前記並列実行スレッド数と、に基づいて、前記複数のコアが前記並列プログラムを実行するバリア同期の方式を決定する決定処理と、
を実行させ、
前記決定処理は、特定された前記並列実行スレッド数が、特定された前記利用可能コア数以下である場合、バリア同期の方式としてビジーウェイト方式を決定し、特定された前記並列実行スレッド数が、特定された前記利用可能コア数より大きい場合、バリア同期の方式としてサスペンド・リジューム方式を決定する
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列化されたプログラムが実行される計算機においてバリア同期方式を選択する技術に関する。
【背景技術】
【０００２】
並列プログラムの実行時間の短縮のためには、バリア同期の高速化が重要である。実行時に最適なバリア同期を選択する方法を含め、バリア同期を最適化する手法が、例えば、特許文献１及び２によって開示されている。
【０００３】
特許文献１には、過去の実績に基づくプロセス毎の通信待ち時間と閾値とを比較し、その結果によって通信待ち合わせの方式を選択する通信システムが記載されている。特許文献１の通信システムは、通信待ち時間が閾値以下である場合、ビジーウェイト方式を選択し、通信待ち時間が閾値より大きい場合、サスペンド方式を選択する。
【０００４】
特許文献２には、同期開始時にビジーウェイト方式を選択し、一定時間ロックが成立しない場合に、サスペンド・リジューム方式を選択するマルチプロセッサシステムが記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−１１７７８７号公報
【特許文献２】特開平５−２２５１４９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
プログラムの並列化にはＯｐｅｎＭＰ、ＭＰＩ（Ｍｅｓｓａｇｅ  Ｐａｓｓｉｎｇ  Ｉｎｔｅｒｆａｃｅ）などの並列ライブラリを利用することが一般的である。これらの並列プログラムでは、その開始前にどちらかのバリア同期方式を選択してから実行するのが一般的である。しかし、これらを用いた並列化では、並列に実行されるスレッド数がプログラムの処理内容によって増減することがある。そして、並列に実行されるスレッド数は、利用可能なコア数より多くなったり少なくなったりすることがある。そのため、並列プログラムの開始前にどちらかのバリア同期方式を選択する場合、常に適したバリア同期方式が選択されるとは限らず、プログラムの実行時間が延びる。
【０００７】
特許文献１に記載の通信システムは、過去の実績に基づいて方式を選択するので、十分な数の過去の実績が蓄積されるまで、適した方式を精度よく選択することはできない。特許文献１の技術では、特に通信システムの動作開始時において、適したバリア同期方式が選択されないことによるオーバーヘッドが生じる。
【０００８】
特許文献２に記載されているマルチプロセッサシステムは、同期開始時にサスペンド・リジューム方式が適している場合であっても、一定時間にわたってビジーウェイト方式で動作する。特許文献２の技術では、同期開始時において、適したバリア同期方式が選択されないことによるオーバーヘッドが生じる。
【０００９】
本発明の目的の一つは、並列プログラムの実行時間を短縮できる情報処理装置等を提供することにある。
【課題を解決するための手段】
【００１０】
本発明の一態様に係る情報処理装置は、複数のコアのうち、並列に実行することが可能である複数のスレッドによって動作する並列プログラムの実行開始を検出し、前記実行開始が検出されるのに応じて、前記並列プログラムを実行するために使用できる前記コアの数である利用可能コア数を特定するコア数特定手段と、前記複数のスレッドのいずれかの破棄及び新たなスレッドの生成を検出し、前記破棄又は前記生成が検出されるのに応じて、前記複数のスレッドの数である並列実行スレッド数を特定するスレッド数特定手段と、特定された前記利用可能コア数と、特定された前記並列実行スレッド数と、に基づいて、前記複数のコアが前記並列プログラムを実行するバリア同期の方式を決定する決定手段と、を備える。
【００１１】
本発明の一態様に係る情報処理方法は、複数のコアのうち、並列に実行することが可能である複数のスレッドによって動作する並列プログラムの実行開始を検出し、前記実行開始が検出されるのに応じて、前記並列プログラムを実行するために使用できる前記コアの数である利用可能コア数を特定し、前記複数のスレッドのいずれかの破棄及び新たなスレッドの生成を検出し、前記破棄又は前記生成が検出されるのに応じて、前記複数のスレッドの数である並列実行スレッド数を特定し、特定された前記利用可能コア数と、特定された前記並列実行スレッド数と、に基づいて、前記複数のコアが前記並列プログラムを実行するバリア同期の方式を決定する。
【００１２】
本発明の一態様に係るプログラムは、コンピュータを、複数のコアのうち、並列に実行することが可能である複数のスレッドによって動作する並列プログラムの実行開始を検出し、前記実行開始が検出されるのに応じて、前記並列プログラムを実行するために使用できる前記コアの数である利用可能コア数を特定するコア数特定手段と、前記複数のスレッドのいずれかの破棄及び新たなスレッドの生成を検出し、前記破棄又は前記生成が検出されるのに応じて、前記複数のスレッドの数である並列実行スレッド数を特定するスレッド数特定手段と、特定された前記利用可能コア数と、特定された前記並列実行スレッド数と、に基づいて、前記複数のコアが前記並列プログラムを実行するバリア同期の方式を決定する決定手段と、して動作させる。
【発明の効果】
【００１３】
本発明には、並列プログラムの実行時間を短縮できるという効果がある。
【図面の簡単な説明】
【００１４】
【図１】図１は、並列に実行されるスレッド数が利用可能なコア数以下の場合における、ビジーウェイト方式による処理時間及びサスペンド・リジューム方式による処理時間の大小関係を模式的に表す図である。
【図２】図２は、利用可能なコア数が並列に実行されるスレッド数より少ない場合における、ビジーウェイト方式による処理時間及びサスペンド・リジューム方式による処理時間の大小関係を模式的に表す図である。
【図３】図３は、本発明の第１及び第２の実施形態に係る情報処理装置１の構成の例を表すブロック図である。
【図４】図４は、本発明の第１及び第２の実施形態の情報処理装置１の動作の例を表すフローチャートである。
【図５】図５は、本発明の第１及び第２の実施形態の情報処理装置１の、コア数特定処理の動作の例を表すフローチャートである。
【図６】図６は、本発明の第１及び第２の実施形態の情報処理装置１の、スレッド数特定処理の動作の例を表すフローチャートである。
【図７】図７は、本発明の第２の実施形態の情報処理装置１の、並列プログラム実行中における動作の例を表すフローチャートである。
【図８】図８は、本発明の第３の実施形態の情報処理装置１Ａの構成の例を表すブロック図である。
【図９】図９は、本発明の各実施形態に係る情報処理装置を実現することができる、コンピュータ１０００のハードウェア構成の一例を表す図である。
【発明を実施するための形態】
【００１５】
本発明の実施形態の説明の前に、本発明の理解を容易にするために、バリア方式の例について説明する。
【００１６】
並列プログラムは、一般に、複数のコアで並列に処理できる部分を含むプログラムである。並列プログラムを実行する場合、並列処理が可能な部分では、例えば複数のスレッドが生成される。そして、それらの複数のスレッドのそれぞれに、例えば複数のコアのいずれかが割り当てられる。複数のスレッドは、それぞれ、割り当てられたコアによって実行される。例えば、そのような並列に処理される複数のスレッドの各々において処理の途中で得られる結果が、その後の複数のスレッドの各々において使用されることがある。そのような場合、複数のスレッド全ての処理の結果が揃うまで、必要な結果を得る処理が終了したスレッドを、処理を進めない状態にしておく必要がある。そのための技術として、バリア同期と呼ばれる技術がある。バリア同期では、例えば、プログラムにバリアと呼ばれる箇所を設定しておき、スレッドにおける処理がバリアに到達した場合、そのスレッドを処理するコアは、全てのスレッドがバリアに到達するまで、そのスレッドの処理を進めない（すなわち待機する）。全てのスレッドによるバリアへの到達の判定は、例えば、カウンタによって行われる。その場合、スレッドがバリアに達した場合、カウンタに１を加算する。カウンタの値が、バリア同期によって動作するスレッドの数に達した場合、全てのスレッドがバリアに達したと判定される。全てのスレッドがバリアに達した場合、停止していた全てのスレッドにおいて処理が再開される。
【００１７】
このように、並列プログラムでは、スレッド間の協調処理を実現するためにバリア同期が用いられる。並列プログラムの性能向上のためには、バリア同期の時間短縮が重要である。
【００１８】
バリア同期の代表的な方式に、ビジーウェイト方式とサスペンド・リジューム方式がある。なお、以下の説明では、スレッドを実行するプロセッサコア（以下、コアと表記する）が行う動作を、そのスレッドが行う動作として表記することがある。また、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）によって制御されるコアが行う動作を、ＯＳが行う動作として説明することもある。
【００１９】
ビジーウェイト方式は、以下のように動作する方式である。ビジーウェイト方式では、スレッド間で共有されたカウンタが用いられる。各スレッドはバリア同期到達時にカウンタを更新する。そして、各スレッドは、他のスレッドがカウンタを更新したのかどうかをループで確認（カウンタ監視）する。各スレッドは、他の全てのスレッドがカウンタを更新したことを確認できたら計算処理を再開する。
【００２０】
サスペンド・リジューム方式は、以下のように動作する方式である。ＯＳは、バリア同期に到達したスレッドを中断（サスペンド）する。そして、ＯＳは、他のスレッドにコアを割り当てる。ＯＳは、全スレッドがバリア同期に到達したら、中断したスレッドを再開（リジューム）させる。
【００２１】
以上の両方式のうち、ビジーウェイト方式は、バリア同期を行うためにＯＳによる処理が必要ない。そのため、ビジーウェイト方式は、サスペンド・リジューム方式より、ＯＳによる処理のオーバーヘッドが小さい。一方、ビジーウェイト方式は、バリア同期に到達したスレッドに、カウンタ監視のためにコアを割り当てる必要がある。
【００２２】
サスペンド・リジューム方式では、バリア同期に到達したスレッドはサスペンドしている。サスペンド・リジューム方式では、各スレッドは、全スレッドがバリア同期に到達したことを確認するためのカウンタ監視を行わない。そのため、サスペンド・リジューム方式は、バリア同期に到達したスレッドに、コアを割り当てる必要がない。一方、サスペンド・リジューム方式は、スレッドの中断及び再開を行うＯＳの処理が必要となる。そのため、サスペンド・リジューム方式は、ビジーウェイト方式より、ＯＳの処理のオーバーヘッドが大きい。
【００２３】
次に、ビジーウェイト方式による処理及びサスペンド・リジューム方式による処理の時間について説明する。
【００２４】
図１と図２は、ビジーウェイト方式による処理時間及びサスペンド・リジューム方式による処理時間の大小関係を模式的に表す図である。図１及び図２において、Ｃ０〜Ｃ３は、例えば、コアの識別子を表す。Ｐ０からＰ３は、スレッドの識別子を表す。
【００２５】
図１は、並列に実行されるスレッド数が利用可能なコア数以下の場合における、ビジーウェイト方式による処理時間及びサスペンド・リジューム方式による処理時間の大小関係を模式的に表す図である。図１に示す例では、利用可能なコア数と、並列に実行されるスレッド数は、共に４である。各スレッドは別々のコアを占有して実行される。この場合、ビジーウェイト方式のカウンタ監視は、スレッドが割り当てられたコアで実行できる。そのため、ＯＳ処理が必要ないビジーウェイト方式の方がサスペンド・リジューム方式よりも短時間で処理が完了する。
【００２６】
図２は、利用可能なコア数が並列に実行されるスレッド数より少ない場合における、ビジーウェイト方式による処理時間及びサスペンド・リジューム方式による処理時間の大小関係を模式的に表す図である。図２に示す例では、利用可能なコア数は１である。並列に実行されるスレッド数は４である。各スレッドは、ＯＳによって順番にコアを割り当てられ、割り当てられたコアによって実行される。たとえば、Ｐ０、Ｐ１がＰ２、Ｐ３よりも早くバリア同期に到達した場合（すなわち、割り当てられたスレッドの処理が完了した場合）を考える。例えば、Ｐ０及びＰ１が割り当てられたスレッドの処理を完了した後、Ｐ２及びＰ３が割り当てられたスレッドの処理を完了していない間、ビジーウェイト方式の場合、計算処理ではなく単なるカウンタ監視のためにＰ０、Ｐ１にコアが割り当てられる。そのため、Ｐ０及びＰ１においてカウンタ監視が行われる時間、Ｐ２、Ｐ３の計算処理が遅延する。その結果、全てのスレッドにおける処理がバリア同期に到達するまでの時間が遅延する。サスペンド・リジューム方式の場合、バリア同期に到達したスレッドにはコアが割り当てられない。そのため、カウンタ監視のためにコアが割り当てられることがない。バリア同期に到達したスレッドに割り当てられていたコアが行うカウンタ監視に時間を割り当てる代わりに、バリア同期に到達していないコアに計算処理を行う時間を割り当てることができる。そのため、サスペンド・リジューム方式に夜処理は、ビジーウェイト方式による処理よりも短時間で完了する。
【００２７】
図１及び図２に示す通り、並列に実行されるスレッド数が利用可能なコア数以下である場合、一般に、ビジーウェイト方式の方が、全てのスレッドがバリア同期に到達するまでの時間が短い。それ以外の場合、一般に、サスペンド・リジューム方式が、全てのスレッドがバリア同期に到達するまでの時間が短い。
【００２８】
次に、本発明の第１の実施の形態について図面を参照して詳細に説明する。
【００２９】
＜第１の実施形態＞
図３は、本実施形態に係る情報処理装置１の構成の例を表すブロック図である。
【００３０】
本実施形態の情報処理装置１は、コア数特定部１１と、スレッド数特定部１２と、決定部１３と、制御部１４と、コア数記憶部１５と、スレッド数記憶部１６とを含む。情報処理装置１は、さらに、複数のコア（コア２１、コア２２、・・・、コア２Ｎ）を含む。複数のコアは、情報処理装置１が備えるプロセッサのコアである。本発明の各実施形態の説明では、プロセッサのコアを単にコアと表記する。情報処理装置１は、例えば、並列プログラムをロードすることができるメモリ（図３において図示されない）や、並列プログラムが格納されている記録媒体等（図３において図示されない）を含んでいればよい。
【００３１】
コア数特定部１１は、例えば並列プログラムが起動するのを検出する。複数のコアのいずれかが、並列プログラムを実行してもよい。複数のコアとは別の制御プロセッサが、並列プログラムを実行してもよい。コア数特定部１１は、並列プログラムを実行するコア又はプロセッサなどから、その並列プロセッサが実行されたことを表す信号を受信することによって、当該並列プログラムが起動するのを検出すればよい。そして、当該並列プログラムが起動したことが検出された場合、コア数特定部１１は、複数のコアのうち、起動した並列プログラムのスレッドを実行できるコアの数である、利用可能コア数を特定する。コア数特定部１１は、例えば、他のプログラムや、ＯＳ等を実行していないコアの数を特定すればよい。コア数を特定する方法として、既存の様々な方法が適用可能である。コア数特定部１１は、特定した利用可能コア数を、コア数記憶部１５に格納する。
【００３２】
コア数記憶部１５は、特定された利用可能コア数を記憶する。
【００３３】
スレッド数特定部１２は、例えば、並列プログラムのスレッドが新たに生成されたこと及び既に生成されているスレッドが廃棄されたことの少なくともいずれかを検出すればよい。そして、スレッド数特定部１２は、例えば、並列プログラムのスレッドが生成されたこと及び廃棄されたことの少なくともいずれかを検出した場合、並列に実行することができるスレッド数を特定すればよい。スレッド数特定部１２が並列プログラムのスレッドが生成されたこと及び廃棄されたことを検出する方法として、既存の様々な方法が適用可能である。例えば、スレッド数特定部１２は、並列プログラムを実行し、その並列プログラムを実行する過程においてスレッドを生成及び廃棄する、コアやプロセッサ等から、スレッドが生成されたこと及び廃棄されたことを表す信号を受信すればよい。そして、スレッド数特定部１２は、そのような信号を受信することによって、並列プログラムのスレッドが生成されたこと及び廃棄されたことを検出すればよい。スレッド数特定部１２が並列プログラムのスレッド数を特定する方法として、既存の任意の方法を適用することができる。スレッド数特定部１２は、例えば、並列プログラムを実行し、スレッドを生成し廃棄する、コアやプロセッサなどから、並列に実行することができるスレッド数を受信すればよい。スレッド数特定部１２は、特定した、並列に実行できるスレッド数である、並列実行スレッド数を、スレッド数記憶部１６に格納する。
【００３４】
スレッド数記憶部１６は、並列プログラムの並列実行スレッド数を記憶する。
【００３５】
決定部１３は、特定された利用可能コア数と、特定された並列実行スレッド数とを比較する。特定された利用可能コア数は、例えば、コア数記憶部１５に格納されている。並列実行スレッド数は、例えば、スレッド数記憶部１６に格納されている。並列可能スレッド数が利用可能コア数以下である場合、決定部１３は、バリア同期の方式に、ビジーウェイト方式を決定する。並列可能スレッド数が利用可能コア数より大きい場合、決定部１３は、バリア同期の方式に、サスペンド・リジューム方式を選択する。
【００３６】
制御部１４は、決定されたバリア同期の方式で、並列プログラムの各スレッドのバリア同期を実行するよう、並列プログラムのスレッドを実行するコアを制御する。制御部１４がコアを制御する方法として、既存の様々な方法が適用可能である。例えば、制御部１４は、並列プログラムを実行するコア又はプロセッサに対して、決定されたバリア同期の方式にあらかじめ関連付けられている信号を送信すればよい。そのような信号を受信したコア又はプロセッサは、受信した信号が表すバリア同期の方式に従ってスレッドを実行する指示を、並列プログラムによって生成されたスレッドを実行する複数のコアに送信すればよい。そして、並列プログラムを実行するコア又はプロセッサは、生成したスレッドにコアを割り当て、スレッドが割り当てられたコアに、受信した信号が表すバリア同期の方式に従ってそのスレッドを実行させればよい。
【００３７】
なお、例えば、並列プログラムを実行するコア又はプロセッサが、さらに、コア数特定部１１、スレッド数特定部１２、決定部１３、制御部１４、コア数記憶部１５、及びスレッド数記憶部１６として動作してもよい。並列プログラムを実行するコア又はプロセッサとは別の、コア、プロセッサ、又は専用の回路が、コア数特定部１１、スレッド数特定部１２、決定部１３、制御部１４、コア数記憶部１５、及びスレッド数記憶部１６として動作してもよい。
【００３８】
次に、本実施形態の情報処理装置１の動作について、図面を参照して詳細に説明する。
【００３９】
図４は、本実施形態の情報処理装置１の動作の例を表すフローチャートである。
【００４０】
図４を参照すると、まず、コア数特定部１１が、コア数特定処理を実行する（ステップＳ１０１）。まず、本実施形態の情報処理装置１の、コア数特定処理の動作について、詳細に説明する。
【００４１】
図５は、本実施形態の情報処理装置１の、コア数特定処理の動作の例を表すフローチャートである。
【００４２】
図５を参照すると、コア数特定部１１は、並列プログラムが実行されたか否かを検出する（ステップＳ２０１）。並列プログラムの実行が検出されない場合（ステップＳ２０２においてＮｏ）、コア数特定部１１は、並列プログラムが実行されたか否かを検出することを継続する（ステップＳ２０１）。並列プログラムの実行が検出された場合（ステップＳ２０２においてＹｅｓ）、コア数特定部１１は、並列プログラムの実行に利用することができるコア数である、利用可能コア数を特定する（ステップＳ２０３）。コア数特定部１１は、特定した利用可能コア数を、コア数記憶部１５に格納し（ステップＳ２０３）、情報処理装置１は、図５に示す動作を終了する。
【００４３】
次に、スレッド数特定部１２が、スレッド数特定処理を実行する（ステップＳ１０２）。次に、本実施形態の情報処理装置１の、スレッド数特定処理の動作について、詳細に説明する。
【００４４】
図６は、本実施形態の情報処理装置１の、スレッド数特定処理の動作の例を表すフローチャートである。
【００４５】
図６を参照すると、スレッド数特定部１２は、並列に実行されるスレッドの生成及び廃棄を検出する（ステップＳ３０１）。並列に実行されるスレッドの生成及び廃棄が検出されない場合（ステップＳ３０２においてＮｏ）、スレッド数特定部１２は、並列に実行されるスレッドの生成及び廃棄の検出を継続する（ステップＳ３０１）。並列に実行されるスレッドの生成又は廃棄が検出された場合（ステップＳ３０２においてＹｅｓ）、スレッド数特定部１２は、並列に実行されるスレッドの数を特定する（ステップＳ３０３）。スレッド数特定部１２は、特定したスレッドの数を、スレッド数記憶部１６に格納し、（ステップＳ３０４）情報処理装置１は、図６に示す動作を終了する。
【００４６】
次に、決定部１３は、ステップＳ１０１において特定された利用可能コア数と、ステップＳ１０２において特定された並列可能スレッド数とを比較する（ステップＳ１０３）。
【００４７】
並列可能スレッド数が利用可能コア数以下である場合（ステップＳ１０４においてＹｅｓ）、決定部１３は、バリア同期の方式として、ビジーウェイト方式を決定する（ステップＳ１０５）。すなわち、決定部１３は、並列プログラムのスレッドにおけるバリア同期方式を、ビジーウェイト方式に決定する。
【００４８】
並列可能スレッド数が利用可能コア数より大きい場合（ステップＳ１０４においてＮｏ）、決定部１３は、バリア同期の方式として、サスペンド・リジューム方式を決定する（ステップＳ１０６）。すなわち、決定部１３は、並列プログラムのスレッドにおけるバリア同期方式を、サスペンド・リジューム方式に決定する。
【００４９】
制御部１４は、決定したバリア同期の方式で動作する指示を、並列プログラムのスレッドを実行するコアに送信する（ステップＳ１０７）。
【００５０】
以上で説明した本実施形態には、並列プログラムの実行時間を短縮できるという効果がある。その理由は、並列可能スレッド数が利用可能コア数以下である場合、決定部１３が、バリア同期の方式として、ビジーウェイト方式を決定するからである。そして、並列可能スレッド数が利用可能コア数より大きい場合、決定部１３は、バリア同期の方式として、サスペンド・リジューム方式を決定するからである。以上で説明したように、並列可能スレッド数が利用可能コア数以下である場合、一般に、サスペンド・リジューム方式による処理より、ビジーウェイト方式による処理の方が高速である。また、並列可能スレッド数が利用可能コア数より大きい場合、ビジーウェイト方式による処理より、サスペンド・リジューム方式による処理の方が高速である。すなわち、決定部１３は、高速に実行される方式を選択することができる。また、コア数特定部１１は、並列プログラムの実行開始を検出し、その実行開始が検出されるのに応じて、利用可能コア数を特定する。さらに、スレッド数特定部１２は、スレッドの生成及び破棄を検出し、スレッドの生成又は破棄が検出された場合、並列実行スレッド数を特定する。決定部１３は、このように特定された並列実行スレッド数及び利用可能コア数を使用して、バリア同期の方式を決定する。従って、複数のコアは、並列プログラムの起動後すぐに、適したバリア同期の方式で動作することができる。
【００５１】
＜第２の実施形態＞
次に、本発明の第２の実施形態について図面を参照して詳細に説明する。本実施形態は、上述した第１の実施形態を基本とする実施形態である。
【００５２】
図３は、本実施形態に係る情報処理装置１の構成の例を表すブロック図である。本実施形態の情報処理装置１の構成は、第１の実施形態の情報処理装置１の構成と同じである。本実施形態の情報処理装置１と、第１の実施形態の情報処理装置１は、以下に示す事項を除き、同じである。
【００５３】
本実施形態では、コア数特定部１１は、さらに、バリア同期の開始を検出し、バリア同期の開始が検出されるのに応じて、利用可能コア数を特定する。また、スレッド数特定部１２は、バリア同期の開始を検出し、バリア同期の開始が検出されるのに応じて、並列実行スレッド数を特定する。バリア同期の開始は、例えば、並列に実行される複数のスレッドのいずれかが割り当てられたコアの各々が、割り当てられたスレッドの、バリア同期を行う処理を開始することである。なお、コア数特定部１１及びスレッド数特定部１２の双方ではなく、コア数特定部１１及びスレッド数特定部１２のいずれかが、バリア同期の開始を検出してもよい。バリア同期の開始の検出方法として、既存のさまざまな方法が適用可能である。例えば、並列プログラムが、バリア同期の開始を通知するよう実装されていればよい。そして、並列プログラムを実行するコア又は制御プロセッサ等が、バリア同期を開始する際、コア数特定部１１及びスレッド数特定部１２の少なくともいずれかに、バリア同期の開始を表す信号を送信すればよい。コア数特定部１１及びスレッド数特定部１２の一方の部のみにバリア同期の開始を表す信号が送信される場合、その信号を受信した部は、他方の部に、バリア同期の開始を表す信号を転送すればよい。コア数特定部１１及びスレッド数特定部１２は、バリア同期の開始を表す信号を受信した場合、バリア同期が開始されたことを検出すればよい。
【００５４】
次に、本実施形態の情報処理装置１の動作について説明する。本実施形態の情報処理装置１の、並列プログラム実行開始時における動作は、図４、図５、及び図６に示す、第１の実施形態の情報処理装置１の動作と同じである。従って、その動作の説明を省略する。
【００５５】
次に、本実施形態の情報処理装置１の、並列プログラム実行中における動作について、図面を参照して詳細に説明する。
【００５６】
図７は、本実施形態の情報処理装置１の、並列プログラム実行中における動作の例を表すフローチャートである。
【００５７】
図７を参照すると、まず、例えばコア数特定部１１が、バリア同期の開始を検出する（ステップＳ４０１）。スレッド数特定部１２が、バリア同期の開始を検出してもよい。コア数特定部１１及びスレッド数特定部１２が、バリア同期の開始を検出してもよい。バリア同期の開始が検出されない場合（ステップＳ４０２においてＮｏ）、ステップＳ４０１の動作が継続される。バリア同期の開始が検出された場合（ステップＳ４０２においてＹｅｓ）、情報処理装置１は、図７においてステップＳ４０２の後に示すステップにおける、利用可能コア数の特定、並列実行スレッド数の特定、バリア同期の放棄の決定などの処理を行う。これらのステップにおける動作は、同じ符号が付与された、図４、図５、又は図６に示すステップの動作と同じであるので、説明を省略する。
【００５８】
以上で説明した本実施形態には、第１の実施形態と同じ効果がある。その理由は、第１の実施形態の効果が生じる理由と同じである。
【００５９】
本実施形態には、さらに、並列プログラムが実行されている間に、利用可能コア数や並列実行スレッド数が変化した場合であっても、並列プログラムの実行時間を短縮できるという効果がある。その理由は、決定部１３が、バリア同期の開始が検出されるのに応じて特定された、利用可能コア数及び並列実行スレッド数を使用して、バリア同期の方式を選択するからである。従って、本実施形態の情報処理装置１は、利用可能コア数や並列実行スレッド数が変化した場合であっても、適したバリア同期の方式を選択することができるので、並列プログラムの実行時間を短縮できる。
【００６０】
＜第３の実施形態＞
次に、本発明の第３の実施形態について、図面を参照して詳細に説明する。本実施形態は、上述した各実施形態に共通する概念を表す実施形態である。
【００６１】
図８は、本実施形態の情報処理装置１Ａの構成の例を表すブロック図である。
【００６２】
図８を参照すると、本実施形態の情報処理装置１Ａは、複数のコアのうち、並列に実行することが可能である複数のスレッドによって動作する並列プログラムの実行開始を検出し、前記実行開始が検出されるのに応じて、前記並列プログラムを実行するために使用できる前記コアの数である利用可能コア数を特定するコア数特定部１１と、前記複数のスレッドのいずれかの破棄及び新たなスレッドの生成を検出し、前記破棄又は前記生成が検出されるのに応じて、前記複数のスレッドの数である並列実行スレッド数を特定するスレッド数特定部１２と、特定された前記利用可能コア数と、特定された前記並列実行スレッド数と、に基づいて、前記複数のコアが前記並列プログラムを実行するバリア同期の方式を決定する決定部１３と、を備える。
【００６３】
以上で説明した本実施形態には、第１の実施形態と同じ効果がある。その理由は、第１の実施形態の効果が生じる理由と同じである。
【００６４】
以上で説明した本発明の各実施形態では、スレッドではなく、並列に指定されたバリア同期の方式に基づいて動作することができるプロセスが、各コアに割り当てられていてもよい。その場合、スレッド数特定部１２は、並列に実行されるプロセス数を、並列実行スレッド数として特定してもよい。
【００６５】
＜他の実施形態＞
情報処理装置１、及び情報処理装置１Ａは、それぞれ、コンピュータ及びコンピュータを制御するプログラム、専用のハードウェア、又は、コンピュータ及びコンピュータを制御するプログラムと専用のハードウェアの組合せにより実現することができる。
【００６６】
図９は、情報処理装置１、及び情報処理装置１Ａを実現することができる、コンピュータ１０００のハードウェア構成の一例を表す図である。図９を参照すると、コンピュータ１０００は、プロセッサ１００１と、メモリ１００２と、記憶装置１００３と、Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）インタフェース１００４とを含む。また、コンピュータ１０００は、記録媒体１００５にアクセスすることができる。メモリ１００２と記憶装置１００３は、例えば、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ハードディスクなどの記憶装置である。記録媒体１００５は、例えば、ＲＡＭ、ハードディスクなどの記憶装置、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、可搬記録媒体である。記憶装置１００３が記録媒体１００５であってもよい。プロセッサ１００１は、メモリ１００２と、記憶装置１００３に対して、データやプログラムの読み出しと書き込みを行うことができる。プロセッサ１００１は、Ｉ／Ｏインタフェース１００４を介して、例えば、情報処理装置１等に接続されている端末装置など（図示されない）にアクセスすることができる。プロセッサ１００１は、記録媒体１００５にアクセスすることができる。記録媒体１００５には、コンピュータ１０００を、情報処理装置１、又は情報処理装置１Ａとして動作させるプログラムが格納されている。
【００６７】
プロセッサ１００１は、記録媒体１００５に格納されている、コンピュータ１０００を、情報処理装置１、又は情報処理装置１Ａとして動作させるプログラムを、メモリ１００２にロードする。そして、プロセッサ１００１が、メモリ１００２にロードされたプログラムを実行することにより、コンピュータ１０００は、情報処理装置１、又は情報処理装置１Ａとして動作する。
【００６８】
コア数特定部１１、スレッド数特定部１２、決定部１３、及び制御部１４は、例えば、プログラムを記憶する記録媒体１００５からメモリ１００２に読み込まれた、各部の機能を実現することができる専用のプログラムと、そのプログラムを実行するプロセッサ１００１により実現することができる。また、コア数記憶部１５、及びスレッド数記憶部１６は、コンピュータ１０００が含むメモリ１００２やハードディスク装置等の記憶装置１００３により実現することができる。あるいは、コア数特定部１１、スレッド数特定部１２、決定部１３、制御部１４、コア数記憶部１５、及びスレッド数記憶部１６の一部又は全部を、各部の機能を実現する専用の回路によって実現することもできる。
【００６９】
以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【００７０】
１    情報処理装置
１Ａ    情報処理装置
１１    コア数特定部
１２    スレッド数特定部
１３    決定部
１４    制御部
１５    コア数記憶部
１６    スレッド数記憶部
２１    コア
２２    コア
２Ｎ    コア
１０００    コンピュータ
１００１    プロセッサ
１００２    メモリ
１００３    記憶装置
１００４    Ｉ／Ｏインタフェース
１００５    記録媒体
【図１】
0006442947.tif 000002
【図２】
0006442947.tif 000003
【図３】
0006442947.tif 000004
【図４】
0006442947.tif 000005
【図５】
0006442947.tif 000006
【図６】
0006442947.tif 000007
【図７】
0006442947.tif 000008
【図８】
0006442947.tif 000009
【図９】
0006442947.tif 000010