(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-15
(45)【発行日】2024-01-23
(54)【発明の名称】並列処理装置
(51)【国際特許分類】
G06F 9/50 20060101AFI20240116BHJP
【FI】
G06F9/50 150C
(21)【出願番号】P 2020014221
(22)【出願日】2020-01-30
【審査請求日】2022-10-06
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】末安 直樹
(72)【発明者】
【氏名】一瀬 克己
【審査官】坂東 博司
(56)【参考文献】
【文献】特開2018-120387(JP,A)
【文献】米国特許出願公開第2019/0012155(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/50
(57)【特許請求の範囲】
【請求項1】
所定の並列化パラメータを設定した、2重ループを有する最適化対象のプログラムを並列処理で1回だけ実行する実行部と、
前記実行部によって実行された結果から前記最適化対象のプログラムの特徴値を算出する算出部と、
2重ループを有するサンプルプログラムにおける特徴値と最適な並列化パラメータとの相関関係を示すデータベースを参照して、前記算出部によって算出された特徴値に対応する最適な並列化パラメータを抽出する抽出部と、
を有することを特徴とする並列処理装置。
【請求項2】
特徴値を持つサンプルプログラムに対して複数通りの並列化パラメータをそれぞれ設定して実行した際の結果を基に当該プログラムにおける特徴値と最適な並列化パラメータとの相関関係を示すデータベースを生成する生成部とをさらに有し、
前記抽出部は、前記生成部によって生成されたデータベースを参照して、前記算出部によって算出された前記最適化対象のプログラムの特徴値に対応する最適な並列化パラメータを抽出する
ことを特徴とする請求項1に記載の並列処理装置。
【請求項3】
前記相関関係は、ループごとの、実行命令数の平均、実行命令数の相対標準偏差およびキャッシュの再利用率の平均を示す複数の特徴値と、ループごとの、プロセッサコアの割り当て、並列化のスケジューリング方式および並列化のスケジューリング方式のチャンク数を示す複数の並列化パラメータとの相関関係である
ことを特徴とする請求項1または請求項2に記載の並列処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、並列処理装置に関する。
【背景技術】
【0002】
並列処理プログラムの並列処理パラメータを決定する技術が開示されている。例えば、特許文献1では、処理部が、評価対象の第1プログラムの推奨するノード数とプロセス数とを決定する。具体的には、処理部は、ノード数とプロセス数とを示す第1サンプル点に従って第1プログラムを実行させ、第1サンプル点それぞれの間の評価値の変動率に基づく第1統計量を算出する。そして、処理部は、第1統計量が第1閾値以下になるまで第1サンプル点4を生成する。また、処理部は、第1サンプル点から所定距離内に第2サンプル点を追加し、第2サンプル点に従って第1プログラムを実行したときの評価値を用いて第1サンプル点ごとの第2統計量を算出する。そして、処理部は、第2統計量が第2閾値以下になるまで第2サンプル点を生成する。そして、処理部は、第1サンプル点と第2サンプル点との評価値を補完して、推奨するノード数とプロセス数とを決定する。
【0003】
また、2重ループを有するプログラムを並列処理で実行するときに、適切な並列処理パラメータを設定する必要がある。スレッド並列化規格OpenMPの並列処理パラメータとして、スケジューリング方式、チャンクサイズおよびプロセッサコアの割り当てが挙げられる。従来では、並列処理パラメータの組み合わせごとに、組み合わせのパラメータをプログラムに設定し、プログラムを実行し、実行結果を参照して適切な並列化パラメータとなるように調整していた。あるいは、並列化パラメータを経験者による経験で調整していた。
【先行技術文献】
【特許文献】
【0004】
【文献】特開2018-120387号公報
【文献】特開2016-9972号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、ループを有するプログラムを並列処理で実行するときに、プログラムに設定する最適な並列処理パラメータを高速に推定することが難しいという問題がある。
【0006】
例えば、推奨するノード数とプロセス数とを決定する技術では、評価対象の第1プログラムをノード数とプロセス数とを示す第1サンプル点に従って評価対象の第1プログラムを何度も実行させて、推奨するノード数とプロセス数とを決定する。また、決定する並列処理パラメータは、ノード数とプロセス数だけである。したがって、スケジューリング方式、チャンクサイズおよびプロセッサコアの割り当てを含む最適な並列処理パラメータを高速に推定することが難しい。
【0007】
また、2重ループを有するプログラムを並列処理で実行するときの並列化パラメータを決定する場合では、並列処理パラメータの組み合わせごとに、プログラムを実行して、最適な並列処理パラメータを求める。したがって、かかる場合でも、最適な並列処理パラメータを高速に推定することが難しい。
【0008】
本発明は、1つの側面では、ループを有するプログラムを並列処理で実行するときの最適な並列処理パラメータを高速に推定することを目的とする。
【課題を解決するための手段】
【0009】
1つの態様では、並列処理装置は、所定の並列化パラメータを設定した、2重ループを有する最適化対象のプログラムを並列処理で1回だけ実行する実行部と、前記実行部によって実行された結果から前記最適化対象のプログラムの特徴値を算出する算出部と、2重ループを有するサンプルプログラムにおける特徴値と最適な並列化パラメータとの相関関係を示すデータベースを参照して、前記算出部によって算出された特徴値に対応する最適な並列化パラメータを抽出する抽出部と、を有する。
【発明の効果】
【0010】
1実施態様によれば、ループを有するプログラムを並列処理で実行するときの最適な並列処理パラメータを高速に推定することができる。
【図面の簡単な説明】
【0011】
【
図1】
図1は、実施例に係る並列処理装置の機能構成を示すブロック図である。
【
図3】
図3は、実施例に係る関係データベースの一例を示す図である。
【
図4】
図4は、プログラムを実行するハードウェアの一例を示す図である。
【
図5】
図5は、プロセッサコアの割り当ての一例を示す図である。
【
図6】
図6は、DOループの実行例を示す図である。
【
図7】
図7は、最適化パラメータ抽出の一例を示す図である。
【
図8】
図8は、最適化されたプログラムの一例を示す図である。
【
図9】
図9は、実施例に係る生成処理のフローチャートの一例を示す図である。
【
図10】
図10は、実施例に係る最適化パラメータ抽出処理のフローチャートの一例を示す図である。
【
図11】
図11は、実施例に係るプログラム本実行処理のフローチャートの一例を示す図である。
【
図12】
図12は、並列処理プログラムを実行するコンピュータの一例を示す図である。
【発明を実施するための形態】
【0012】
以下に、本願の開示する並列処理装置の実施例を図面に基づいて詳細に説明する。なお、本発明は、実施例により限定されるものではない。
【実施例】
【0013】
[実施例に係る並列処理装置の機能構成]
図1は、実施例に係る並列処理装置の機能構成を示すブロック図である。
図1に示す並列処理装置1は、複数レベルの並列化が行なえるアプリケーションプログラムに対する最適な並列化パラメータを選択して、実行性能をチューニングする。実施例では、複数レベルの並列化を行なえるアプリケーションプログラムとしてスレッド並列化規格であるOpenMPを適用するものとする。また、実施例では、例えば、2重ループを有するアプリケーションプログラムを並列処理で実行する際に適切な並列化パラメータを選択する場合について説明する。 なお、OpenMP規格は、例えば、「OpenMP Application Program Interface Version 5.0」の記載に準じるものであり、詳細な説明を省略する。
【0014】
並列処理装置1は、制御部10および記憶部20を有する。制御部10は、CPU(Central Processing Unit)などの電子回路に対応する。そして、制御部10は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。制御部10は、生成部11、プログラム仮実行部12、特徴値算出部13、最適化パラメータ抽出部14およびプログラム本実行部15を有する。なお、プログラム仮実行部12は、実行部の一例である。特徴値算出部13は、算出部の一例である。最適化パラメータ抽出部14は、抽出部の一例である。生成部11は、生成部の一例である。
【0015】
記憶部20は、例えば、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)などの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。記憶部20は、基準プログラム21および関係データベース22を有する。
【0016】
基準プログラム21は、並列化パラメータに影響を与える、プログラムの複数の実行特徴値の組み合わせごとに、それぞれの組み合わせの特徴値を持つプログラムのことをいう。基準プログラム21は、並列化パラメータを設定する変数を有するとともに、2重ループを有する。ここでは、プログラムの複数の実行特徴値の組み合わせを「アプリ実行特徴値セット」というものとする。アプリ実行特徴値セットごとに、基準プログラム21が作成される。
【0017】
ここで、実施例で扱うプログラムの一例を、
図2を参照して説明する。
図2は、プログラムの一例を示す図である。
図2では、Fortran言語のプログラムの一例である。
図2に示すように、プログラムは、2レベルのDOループの並列化を行う。プログラム内のL1,U1が、1次元目のループの変動範囲の定数である。L2,U2が、2次元目のループの変動範囲の定数である。
【0018】
かかるプログラムは、スレッド並列化規格であるOpenMPの並列化パラメータを設定する変数を有する。並列化パラメータには、変数P1,P2,D1,D2,C1およびC2が挙げられる。変数P1,P2には、DOループへのプロセッサコアの割り当てを示す値が設定される。変数D1,D2は、スケジューリング方式を示す値が設定される。変数C1,C2は、チャンク数が設定される。スケジューリング方式には、例えば、static、dynamic、guidedが設定可能である。チャンクには、例えば、任意の整数が設定可能である。任意の整数は、例えば、1,8または32である。DOループへのプロセッサコアの割り当てとして、例えば48コアを例とすると、(1,48),(2,24),(3,16),(4,12),(6,8),(8,6),(12,4),(16,3),(24,2),(48,1)が設定可能である。
【0019】
かかるプログラムは、parallel do構文を持ち、変動範囲のdoループを並列に実行する。ここでいう並列とは、プロセス並列ではなく、プログラム内のスレッド並列のことをいう。parallel do構文は、プロセッサコアの割り当てに従ってスレッドにdoループの繰り返し処理の一部を割り当てる。
【0020】
かかるプログラムに設定可能な並列化パラメータの組み合わせは、上記の例では、810通り存在する。すなわち、スケジューリング方式に3種類、チャンクに3種類が存在するので、2レベルのDOループに適用する場合には、81(=3×3×3×3)通りが存在する。加えて、DOループへのプロセッサコアの割り当てに10種類が存在するので、プログラムに設定可能な並列化パラメータの組み合わせは、810(=10×81)通りとなる。
【0021】
実施例では、並列処理装置1は、プログラムに設定可能な並列化パラメータの組み合わせの中から実行時間が最も短い組み合わせを示す最適並列化パラメータを抽出する。
【0022】
図1に戻って、ここで、アプリ実行特徴値セットについて説明する。アプリ実行特徴値セットは、並列化パラメータに影響を与える、プログラムの複数の実行特徴値の組み合わせのことをいう。並列化パラメータに影響を与える、プログラムの複数の実行特徴値には、例えば、以下のx、y、zが考えられる。
x)各DOループの繰り返しごとの処理部分の実行命令数の平均値
y)各DOループの繰り返しごとの処理部分の実行命令数の相対標準偏差値
z)各DOループの繰り返しごとの処理部分のキャッシュ再利用率の平均値
【0023】
xが並列化パラメータに影響を与える、プログラムの実行特徴値として適用される理由は、以下の通りである。処理部分の実行命令数の大小により、例えば並列化パラメータの1つであるスケジューリング方式に影響を与えるからである。すなわち、処理コスト(オーバーヘッド)が大きい場合に採用されるDynamicスケジューリング方式を採用できるかどうかを判定するためである。
【0024】
yが並列化パラメータに影響を与える、プログラムの実行特徴値として適用される理由は、以下の通りである。処理部分の負荷バランスの度合いにより、例えば並列化パラメータの1つであるスケジューリング方式に影響を与えるからである。すなわち、処理部分の負荷バランスにバラツキが無い場合にはstaticスケジューリング方式を、負荷バランスにバラツキが有る場合にはDynamicスケジューリング方式を採用するためである。
【0025】
zが並列化パラメータに影響を与える、プログラムの実行特徴値として適用される理由は、以下の通りである。キャッシュの再利用率の高低により、例えば並列化パラメータの1つであるチャンク数に影響を与えるからである。すなわち、キャッシュの再利用率が高い場合には、チャンク数を大きくすることにより、キャッシュの再利用を促進すべく、大きいチャンク数を採用するためである。
【0026】
実施例では、並列処理装置1は、この3種類の実行特徴値を、1次元目のDOループおよび2次元目のDOループでそれぞれ算出し、6個の実行特徴値の組み合わせを、アプリ実行特徴値セットとして定義する。
【0027】
関係データベース22は、アプリ実行特徴値セットと、最適な並列化パラメータとの対応関係を保持する。関係データベース22は、後述する生成部11によって生成される。なお、関係データベース22の一例は、後述する。
【0028】
生成部11は、関係データベース22を生成する。
【0029】
例えば、生成部11は、アプリ実行特徴値セットの各要素を、次の刻みで変化させるような複数の基準プログラム21を生成する。各DOループの繰り返しごとの処理部分の実行命令数の平均値は、Dynamicスケジューリング方式の場合の実行時ライブラリの実行命令数の1~10倍とする。すなわち、各DOループの繰り返しごとの処理部分の実行命令数の平均値は、DOループごとに、1,2,・・・,10の値を採る。各DOループの繰り返しごとの処理部分の実行命令数の相対標準偏差値は、0.1~1.0を0.1刻みとする。すなわち、各DOループの繰り返しごとの処理部分の実行命令数の相対標準偏差値は、DOループごとに、0.1,0.2,・・・,1.0の値を採る。各DOループの繰り返しごとの処理部分のキャッシュ再利用率の平均値は、0.1~1.0を0.1刻みとする。すなわち、各DOループの繰り返しごとの処理部分のキャッシュ再利用率の平均値は、DOループごとに、0.1,0.2,・・・,1.0の値を採る。この例では、アプリ実行特徴値セットは、最終的に、106(=100万)個になる。生成部11は、100万個のアプリ実行特徴値セットを持つそれぞれの基準プログラム21を生成する。
【0030】
そして、生成部11は、1つのアプリ実行特徴値セットを持つ基準プログラム21に対して複数通りの並列化パラメータの組をそれぞれ設定して実行する。一例として、プログラムに設定可能な並列化パラメータの組み合わせが810通りあるとすると、生成部11は、1つの基準プログラム21に対して810通りの並列化パラメータをそれぞれ設定して実行する。
【0031】
そして、生成部11は、複数通りの実行結果を基に、最も実行時間が短かった並列化パラメータの組を最適並列化パラメータとして決定する。そして、生成部11は、基準プログラム21におけるアプリ実行特徴値セットと最適並列化パラメータとを対応付けて関係データベース22に追加する。そして、生成部11は、他のアプリ実行特徴値セットについても同様に、アプリ実行特徴値セットを持つ基準プログラム21における最適並列化パラメータを決定して、関係データベース22に追加する。
【0032】
ここで、関係データベース22の一例を、
図3を参照して説明する。
図3は、実施例に係る関係データベースの一例を示す図である。
図3に示す関係データベース22は、アプリ実行特徴値セット(X1,Y1,Z1,X2,Y2,Z2)と、最適並列化パラメータ(P1,P2,D1,D2,C1,C2)とを対応付けて記憶する。
【0033】
アプリ実行特徴値セット(X1,Y1,Z1,X2,Y2,Z2)は、1次元目のDOループの上記x、y、zおよび2次元目のDOループの上記x、y、zに対応する。つまり、X1は、1次元目のDOループのx、すなわち、1次元目のDOループの繰り返しごとの処理部分の実行命令数の平均値を示す。Y1は、1次元目のDOループのy、すなわち、1次元目のDOループの繰り返しごとの処理部分の実行命令数の相対標準偏差値を示す。Z1は、1次元目のDOループのz、すなわち、1次元目のDOループの繰り返しごとの処理部分のキャッシュ再利用率の平均値を示す。X2は、2次元目のDOループのx、すなわち、2次元目のDOループの繰り返しごとの処理部分の実行命令数の平均値を示す。Y2は、2次元目のDOループのy、すなわち、2次元目のDOループの繰り返しごとの処理部分の実行命令数の相対標準偏差値を示す。Z2は、2次元目のDOループのz、すなわち、2次元目のDOループの繰り返しごとの処理部分のキャッシュ再利用率の平均値を示す。ここでは、X1やX2は、1,2,・・・,10の値を採る。Y1やY2は、0.1,0.2,・・・,1.0の値を採る。Z1やZ2は、0.1,0.2,・・・,1.0の値を採る。
【0034】
最適並列化パラメータ(P1,P2,D1,D2,C1,C2)は、アプリ実行特徴値セット(X1,Y1,Z1,X2,Y2,Z2)を持つ基準プログラム21における最適な並列化パラメータに対応する。P1,P2は、DOループへのプロセッサコアの割り当てを示す値である。D1は、1次元目のDOループのスケジューリング方式を示す値である。D2は、2次元目のDOループのスケジューリング方式を示す値である。C1は、1次元目のDOループのチャンク数である。C2は、2次元目のDOループのチャンク数である。
【0035】
一例として、アプリ実行特徴値セットが(1,0.1,0.1,1,0.1,0.1)である場合に、最適並列化パラメータとして(6,8,static,static,1,1)が記憶されている。また、アプリ実行特徴値セットが(10,0.1,0.1,1,0.1,0.1)である場合に、最適並列化パラメータとして(6,8,dynamic,static,1,1)が記憶されている。
【0036】
プログラム仮実行部12は、最適化パラメータを抽出したい最適化対象プログラムを仮実行する。例えば、プログラム仮実行部12は、最適化対象プログラムの特徴を求めるために、所定の並列化パラメータを設定した最適化対象プログラムを1回だけ仮実行する。最適化対象プログラムに設定する所定の並列化パラメータ(P1,P2,D1,D2,C1,C2)は、例えば(6,8,static,static,1,1)である。しかしながら、所定の並列化パラメータ(P1,P2,D1,D2,C1,C2)は、これに限定されるものではない。
【0037】
特徴値算出部13は、プログラム仮実行部12によって実行された際のアプリ実行特徴値セットのそれぞれの特徴値を算出する。実行時のアプリ実行特徴値セットのそれぞれの特定値は、特定のプロファイル等の性能情報取得ツールを用いて求められれば良い。特定のプロファイル等の性能情報取得ツールは、例えば、スーパーコンピュータ「京」に向けたアプリケーション開発支援ツール(“スーパーコンピュータ「京」の性能プロファイル”を参照)を利用しても良い。
【0038】
最適化パラメータ抽出部14は、関係データベース22を参照して、特徴値算出部13によって算出されたアプリ実行特徴値セットに対応する最適並列化パラメータを抽出する。例えば、最適化パラメータ抽出部14は、関係データベース22から、特徴値算出部13によって算出されたアプリ実行特徴値セットと最も距離が近いアプリ実行特徴値セットを取得する。これは、関係データベース22に記憶されたアプリ実行特徴値セットは、離散的であるからである。そして、最適化パラメータ抽出部14は、関係データベース22から、取得したアプリ実行特徴値セットに対応する最適並列化パラメータを抽出する。これにより、最適化パラメータ抽出部14は、ループを有する最適化対象プログラムを並列処理で実行するときの最適な並列化パラメータを高速に推定することができる。
【0039】
プログラム本実行部15は、最適化対象プログラムを本実行する。例えば、プログラム本実行部15は、最適化パラメータ抽出部14によって抽出された最適並列化パラメータを設定した最適化対象プログラムを本実行する。
【0040】
[プログラムを実行するハードウェアの一例]
図4は、プログラムを実行するハードウェアの一例を示す図である、
図4に示すように、計算機が、1つのメモリを共有する48個のプロセッサコア(計算コア)を有する場合とする。それぞれの計算コアは、メモリへのアクセスのコストを軽減するために、キャッシュを有する。そして、12個の計算コアごとに、UMAグループを生成する。そして、4組のUMAグループが、NUMA(Non-Uniform Memory Access)結合している。なお、
図4の例では、計算機に48個の計算コアがある場合を説明したが、これに限定されるものではない。
【0041】
[プロセッサコアの割り当ての一例]
図5は、プロセッサコアの割り当ての一例を示す図である。すなわち、上記並列化パラメータの変数P1,P2で表わしたDOループへのプロセッサコアの割り当ての一例を示す。
図5の一例では、48個のプロセッサコア(計算コア)の場合である。
【0042】
図5上図は、48個のプロセッサコアの割り当てが(12,4)の場合である。かかる場合には、プログラムは、コアごとに、1次元目(1重目)のDOループを12分割で実行され、2次元目(2重目)のDOループを4分割で実行される。
【0043】
図5下図は、48個のプロセッサコアの割り当てが(8,6)の場合である。かかる場合には、プログラムは、コアごとに、1次元目(1重目)のDOループを8分割で実行され、2次元目(2重目)のDOループを6分割で実行される。
【0044】
[DOループの実行例]
図6は、DOループの実行例を示す図である。
図6の一例では、
図2で示したプログラムのL1,L2が「1」、U1,U2が「100」の場合である。すなわち、1次元目(1重目)のループの変動範囲L1,U1は、1,100である。2次元目(2重目)のループの変動範囲L2,U2は、1,100である。また、最適化パラメータのプロセッサコアの割り当て(P1,P2)が(8,6)の場合である。
【0045】
ここでは、CORE#0が示すプロセッサコアは、1重目のDOループの変動範囲(1,13)を担い、2重目のDOループの変動範囲(1,17)を担う。CORE#1が示すプロセッサコアは、1重目のDOループの変動範囲(14,26)を担い、2重目のDOループの変動範囲(1,17)を担う。CORE#2が示すプロセッサコアは、1重目のDOループの変動範囲(27,39)を担い、2重目のDOループの変動範囲(1,17)を担う。・・・CORE#7が示すプロセッサコアは、1重目のDOループの変動範囲(92,100)を担い、2重目のDOループの変動範囲(1,17)を担う。また、CORE#8が示すプロセッサコアは、1重目のDOループの変動範囲(1,13)を担い、2重目のDOループの変動範囲(18,34)を担う。CORE#16が示すプロセッサコアは、1重目のDOループの変動範囲(1,13)を担い、2重目のDOループの変動範囲(35,51)を担う。CORE#24が示すプロセッサコアは、1重目のDOループの変動範囲(1,13)を担い、2重目のDOループの変動範囲(52,68)を担う。CORE#32が示すプロセッサコアは、1重目のDOループの変動範囲(1,13)を担い、2重目のDOループの変動範囲(69,85)を担う。CORE#40が示すプロセッサコアは、1重目のDOループの変動範囲(1,13)を担い、2重目のDOループの変動範囲(86,100)を担う。このように、プロセッサコアの割り当てに従って、スレッドにdoループの繰り返し処理の一部を割り当てる。
【0046】
[最適化パラメータ抽出の一例]
図7は、最適化パラメータ抽出の一例を示す図である。
図7に示すように、生成部11によって生成された関係データベース22が表わされている。なお、最適化対象プログラムに対応するアプリ実行特徴値セットが特徴値算出部13によって算出されたものとする。
【0047】
最適化パラメータ抽出部14は、関係データベース22を参照して、特徴値算出部13によって算出されたアプリ実行特徴値セットと最も距離が近いアプリ実行特徴値セットを取得する。ここでは、アプリ実行特徴値セットとして(5,0.8,0.2,1,0.2,0.1)が取得される。すると、最適化パラメータ抽出部14は、関係データベース22を参照して、取得したアプリ実行特徴値セットに対応する最適並列化パラメータを抽出する。ここでは、最適並列化パラメータとして(12,4,guided,static,32,1)が抽出される。
【0048】
[最適化されたプログラムの一例]
図8は、最適化されたプログラムの一例を示す図である。ここでは、最適化対象プログラムの最適並列化パラメータとして(12,4,guided,static,32,1)が抽出されたとする。符号p1に示すように、DOループへのプロセッサコアの割り当てを示す値として、12,4が設定されている。符号p2に示すように、1次元目のDOループのスケジューリング方式として「guided」が設定されている。符号p3に示すように、2次元目のDOループのスケジューリング方式として「static」が設定されている。符号p4に示すように、1次元目のDOループのチャンク数として「32」が設定されている。符号p5に示すように、2次元目のDOループのチャンク数として「1」が設定されている。
【0049】
そして、最適並列化パラメータを設定した最適化対象プログラムを、プログラム本実行部15は、本実行する。
【0050】
[生成処理のフローチャートの一例]
図9は、実施例に係る生成処理のフローチャートの一例を示す図である。なお、アプリ実行特徴値セットは、
図3で示す(X1,Y1,Z1,X2,Y2,Z2)であるとする。
【0051】
図9に示すように、生成部11は、アプリ実行特徴値セットの6次元空間でグリッド状に配置される値を取り得る複数の基準プログラム21を生成する(ステップS11)。
【0052】
そして、生成部11は、それぞれの基準プログラム21において、並列化パラメータの全組み合わせの実行を行う。生成部11は、最も実行時間が短い並列化パラメータを、最適並列化パラメータとして、基準プログラム21に対応するアプリ実行特徴値セットと対応付けて関係データベース22に格納する(ステップS12)。
【0053】
[最適化パラメータ抽出処理のフローチャートの一例]
図10は、実施例に係る最適化パラメータ抽出処理のフローチャートの一例を示す図である。
【0054】
図10に示すように、最適化対象プログラムを受け付けたプログラム仮実行部12は、受け付けた最適化対象プログラムを1回実行する。そして、特徴値算出部13は、アプリ実行特徴値セットを取得する(ステップS21)。実行時のアプリ実行特徴値セットのそれぞれの特定値は、特定のプロファイル等の性能情報取得ツールを用いて求められれば良い。
【0055】
そして、最適化パラメータ抽出部14は、取得されたアプリ実行特徴値セットをまるめる(ステップS22)。
【0056】
そして、最適化パラメータ抽出部14は、まるめた後のアプリ実行特徴値セットをキーに、関係データベース22を参照して、最適並列化パラメータを抽出する(ステップS23)。
[プログラム本実行処理のフローチャートの一例]
図11は、実施例に係るプログラム本実行処理のフローチャートの一例を示す図である。
【0057】
プログラム本実行部15は、最適化対象プログラムに最適並列化パラメータを設定して実行する(ステップS31)。
【0058】
[実施例の効果]
上記実施例によれば、並列処理装置1は、所定の並列化パラメータを設定した、2重ループを有する最適化対象のプログラムを並列処理で1回だけ実行する。並列処理装置1は、実行された結果から最適化対象のプログラムの特徴値を算出する。並列処理装置1は、2重ループを有するサンプルプログラムにおける特徴値と最適な並列化パラメータとの相関関係を示すデータベースを参照して、算出された特徴値に対応する最適な並列化パラメータを抽出する。かかる構成によれば、並列処理装置1は、2重ループを有する最適化対象のプログラムを並列処理で実行する場合に、1回だけ実行するだけで、最適な並列化パラメータを高速に求めることができる。
【0059】
また、上記実施例によれば、並列処理装置1は、特徴値を持つサンプルプログラムに対して複数通りの並列化パラメータをそれぞれ設定して実行した際の結果を基に当該プログラムにおける特徴値と最適な並列化パラメータとの相関関係を示すデータベースを生成する。並列処理装置1は、生成されたデータベースを参照して、算出された前記最適化対象のプログラムの特徴値に対応する最適な並列化パラメータを抽出する。かかる構成によれば、並列処理装置1は、2重ループを有するプログラムにおける特徴値と並列化パラメータとの相関関係を生成することで、最適な並列化パラメータを高速に求めることができる。
【0060】
また、上記実施例によれば、並列処理装置1は、以下の相関関係を示すデータベースを生成する。相関関係は、ループごとの、実行命令数の平均、実行命令数の相対標準偏差およびキャッシュの再利用率の平均を示す複数の特徴値と、ループごとの、プロセッサコアの割り当て、並列化のスケジューリング方式および並列化のスケジューリング方式のチャンク数を示す複数の並列化パラメータとの相関関係である。かかる構成によれば、並列処理装置1は、2重ループを有するプログラムにおける特徴値と並列化パラメータとの相関関係を生成することで、最適な並列化パラメータを高速に求めることができる。
【0061】
[その他]
なお、上記実施例では、プログラムとしてFortran言語を一例として説明した。しかしながら、プログラムは、C言語やC++言語であっても良く、OpenMP規格で扱える言語であれば良い。
【0062】
また、上記実施例では、複数レベルの並列化を行なえるアプリケーションプログラムとしてスレッド並列化規格であるOpenMP規格を一例として説明した。しかしながら、Open規格に限定されず、複数レベルの並列化を行なえるアプリケーションプログラムとしてスレッド並列化規格である所定の規格であれば良い。
【0063】
また、図示した並列処理装置1の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、並列処理装置1の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、特徴値算出部13および最適化パラメータ抽出部14を1つの部として統合しても良い。また、生成部11を、基準プログラム21を生成する第1生成部と、関係データベース22を生成する第2生成部とに分散しても良い。また、記憶部20を並列処理装置1の外部装置としてネットワーク経由で接続するようにしても良い。
【0064】
また、上記実施例で説明した各種の処理は、予め用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、
図1に示した並列処理装置1と同様の機能を実現する分析プログラムを実行するコンピュータの一例を説明する。
図12は、並列処理プログラムを実行するコンピュータの一例を示す図である。
【0065】
図12に示すように、コンピュータ200は、各種演算処理を実行するCPU203と、ユーザからのデータの入力を受け付ける入力装置215と、表示装置209を制御する表示制御部207とを有する。また、コンピュータ200は、記憶媒体からプログラムなどを読取るドライブ装置213と、ネットワークを介して他のコンピュータとの間でデータの授受を行う通信制御部217とを有する。また、コンピュータ200は、各種情報を一時記憶するメモリ201と、HDD205を有する。そして、メモリ201、CPU203、HDD205、表示制御部207、ドライブ装置213、入力装置215、通信制御部217は、バス219で接続されている。
【0066】
ドライブ装置213は、例えばリムーバブルディスク211用の装置である。HDD205は、並列処理プログラム205aおよび並列処理関連情報205bを記憶する。
【0067】
CPU203は、並列処理プログラム205aを読み出して、メモリ201に展開し、プロセスとして実行する。かかるプロセスは、並列処理装置1の各機能部に対応する。並列処理関連情報205bは、基準プログラム21および関係データベース22に対応する。そして、例えばリムーバブルディスク211が、並列処理プログラム205aなどの各情報を記憶する。
【0068】
なお、並列処理プログラム205aについては、必ずしも最初からHDD205に記憶させておかなくても良い。例えば、コンピュータ200に挿入されるフレキシブルディスク(FD)、CD-ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に当該プログラムを記憶させておく。そして、コンピュータ200がこれらから並列処理プログラム205aを読み出して実行するようにしても良い。
【符号の説明】
【0069】
1 並列処理装置
10 制御部
11 生成部
12 プログラム仮実行部
13 特徴値算出部
14 最適化パラメータ抽出部
15 プログラム本実行部
20 記憶部
21 基準プログラム
22 関係データベース