(57)【要約】      （修正有）【課題】並列化が可能な処理を含むプログラムの実行に使用するコア数をより好適なコア数に調整する情報処理装置を提供する。【解決手段】複数の演算処理部を有する演算処理装置と、演算処理装置が実行するプログラムの所定部分の演算量をプログラムの実行前に推定する推定部と、推定された演算量と、プログラムの所定部分の処理とを並列化する基準値とに基づいて、プログラムの所定部分を実行する演算処理部の数である演算処理部数を決定する決定部と、決定された演算処理部数でプログラムの所定部分を実行した場合の演算量と基準値とに基づいて、プログラムの所定部分を実行する演算処理部数を調整する調整部と、を備える。【選択図】図３
2016118882.tif 000002
【特許請求の範囲】
【請求項１】
複数の演算処理部を有する演算処理装置と、
前記演算処理装置が実行するプログラムの所定部分の演算量を前記プログラムの実行前に推定する推定部と、
推定された前記演算量と、前記プログラムの所定部分の処理とを並列化する基準値とに基づいて、前記プログラムの前記所定部分を実行する演算処理部の数である演算処理部数を決定する決定部と、
決定された前記演算処理部数で前記プログラムの所定部分を実行した場合の演算量と前記基準値とに基づいて、前記プログラムの所定部分を実行する演算処理部数を調整する調整部と、
を備える情報処理装置。
【請求項２】
前記推定部は、前記プログラムの所定部分に複数の実行パスが含まれる場合、前記複数の実行パスのうち演算量がより少ない実行パスに基づいて前記プログラムの所定部分の演算量を推定する、請求項１に記載の情報処理装置。
【請求項３】
前記演算処理装置はさらに、
前記演算処理装置の１つの演算処理部あたりの処理の粒度と前記所定部分の並列実行における処理負荷とに基づいて前記基準値を算出する算出部を有する、請求項１または請求項２に記載の情報処理装置。
【請求項４】
複数の演算処理部を有する演算処理装置を有する情報処理装置の制御方法において、
前記情報処理装置が有する推定部が、前記演算処理装置が実行するプログラムの所定部分の演算量を前記プログラムの実行前に推定し、
前記情報処理装置が有する決定部が、推定された前記演算量と、前記プログラムの所定部分の処理とを並列化する基準値とに基づいて、前記プログラムの前記所定部分を実行する演算処理部の数である演算処理部数を決定し、
前記情報処理装置が有する調整部が、決定された前記演算処理部数で前記プログラムの所定部分を実行した場合の演算量と前記基準値とに基づいて、前記プログラムの所定部分を実行する演算処理部数を調整する情報処理装置の制御方法。
【請求項５】
複数の演算処理部を有する演算処理装置を有する情報処理装置の制御プログラムにおいて、
前記情報処理装置が有する推定部に、前記演算処理装置が実行するプログラムの所定部分の演算量を前記プログラムの実行前に推定させ、
前記情報処理装置が有する決定部に、推定された前記演算量と、前記プログラムの所定部分の処理とを並列化する基準値とに基づいて、前記プログラムの前記所定部分を実行する演算処理部の数である演算処理部数を決定させ、
前記情報処理装置が有する調整部に、決定された前記演算処理部数で前記プログラムの所定部分を実行した場合の演算量と前記基準値とに基づいて、前記プログラムの所定部分を実行する演算処理部数を調整させる情報処理装置の制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本件開示の発明は、プログラムに係る情報処理装置、情報処理装置の制御方法および情報処理装置の制御プログラムに関する。
【背景技術】
【０００２】
近年、プログラムを複数のプロセッサコアで実行するいわゆるマルチコアプロセッサと呼ばれるＣＰＵ（Central Processing Unit）が実用に供されている。そして、マルチコ
アプロセッサのプロセッサコア数をさらに増やしたいわゆるメニーコアプロセッサと呼ばれるＣＰＵによってプログラムを実行する場合、マルチコアプロセッサで実行する場合よりも多くのプロセッサコア数を用いることが想定される。
【０００３】
そして、プログラムを複数のプロセッサコアで並列実行する際に、プログラム実行に先立ってプログラムの実行時間を推定したり、トランザクション量やプロセッサの種別を特定したりすることで、プログラム実行に使用するプロセッサコア数を決定する技術がある。また、プログラム実行前のいわゆる静的な解析によって得られるプログラム内のタスク、関数、ループ等の情報をマルチコアプロセッサのチューニングに利用する技術がある（以上、特許文献１〜５を参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１２−１４５９８７号公報
【特許文献２】国際公開第２０１０／００１７６６号
【特許文献３】特開２００７−２６４７３４号公報
【特許文献４】特開２０１１−１３７１６号公報
【特許文献５】特開平１１−３９１５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、例えばプログラム中の繰り返し処理の回数やｉｆ文の実行における条件の真偽等は、実際にプログラムを実行するまでは不確定であるため、コンパイラによるプログラム実行前の解析だけでは、プログラムを実行するプロセッサコア数を適切に決定できるとは言い難い。
【０００６】
本件開示の技術は、上記の事情に鑑み、並列化が可能な処理を含むプログラムの実行に使用するプロセッサコア数をより好適なプロセッサコア数に調整することが可能な情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本件開示の情報処理装置は、１つの側面では、複数の演算処理部を有する演算処理装置と、演算処理装置が実行するプログラムの所定部分の演算量をプログラムの実行前に推定する推定部と、推定された演算量と、プログラムの所定部分の処理とを並列化する基準値とに基づいて、プログラムの所定部分を実行する演算処理部の数である演算処理部数を決定する決定部と、決定された演算処理部数でプログラムの所定部分を実行した場合の演算量と基準値とに基づいて、プログラムの所定部分を実行する演算処理部数を調整する調整部とを備える。
【発明の効果】
【０００８】
本件開示の技術によれば、並列化が可能な処理を含むプログラムの実行に使用するプロセッサコア数をより好適なプロセッサコア数に調整することが可能な情報処理装置を提供することができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、一実施形態におけるノードの構成を示す概略構成図である。
【図２】図２は、一実施形態におけるノードの機能ブロック図である。
【図３】図３は、一実施形態における並列プログラムの処理とプロセッサコア数の関係を示す模式図である。
【図４】図４は、一実施形態におけるノードが実行する処理のフローチャートである。
【図５】図５は、一実施例における並列プログラムの一部分を示す図である。
【発明を実施するための形態】
【００１０】
まず、一実施形態における情報処理装置について図面を参照しながら説明する。本実施形態では、情報処理装置の一例として図１に示すノード１を用いて説明する。なお、以下の説明は例示にすぎず、特許請求の範囲を限定するものではない。
【００１１】
図１に示すように、本実施形態に係るノード１は、複数の演算処理部としてのプロセッサコア（以下、単に「コア」と称する）をそれぞれ有する２つの演算処理装置としてのＣＰＵ１０、１００を備える。ＣＰＵ１０は、記憶装置としてのメモリ１１、キャッシュメモリ（以下、単に「キャッシュ」と称する）としての共有Ｌ３キャッシュ１２、４つのＬ１キャッシュ／Ｌ２キャッシュ１３〜１６、４つのコア１７〜２０を備える。メモリ１１は共有Ｌ３キャッシュ１２と接続されている。共有Ｌ３キャッシュ１２は、各Ｌ１キャッシュ／Ｌ２キャッシュ１３〜１６と接続されている。Ｌ１キャッシュ／Ｌ２キャッシュ１３〜１６は、それぞれコア１７〜２０と接続されている。また、チップ１００は、メモリ１０１、共有Ｌ３キャッシュ１０２、４つのＬ１キャッシュ／Ｌ２キャッシュ１０３〜１０６、４つのコア１０７〜１１０を備える。なお、図１に示すように、ＣＰＵ１００の接続構成はＣＰＵ１０と同じである。
【００１２】
ＣＰＵ１０では、コア１７〜２０の処理に使用されるデータが、メモリ１１から共有Ｌ３キャッシュ１２に保持され、各コア１７〜２０は、処理に使用するデータをＬ１キャッシュ／Ｌ２キャッシュ１３〜１６にそれぞれ記憶する。Ｌ１キャッシュ／Ｌ２キャッシュ１３〜１６のＬ１キャッシュは、接続されているコア１７〜２０からアクセスされるキャッシュメモリであり、Ｌ１〜共有Ｌ３キャッシュのなかでは最もアクセス速度が速いキャッシュメモリである。演算ユニットへの命令を格納するＬ１−Ｉ（instruction）キャッ
シュとデータを格納するＬ１−Ｄ（data）キャッシュの２つが搭載されており、プログラムとデータで干渉しないようになっている。
【００１３】
Ｌ１キャッシュ／Ｌ２キャッシュ１３〜１６のＬ２キャッシュは、Ｌ１−Ｄキャッシュに使用するデータがない場合に次にアクセスされるキャッシュメモリである。Ｌ２キャッシュはＬ１キャッシュよりも容量が大きい一方で、Ｌ２キャッシュへのアクセス速度はＬ１キャッシュへのアクセス速度に比べて遅くなる。共有Ｌ３キャッシュは、Ｌ２キャッシュにも使用するデータがない場合に次にアクセスされるキャッシュメモリである。共有Ｌ３キャッシュはＬ２キャッシュよりも容量が大きく、共有Ｌ３キャッシュへのアクセス速度はＬ２キャッシュへのアクセス速度に比べて遅くなる。ただし、共有Ｌ３キャッシュは、各コア１７〜２０に接続されているＬ１キャッシュ／Ｌ２キャッシュ１３〜１６とは異なり、コア１７〜２０全体で共有しているキャッシュである。したがって、コア１７〜２０により共有されるデータが共有Ｌ３キャッシュに格納されることで、１つのプログラム
を複数のコアで処理する、いわゆるマルチスレッド処理が実現され、この結果、プログラムの処理が高速化される。
【００１４】
本実施形態では、ノード１が例えばＣＰＵ１０を用いてＨＤＤ（Hard Disk Drive；図
示せず）などに記憶された各種プログラムをメモリ１１に展開して実行することで、図２に示すように、推定部３０１、決定部３０２、調整部３０３、算出部３０４として機能する。推定部３０１は、ＣＰＵ１０により実行されるプログラムの所定部分の演算量をプログラムの実行前に推定する。また、決定部３０２は、推定された演算量と所定部分の処理を並列化するための基準値とに基づいて、プログラムの所定部分を実行するコア数を決定する。調整部３０３は、決定部３０２によって決定されたコア数でプログラムの所定部分を実行したときの演算量と上記の基準値とに基づいて、プログラムの当該部分を実行するコア数を調整する。算出部３０４は、プロセッサの１コアあたりの処理の粒度とプログラムの所定部分の並列実行における処理負荷とに基づいて上記の基準値を算出する。
【００１５】
次に、図３を参照しながら、本実施形態に係る並列プログラムの処理の概略について説明する。以下の説明では、一例として、並列プログラムにおける処理がｎ個の部分１〜ｎに分かれているとする。各部分は、一般に、ループ、あるいは、並列実行可能な複数個の関数を含む。すなわち、各部分には、いわゆるループ並列性や関数間並列性が存在する。ここでは、これらのループ並列性や関数間並列性を総称して理論的並列性と称し、部分ｉの理論的並列性の度合いを示す値Ｐｉを以下の式（１）で表す。なお、本実施形態においてＰｉは自然数である。なお、値Ｐｉが、並列プログラムの所定部分の処理を並列化するための基準値の一例である。
【数１】
2016118882.tif 000003
【００１６】
ここで、上記並列プログラムの処理について、プロセッサの１コアあたりの処理の粒度（granularity）を考える。この粒度とは、並列プログラムにおける処理の並列化の度合
いを、処理実行時の計算時間や演算量の観点から評価する指標である。粒度が粗くなればなるほど、並列プログラムの実行における実行時間、すなわち計算時間、通信時間、同期待ち時間の合計時間が長くなるが、処理が細分化されないため並列化の効率は良くなる。また、粒度が細かくなればなるほど、並列プログラムの実行にかかる実行時間は短くなるが、処理が細分化されるため並列化の効率は悪くなる。なお、並列化の効率とは、例えば、並列化のための準備の処理などの並列化に伴って発生する処理を含む処理全体の処理時間に対する、並列プログラムの実行時間の割合と考えることができる。
【００１７】
そして、上記の粒度と理論的並列性の度合いを示す値Ｐｉとの関係について、並列プログラムの処理においては、並列実行に伴って発生する処理、すなわちオーバーヘッドの影響よりも処理を並列化することで得られる演算の効率化の効果が上回るだけの粗い粒度が設定される。そして、並列プログラムにおける部分ｉを並列実行する場合の実効的な並列性の度合いを示す値Ｐｉｅｆｆを以下の式（２）で表す。なお、本実施形態においてＰｉｅｆｆは自然数である。
【数２】
2016118882.tif 000004
【００１８】
このとき、実効的な並列性の度合いを示す値Ｐｉｅｆｆは、理論的並列性の度合いを示す値Ｐｉ以下となる。すなわち、以下の式（３）のように表すことができる。
【数３】
2016118882.tif 000005
【００１９】
本実施形態では、ノード１は、並列プログラムの部分ｉにおけるＰｉ個の並列化可能なタスクをＰｉｅｆｆ個の並列タスクとしてまとめ、Ｐｉｅｆｆ個のコアを用いて各コアに並列タスクを１つずつ並列実行させる。図３に示すように、プログラムの部分１を実行するコア数をＰ１ｅｆｆ（＝ｋ）、プログラムの部分２を実行するコア数をＰ２ｅｆｆ（＝ｍ）、プログラムの部分ｎを実行するコア数をＰｎｅｆｆとする。
【００２０】
ここで、指標Ｐｉｅｆｆの各値のうち、最大の値Ｐｍａｘｅｆｆを以下の式（４）で表す。
【数４】
2016118882.tif 000006
【００２１】
本実施形態において並列プログラムを実行するＣＰＵのコア数をＮｃｏｒｅとすると、例えばＮｃｏｒｅ＝１００〜５００のいわゆるメニーコアプロセッサでは、下記の式（５）が成り立つと考えられる。
【数５】
2016118882.tif 000007
【００２２】
すなわち、並列プログラムの各部分の処理において、使用コア数の理論値は実際のＣＰＵのコア数以下となる。したがって、並列プログラムの実行時にコア数が不足する現象が発生する可能性は低いと考えられる。この点を踏まえると、並列プログラムの各部分の処理をＰｉｅｆｆ個のコアを使用して実行するよう規定されているコードが、コア数の観点から並列プログラムにとって適切なコードであると言える。
【００２３】
本実施形態では、ノード１は、並列プログラムの記述言語（Ｃ、Ｃ＋＋、Ｊａｖａ（登録商標）、Ｓｃａｌａなど）のコンパイラが備える依存解析ルーチンを使用して、並列プログラムの実際の実行前に、並列プログラムの各部分ｉ（１≦ｉ≦ｎ）の理論的並列性の指標の値Ｐｉを求めておく。本実施形態で使用する依存解析ルーチンは、並列プログラムの各部分内におけるループ処理の回数、依存関係のない命令行数などの情報を取得し、取得した情報に基づいて上記のＰｉの値を算出する。
【００２４】
並列プログラムの処理においては、スレッドの生成および消滅、あるいは、バリア同期などの並列化などが原因で発生するオーバーヘッドが存在する。このため、並列プログラムの処理を分担するコア数が多すぎて１コアあたりの演算量が少なくなりすぎると、各コアの処理負荷は抑えることができても、全体の処理時間は長くなってしまう。すなわち、並列プログラムの処理における粒度が細かくなりすぎると、並列プログラムの処理時間が長くなってしまう。
【００２５】
本実施形態では、コンパイラは、算出したＰｉの値を、部分ｉにおける理論的に並列処理可能なタスク数とみなし、実効的な並列性の度合いを示す指標Ｐｉｅｆｆの値を算出する。ここで、実効的な並列性の度合いとは、例えば、上記の粒度を踏まえてＰｉ個のタスクを並列化する際の好適な並列タスクの数である。さらに、コンパイラは、算出したＰｉｅｆｆの値を部分ｉの処理を実行するコア数とみなし、部分ｉの処理をＰｉｅｆｆ個のコアで実行するバイナリプログラムであるいわゆる並列化コードを生成する。
【００２６】
以下に、本実施形態において並列プログラムの部分ｉの処理を実行する際に使用されるコア数の決定および調整方法について説明する。図４に、本実施形態において、ノード１が実行する処理のフローチャートを示す。
【００２７】
ＯＰ１０１において、ノード１は、並列プログラムを実行する際の粒度の値を決定する。本実施形態では、粒度を細かくしていった場合に並列プログラムの処理時間が長くならない粒度の上限値を閾値Ｌｔｈｒｅｓとする。なお、閾値Ｌｔｈｒｅｓの値は実行環境によって異なる。したがって、本実施形態では、ノード１が、あらかじめテストプログラムを実行することにより、Ｌｔｈｒｅｓの値を決定しておく。このテストプログラムは、実行対象の並列プログラムの部分ｉのうちいずれかの１部分を実行するプログラムである。ノード１は、コア数を変更しながらテストプログラムを繰り返し実行し、テストプログラムを実行する好適な粒度である閾値Ｌｔｈｒｅｓの値を決定する。ノード１は、部分ｉに対して閾値Ｌｔｈｒｅｓの値を決定すると、処理をＯＰ１０２に進める。
【００２８】
ＯＰ１０２では、ノード１は、並列プログラムの部分ｉの演算量を静的に推定する。すなわち、ノード１は、並列プログラムのコンパイル時に、プログラムの部分ｉごとの演算量を算出する。本実施形態において、部分ｉにおける演算量とは、例えば、並列プログラムのソースコードの処理時間やオブジェクトコード内の部分ｉにおける実行命令数などが挙げられる。ＯＰ１０２において、ノード１によって算出される部分ｉの演算量の静的な推定値をＬｉ（０）とする。
【００２９】
また、部分ｉ内に条件分岐などが存在することで、部分ｉ内の実行パスのうちいずれのパスが選択されて実行されるかによって、推定される演算量が異なる場合が想定される。本実施形態では、ノード１は、コンパイル時に選択される実行パスを特定できないときは、演算量が少なくなる実行パスが選択されて実行されるとみなし、部分ｉの演算量を推定する。次いで、ノード１は、処理をＯＰ１０３に進める。
【００３０】
ＯＰ１０３では、ノード１は、部分ｉにおけるループ処理数や依存関係のない命令行数などに基づき、理論的に並列処理可能なタスク数の値Ｐｉを算出する。次いで、処理はＯＰ１０４に進められる。そして、ＯＰ１０４において、ノード１は、上記の閾値Ｌｔｈｒｅｓおよび算出した推定値Ｌｉ（０）を用いて以下の式（６）に示す評価値ｍｉ（０）を算出する。ここで、式（６）からわかるように、評価値ｍｉ（０）は、推定される部分ｉの演算量を１コアあたりの演算量で除算した値である。
【数６】
2016118882.tif 000008
【００３１】
本実施形態では、ＣＰＵのコア数が整数であること、および、並列プログラムの部分ｉの理論的並列性の指標Ｐｉの値よりも小さい値のコア数で部分ｉの処理を実行する。この
ことを踏まえ、ＯＰ１０５において、ノード１は、以下の式（７）によって、部分ｉの処理に割り当てられるコア数Ｎｉ（０）を算出する。
【数７】
2016118882.tif 000009
ここで以下の値
【数８】
2016118882.tif 000010
は、ｍｉ（０）を超えない整数を表す。したがって、式（７）により、部分ｉの処理に割り当てられるコア数Ｎｉ（０）は、１あるいはＰｉを超えない数として算出される。
【００３２】
式（７）からわかるように、本実施形態においては、ＯＰ１０４において算出される演算量の推定値が１コアあたりの演算量の２．０倍を超えない間は、部分ｉの処理を実行するコア数が１に決定される。そして、ＯＰ１０４において算出される演算量の推定値が１コアあたりの演算量の２．０倍以上となる場合は、部分ｉの処理を実行するコア数が、当該推定値の増加に合わせて、Ｐｉを超えない値に決定される。
【００３３】
このため、本実施形態において、部分ｉの処理の実行に割り付けられるＣＰＵのコア数は、理論的並列性に基づいて決定されるコア数以下になるように、すなわち、式（３）を満たすように決定されることがわかる。
【００３４】
さらに、ＯＰ１０６において、ノード１は、ＯＰ１０５において決定されるコア数を使用して部分ｉを実行し、実行結果に基づいて実行時の演算量Ｌｉ（１）を算出する。そして、ＯＰ１０７において、ノード１は、ＯＰ１０４と同様に、上記の閾値ＬｔｈｒｅｓおよびＯＰ１０６において算出した演算量Ｌｉ（１）を用いて以下の式（８）に示す評価値ｍｉ（１）を算出する。
【数９】
2016118882.tif 000011
【００３５】
次に、ＯＰ１０７において、ＯＰ１０５と同様に、ノード１は、以下の式（９）によって、並列プログラムの部分ｉの処理に割り当てるコア数Ｎｉ（１）を算出する。
【数１０】
2016118882.tif 000012
なお、式（８）、（９）は、それぞれ式（６）、（７）と同様であるため、式（８）、（９）の詳細な説明は省略する。また、本実施形態では、以下の式（１０）が成り立つ。
【数１１】
2016118882.tif 000013
【００３６】
これにより、ノード１は、並列プログラムの部分ｉを実行するコア数を式（７）により推定し、式（９）により算出したコア数を用いて、推定したコア数をより好適なコア数に調整することができる。本実施形態では、式（７）によって部分ｉを実行するコア数を仮決めすることで、部分ｉの実際の演算量がより正確に算出される。上記のようにコア数を推定して仮決めしない場合、部分ｉの処理を実行するコア数が多すぎて粒度が細かくなりすぎる可能性がある。本実施形態では、これにより、部分ｉの演算量が多くなっても、演算時間をできるだけ短縮しつつ、できるだけ多くのコア数で部分ｉの処理を実行することが可能となる。
【００３７】
本実施形態では、上記のＯＰ１０２において説明したように、各部分ｉの演算量が推定される際に、演算量が少なくなるパスが選択されて実行されるとみなされる。すなわち、実際に部分ｉを実行すると必ずしも演算量が少なくなるパスが選択されるとは限らないため、ＯＰ１０２においてノード１によって推定される演算量は、実際に部分ｉを実行した場合の演算量以下となる。ＯＰ１０７において、コア数は、ＯＰ１０６における部分ｉの演算量に基づいて算出されるｍｉ（０）の値に基づいて決定される。したがって、本実施形態では、部分ｉを実行するコア数は、現在のコア数が維持されるか増やされるかのいずれかで調整される。よって、コア数が、増減を繰り返し続けてなかなか決定しないことがない。このため、本実施形態によるコア数の調整によれば、部分ｉを実行するコア数を好適なコア数で維持することも可能となる。
【００３８】
（実施例１）
以下に、本実施形態に係る実施例について説明する。本実施例では、並列プログラムのある部分（上記の部分ｉの１つに対応）が図５に示すソースコードであるとする。なお、図５において（Ｌ１）〜（Ｌ５）は、説明の便宜上、追加したものであり、ソースコードのコンパイルや処理の実行などには影響を及ぼさない。
【００３９】
ノード１によるコンパイラ実行の結果、静的に推定される理論的並列性の指標Ｐｉの値が１００と算出されたとする。図５に示す「（Ｌ３）」行のｉｆ文中の条件の成立または不成立は、コンパイル時には不明である。本実施例では、ノード１は、コンパイラ実行の結果から、当該ｉｆ文中の条件が不成立の場合の方が、成立の場合よりも演算量が少ないと判定したとする。その結果、ノード１は、当該ｉｆ文中の条件は不成立となって部分ｉが実行されるとみなす。そして、ノード１は、上記のＯＰ１０４およびＯＰ１０５の処理を実行することにより（Ｌ２）〜（Ｌ６）行の演算量を推定し、推定した演算量に基づいて当該部分を実行するコア数は２であると算出したとする。
【００４０】
さらに、ノード１は、上記のＯＰ１０６により、当該部分を２個のコアを使用して実行し、実行したときの演算量を取得する。そして、ノード１は、上記のＯＰ１０７およびＯＰ１０８の処理を実行することにより、当該部分を実行するコア数は５であると算出したとする。この場合、ノード１は、当該部分を次回実行する際に５個のコアを使用して実行する。
【００４１】
このように、本実施例では、上記のＯＰ１０１〜ＯＰ１０８の処理を実行することにより、図５に示す並列プログラムの一部分を実行するコア数をより好適なコア数に調整することができる。したがって、例えば、並列プログラムの開発に熟達していない開発者がプ
ログラムを作成した場合でも、プログラムの各部分に対する使用コア数がより好適なコア数に調整された上で、各部分の処理を実行することができる。
【００４２】
以上が本実施形態に関する説明であるが、上記の分散並列処理システム１内の各ノード等の構成や処理は、上記の実施形態に限定されるものではなく、本発明の技術的思想と同一性を失わない範囲内において種々の変更が可能である。例えば、上記の図３では、部分ｉを実行する各コアにはタスクが均等に割り振られているが、各コアに割り当てられるタスク数は適宜変更することができる。
【００４３】
＜コンピュータが読み取り可能な記録媒体＞
コンピュータその他の機械、装置（以下、コンピュータ等）に上記情報処理装置の設定を行うための管理ツール、ＯＳその他を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。ここで、コンピュータは、例えば、ノード等である。
【００４４】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ブルーレイディスク、ＤＡＴ、８ｍｍテープ、フラッシュメモリ等のメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスクやＲＯＭ等がある。
【００４５】
以上の実施形態に関し、さらに以下の付記を開示する。
【００４６】
（付記１）
複数の演算処理部を有する演算処理装置と、
前記演算処理装置が実行するプログラムの所定部分の演算量を前記プログラムの実行前に推定する推定部と、
推定された前記演算量と、前記プログラムの所定部分の処理とを並列化する基準値とに基づいて、前記プログラムの前記所定部分を実行する演算処理部の数である演算処理部数を決定する決定部と、
決定された前記演算処理部数で前記プログラムの所定部分を実行した場合の演算量と前記基準値とに基づいて、前記プログラムの所定部分を実行する演算処理部数を調整する調整部と、
を備える情報処理装置。
【００４７】
（付記２）
前記推定部は、前記プログラムの所定部分に複数の実行パスが含まれる場合、前記複数の実行パスのうち演算量がより少ない実行パスに基づいて前記プログラムの所定部分の演算量を推定する、付記１に記載の情報処理装置。
【００４８】
（付記３）
前記演算処理装置はさらに、
前記演算処理装置の１つの演算処理部あたりの処理の粒度と前記所定部分の並列実行における処理負荷とに基づいて前記基準値を算出する算出部を有する
付記１または付記２に記載の情報処理装置。
【００４９】
（付記４）
複数の演算処理部を有する演算処理装置を有する情報処理装置の制御方法において、
前記情報処理装置が有する推定部が、前記演算処理装置が実行するプログラムの所定部分の演算量を前記プログラムの実行前に推定し、
前記情報処理装置が有する決定部が、推定された前記演算量と、前記プログラムの所定部分の処理とを並列化する基準値とに基づいて、前記プログラムの前記所定部分を実行する演算処理部の数である演算処理部数を決定し、
前記情報処理装置が有する調整部が、決定された前記演算処理部数で前記プログラムの所定部分を実行した場合の演算量と前記基準値とに基づいて、前記プログラムの所定部分を実行する演算処理部数を調整する
情報処理装置の制御方法。
【００５０】
（付記５）
前記推定部は、前記プログラムの所定部分に複数の実行パスが含まれる場合、前記複数の実行パスのうち演算量がより少ない実行パスに基づいて前記プログラムの所定部分の演算量を推定する、付記４に記載の情報処理装置の制御方法。
【００５１】
（付記６）
前記情報処理装置が有する算出部が、前記演算処理装置の１つの演算処理部あたりの処理の粒度と前記所定部分の並列実行における処理負荷とに基づいて前記基準値を算出する、付記４または付記５に記載の情報処理装置の制御方法。
【００５２】
（付記７）
複数の演算処理部を有する演算処理装置を有する情報処理装置の制御プログラムにおいて、
前記情報処理装置が有する推定部に、前記演算処理装置が実行するプログラムの所定部分の演算量を前記プログラムの実行前に推定させ、
前記情報処理装置が有する決定部に、推定された前記演算量と、前記プログラムの所定部分の処理とを並列化する基準値とに基づいて、前記プログラムの前記所定部分を実行する演算処理部の数である演算処理部数を決定させ、
前記情報処理装置が有する調整部に、決定された前記演算処理部数で前記プログラムの所定部分を実行した場合の演算量と前記基準値とに基づいて、前記プログラムの所定部分を実行する演算処理部数を調整させる
情報処理装置の制御プログラム。
【００５３】
（付記８）
前記推定部は、前記プログラムの所定部分に複数の実行パスが含まれる場合、前記複数の実行パスのうち演算量がより少ない実行パスに基づいて前記プログラムの所定部分の演算量を推定する、付記７に記載の情報処理装置の制御プログラム。
【００５４】
（付記９）
前記情報処理装置が有する算出部に、前記演算処理装置の１つの演算処理部あたりの処理の粒度と前記所定部分の並列実行における処理負荷とに基づいて前記基準値を算出させる、付記７または付記８に記載の情報処理装置の制御プログラム。
【符号の説明】
【００５５】
１    ノード
１０、１００    ＣＰＵ
１７〜２０、１０７〜１１０    コア
３０１    推定部
３０２    決定部
３０３    調整部
３０４    算出部
【図１】
2016118882.tif 000014
【図２】
2016118882.tif 000015
【図３】
2016118882.tif 000016
【図４】
2016118882.tif 000017
【図５】
2016118882.tif 000018