以下、図を用いて本発明の実施形態について説明する。なお、同一の符号が付されたものは同一の構成であることを示す。
[第1の実施形態]
図1は、本発明の第1の実施形態の計算機システムの構成例を示す説明図である。
本実施形態では、計算機システムは、1つ以上のCPU101、1つ以上のメモリ102、1つ以上のGPU105、及び1つ以上のGPUメモリ106から構成される。例えば、最小の構成としては、CPU101、メモリ102、GPU105、及びGPUメモリ106をそれぞれ1つずつ備える計算機システムが考えられる。
なお、本実施形態の計算機システムは、1つの物理計算機によって実現してもよいし、2つ以上の計算機を並列に接続することによって実現してもよい。
図1では、CPU101、メモリ102、GPU105、及びGPUメモリ106を2ずつ備える計算機システムの構成例を示す。また、計算機システムは、ユーザが情報を入力し、また、ユーザに情報を表示するための入出力インタフェース(図示省略)を備える。
CPU101は、メモリ102に格納されるプログラムを実行する。CPU101は、1つ以上のCPUコア(図示省略)を備える。
メモリ102は、CPU101によって実行されるプログラム及び当該プログラムを実行するために必要な情報を格納する。
GPU105は、CPU101からの指示に従って、GPUメモリ106に格納されるプログラム及び情報を用いて処理を実行する。GPU105は、複数の演算コア(図示省略)を備える。
GPUメモリ106は、GPU105によって実行される処理に必要な情報を格納する。
CPU101とGPU105とは、PCIe等のインタフェース111を介して接続される。また、CPU101間は、インタフェース111、及びインフィニバンド、ギガビットイーサネット(イーサネットは登録商標、以下同じ)等のインタフェース110を介して接続される。なお、CPU101とGPU105との間の接続形態及びCPU101間の接続形態はこれに限定されない。
CPU101は、所定の処理を実行し、また、CPU101間のデータ通信処理も同時に実行する。本実施形態ではCPU101間のデータ通信にはMPI通信を用いるが、本発明はこれに限定されない。すなわち、CPU101間でデータ通信できればよく、ソケット通信等を用いてもよい。
また、CPU101は、GPU105との間のデータ通信処理を実行する。本実施形態では、CUDAに準処したプログラムを用いてCPU101とGPU105との間の通信が実現されるが、本発明はこれに限定されない。例えば、OpenCL等に準拠したプログラムを用いてもよい。
本実施形態におけるGPU105が処理を実行する手順は、以下の通りである。
まず、CPU101は、メモリ102に格納された情報をGPUメモリ106にコピーする。その後、CPU101は、GPU105に処理実行を命令する。
当該処理実行の命令を受信したGPU105は、GPUメモリ106に格納されるプログラム及び情報に基づいて、処理を実行する。
その後、GPU105は、CPU101に処理結果を転送する。すなわち、処理結果がメモリ102に格納される。
本実施形態では、CPU101とGPU105との間の通信処理と、CPU101自身が実行する演算処理と、GPU105が実行する演算処理とが非同期に実行される。
以下、CPU101自身が処理を行う演算処理をCPU処理と記載し、CPU101間の通信処理をMPI通信処理と記載する。また、CPU101とGPU105との間のデータ転送処理をコピー処理と記載し、また、GPU105自身が処理を行う演算処理をカーネル実行処理と記載する。
図2は、本発明の第1の実施形態のメモリ102上に格納されるプログラム及び情報の一例を示す説明図である。
メモリ102は、コンパイラ201、トラップ埋め込みロードモジュール203、リンカ204、オーバーラップ管理情報210、通信時間推定情報207、GPUプロファイラ208、及びGPU非同期処理情報209を格納する。
コンパイラ201は、プログラマが入力したソースに基づいて、CPU101及びGPU105が実行可能な形式のロードモジュールを生成する。また、コンパイラ201は、ソースを解析して、ループ処理を特定するためのトラップをロードモジュールに埋め込む。
本実施形態では、コンパイラ201によってソースからトラップ埋め込みロードモジュール203が生成される。
また、コンパイラ201は、性能分析モジュール202を含む。性能分析モジュール202は、トラップ埋め込みロードモジュール203に埋め込まれたトラップに基づいて、複数の非同期処理が実行されている区間の性能情報を取得する。以下、複数の非同期処理が実行される区間をオーバーラップ区間と記載する。
なお、オーバーラップ区間では、非同期処理以外に、起動した非同期処理の完了を待ってCPU処理との同期をとる処理も実行される。以下、起動した非同期処理の完了を待ってCPU処理との同期をとる処理を同期処理と記載する。
リンカ204は、複数のモジュールをリンクすることによって実行モジュールを生成する。
オーバーラップ管理情報210は、性能分析モジュール202が取得したオーバーラップ期間における各処理の性能情報を格納する。オーバーラップ管理情報210の詳細については、図5A及び図5Bを用いて後述する。
通信時間推定情報207は、CPU101間の通信(MPI通信)処理の実行時間、すなわち、CPU101間の通信時間を推定するための情報を格納する。
これは、CPU101からMPI通信処理の実行命令を受信したインタフェース110は、ネットワークの負荷に応じて通信タイミングを制御するためである。したがって、CPU101からは、実際のMPI通信処理の実行時間を把握できない場合がある。
本実施形態では、MPI通信処理の実行時間を取得するために通信時間推定情報207が用いられる。通信時間推定情報207の詳細については、図7A〜図7Cを用いて後述する。
GPUプロファイラ208は、GPU105が実行する処理の性能情報を取得する。本実施形態では、取得すべき性能情報の種別、取得した非同期処理情報を格納すべきメモリ102のアドレス等をGPU105に送信する。GPU105は、受信した情報に基づいて、GPU105が実行する処理の性能情報を取得し、取得された性能情報をCPU101に送信する。
GPU非同期処理情報209は、GPU105から送信された性能情報を格納する。GPU非同期処理情報は、少なくとも各GPU非同期処理の実行時間を含む。
図3は、本発明の第1の実施形態の計算機システムにおける各構成の論理的接続関係を示す説明図である。
コンパイラ201は、ソース301を解析し、プログラムの実行開始と実行終了時に性能分析モジュール202を呼び出すトラップを埋め込む。また、コンパイラ201は、ソース301中のループ処理開始直前とループ処理終了直後に、性能分析モジュール202を呼び出して、当該ループ処理の識別子を取得するためのトラップを埋め込む。
前述したトラップの埋め込み処理が終了した後、コンパイラ201は、トラップが埋め込まれたソースから、トラップ埋め込みロードモジュール203を生成する。
なお、ソース301は、ユーザが入出力インタフェース(図示省略)を用いて入力した実行プログラム群である。ソース301はメモリ102に格納される。
リンカ204は、トラップ埋め込みロードモジュール203と性能分析モジュール202とをリンクさせて実行モジュール302を生成する。
CPU101は、生成された実行モジュール302を実行する。実行モジュール302が実行されると、ソース301に基づく処理が実行される。このとき、性能分析モジュール202も実行され、オーバーラップ区間における性能情報が取得される。
図4は、本発明の第1の実施形態の性能分析モジュール202の構成例を示す説明図である。
性能分析モジュール202は、オーバーラップ期間判定モジュール401、CPU情報取得モジュール402、MPI情報取得モジュール403、GPU情報取得モジュール404、同期処理情報取得モジュール405、及び分析結果出力モジュール406を含む。
オーバーラップ期間判定モジュール401は、オーバーラップ区間を特定する。具体的には、オーバーラップ期間判定モジュール401は、ソース301上のオーバーラップ区間の開始点と、終了点とを特定する。
例えば、ループ内にオーバーラップ区間の開始点と終了点とが含まれる場合、一つのループ処理に対して一つのオーバーラップ区間とみなす。すなわち、ループ処理が繰り返し実行されても、新たなオーバーラップ区間として扱われない。
本実施形態では、実行モジュール302を実行しながら時系列にオーバーラップ区間が特定されるため、以下、オーバーラップ区間をオーバーラップ期間とも記載する。すなわち、本実施形態では、オーバーラップ期間における最初の処理が開始された時間と、オーバーラップ期間における最後の処理が終了した時間とによってオーバーラップ期間が特定される。
オーバーラップ期間の開始時間が特定されると、性能分析モジュール202は、CPU情報取得モジュール402、MPI情報取得モジュール403、GPU情報取得モジュール404、同期処理情報取得モジュール405、及び分析結果出力モジュール406を呼び出す。すなわち、オーバーラップ期間が特定されると他のモジュールが実行される。
CPU情報取得モジュール402は、オーバーラップ期間におけるCPU101処理の性能情報を取得する。
MPI情報取得モジュール403は、オーバーラップ期間におけるMPI通信処理の性能情報を取得する。
GPU情報取得モジュール404は、オーバーラップ期間におけるコピー処理及びカーネル実行処理の性能情報を取得する。以下、コピー処理及びカーネル実行処理を区別しない場合には、GPU非同期処理と記載する。
同期処理情報取得モジュール405は、オーバーラップ期間における同期処理の性能情報を取得する。
分析結果出力モジュール406は、取得された各性能情報から分析結果を生成し、生成された分析結果を出力する。
図5Aは、本発明の第1の実施形態のオーバーラップ管理情報210の一例を示す説明図である。
本実施形態では、オーバーラップ管理情報210は、オーバーラップ期間性能情報テーブル205、オーバーラップフラグ211、テーブル識別子212、及びシーケンシャル番号213を含む。
オーバーラップ期間性能情報テーブル205は、取得対象であるオーバーラップ期間における性能情報に関する情報を格納する。
本実施形態では、一つのオーバーラップ期間毎に一つのオーバーラップ期間性能情報テーブル205が生成される。すなわち、ソース301に複数のオーバーラップ期間が含まれる場合、一つのオーバーラップ期間毎に一つのオーバーラップ期間性能情報テーブル205が生成される。
また、本実施形態では、ループ処理内に含まれるオーバーラップ期間については、ループ処理が実行される度に、同一のオーバーラップ期間性能情報テーブル205の情報が更新される。
これは、1回のループ処理毎にオーバーラップ期間性能情報テーブル205を生成する場合、データ量が膨大となり、記憶容量の大きいHDD等の記憶媒体にデータを格納する必要があるためである。すなわち、HDD等の記憶媒体に格納するとデータへのアクセスが遅くなり、高速な性能分析を実現できないためである。
そこで、本実施形態では、ループ処理内のオーバーラップ期間については、オーバーラップ期間性能情報テーブル205が一度生成されると、ループ処理が繰り返し実行されても、新たなオーバーラップ期間性能情報テーブル205は生成されず、既存のオーバーラップ期間性能情報テーブル205が更新される。したがって、データ量が小さくなり、メモリ102上でデータを処理することが可能となるため、性能分析処理を高速に行える。
さらに、本実施形態では、ループ処理における性能情報に対して統計処理を実行して統計的な情報を算出することによって、出力される分析結果の量を削減し、プログラマが並列処理プログラムの挙動を理解するための労力を削減する。
また、オーバーラップ期間に含まれるループ処理についても同様に、ループ処理内に含まれる処理の性能情報については、新たなエントリ(図5B参照)が生成されず、既存のエントリの情報が更新される。また、ループ処理内に含まれる処理の性能情報に対して統計処理を実行して統計的な性能情報が算出される。これによって、前述した効果と同様の効果が奏される。
オーバーラップフラグ211は、オーバーラップ期間中であるか否かを示す情報を格納する。
テーブル識別子212は、現在性能情報が取得されているオーバーラップ期間性能情報テーブル205を識別するための識別子を格納する。すなわち、更新対象となるオーバーラップ期間性能情報テーブル205を識別するための識別子が格納される。
シーケンシャル番号213は、GPU非同期処理の実行順番を表す識別番号を格納する。
図5Bは、本発明の第1の実施形態のオーバーラップ期間性能情報テーブル205の一例を示す説明図である。
オーバーラップ期間性能情報テーブル205には、エントリとして、オーバーラップ期間情報500、CPU処理情報501、Memcpy非同期処理情報502、GPU非同期処理情報503、MPI非同期処理情報504、GPU同期処理情報505、及びMPI同期処理情報506が含まれる。
オーバーラップ期間情報500は、特定されたオーバーラップ期間に関する情報を格納する。
CPU処理情報501は、オーバーラップ期間におけるCPU処理の性能情報を格納する。
Memcpy非同期処理情報502は、オーバーラップ期間において非同期に実行されるコピー処理の性能情報を格納する。
GPU非同期処理情報503は、オーバーラップ期間において非同期に実行されるカーネル実行処理の性能情報を格納する。
MPI非同期処理情報504は、オーバーラップ期間において非同期に実行されるMPI通信処理の性能情報を格納する。
GPU同期処理情報505は、オーバーラップ期間における、GPU非同期処理に対応する同期処理の性能情報を格納する。ここで、GPU非同期処理に対応する同期処理は、GPU非同期処理(コピー処理又はカーネル実行処理)の完了を待ってCPU処理と同期をとるための処理を表す。
MPI同期処理情報506は、オーバーラップ期間における、MPI通信処理に対応する同期処理の性能情報を格納する。ここで、MPI通信処理に対応する同期処理は、MPI通信処理の完了を待ってCPU処理と同期を取るための処理を表す。
本実施形態では、一つのオーバーラップ期間性能情報テーブル205に、一つのオーバーラップ期間情報500が含まれる。他のエントリについては、オーバーラップ期間内の一つの処理について一つのエントリが生成される。例えば、一つのオーバーラップ期間において複数のCPU処理が実行される場合、オーバーラップ期間性能情報テーブル205には、各CPU処理のエントリ(CPU処理情報501)が生成される。他の処理についても同様である。
また、本実施形態では、オーバーラップ期間内のループ処理に含まれる処理については、対応するエントリに情報が蓄積される。すなわち、ループ処理が実行される毎に対応するエントリの情報が更新される。また、ループ処理に含まれる処理の性能情報に対して統計処理を実行して統計的な性能情報を算出することによって、データ量を小さくできる。したがって、メモリ102上で高速に処理が行え、また、プログラマが並列処理プログラムの挙動を理解するための労力を削減できる。
前述したように、本実施形態では、ループ処理内にオーバーラップ期間が含まれる場合(以下、ケース1とも記載する)と、オーバーラップ期間にループ処理が含まれる場合(以下、ケース2とも記載する)との二つのケースが考えられる。
ケース1の場合、オーバーラップ期間性能情報テーブル205の各エントリが更新される。すなわち、ループ処理が繰り返し実行された場合、新たなオーバーラップ期間性能情報テーブル205は生成されず、既存のオーバーラップ期間性能情報テーブル205に情報が蓄積される。
ケース2の場合、オーバーラップ期間性能情報テーブル205のうち、ループ処理に含まれる処理に対応するエントリが更新される。すなわち、ループ処理が繰り返し実行された場合、当該ループ処理内に含まれる処理に対応するエントリは新たに生成されず、既存のエントリの情報が更新される。
なお、ループ処理内のオーバーラップ期間に、さらにループ処理が含まれる場合、ケース1及びケース2の更新方法を組み合わせればよい。
本実施形態では、各処理のエントリについて以下のような情報が取得される。すなわち、オーバーラップ期間性能情報テーブル205は、性能情報の項目(カラム)として、開始line511、終了line512、Do−id513、開始時刻514、終了時刻515、実行時間516、期間回数517、同期id518、終了フラグ519、及び個別情報520を含む。
開始line511は、ソース301における、所定の処理の開始を表す命令列のライン番号を格納する。具体的には、オーバーラップ期間情報500の開始line511には、オーバーラップ期間の開始点を表す命令列が記載されたソース301のライン番号が格納される。また、他のエントリの開始line511には、対応する処理の起動を表す命令列が記載されたソース301のライン番号が格納される。
終了line512は、ソース301における、所定の処理の終了を表す命令列のライン番号を格納する。具体的には、オーバーラップ期間情報500の終了line512には、オーバーラップ期間の終了点を表す命令列が記載されたソース301のライン番号が格納される。また、他のエントリの終了line512には、対応する処理の終了を表す命令列が記載されたソース301のライン番号が格納される。
Do−id513は、ループ処理を識別するための識別子を格納する。具体的には、オーバーラップ期間情報500のDo−id513には、現在実行されるループ処理の識別子が格納される。また、他のエントリのDo−id513には、オーバーラップ期間に含まれるループ処理のうち、エントリに対応する処理が含まれるループ処理の識別子が格納される。
本実施形態では、オーバーラップ期間情報500のDo−id513によって、ソース301に含まれる、どのループ処理が現在実行されているかを把握することができる。これによって、更新すべきエントリを把握できる。
開始時刻514は、エントリに対応する処理が開始された時刻を格納する。終了時刻515は、エントリに対応する処理が終了した時刻を格納する。なお、格納される時刻は、計算機の内部時間又は計算機システム全体で共通の時間等を用いる方法が考えられる。
なお、Memcpy非同期処理情報502、GPU非同期処理情報503、及びMPI非同期処理情報504については、開始時刻514及び終了時刻515は格納されない。これは性能分析モジュール202を実行するCPU101側では、非同期に実行されるMPI通信処理、コピー処理及びカーネル実行処理の実行状況を把握できないためである。
例えば、MPI通信処理では、CPU101がMPI通信処理の起動を命令したタイミングと、インタフェース110が情報を送信したタイミングとが異なる。これは、インタフェース110が、ネットワーク使用状況に応じて送信タイミングを制御するためである。また、Memcpy非同期処理は、CPU101がコピー処理の起動を命令したタイミングとGPUメモリ106にメモリ内容がコピーされたタイミングとが異なる。また、GPU非同期処理では、CPU101がGPU105に対してカーネル実行処理の起動を命令したタイミングと、GPU105がカーネル実行処理を開始したタイミングとが異なる。
なお、エントリに対応する処理がループ内の処理である場合、開始時刻514及び終了時刻515は、1回のループ処理が実行される度に更新される。
実行時間516は、エントリに対応する処理の実行時間を格納する。
例えば、CPU処理の実行時間は、終了時刻515から開始時刻514を減算することによって算出できる。なお、Memcpy非同期処理情報502、GPU非同期処理情報503、及びMPI非同期処理情報504の実行時間516については別途取得される。
また、エントリに対応する処理がループ内の処理である場合、実行時間516にはループ毎の実行時間の合計値が格納される。例えば、ループ処理が2回実行された場合に、1回目のループ処理における実行時間と、2回目のループ処理における実行時間とが加算された値が実行時間516に格納される。
期間回数517は、ループ処理の実行回数を格納する。
具体的には、オーバーラップ期間情報500の期間回数517には、オーバーラップ期間がループ処理に含まれる処理の場合、当該ループ処理の実行回数が格納される。なお、ループ内のオーバーラップ期間でない場合には、期間回数517には「1」が格納され、この値は更新されない。
また、他のエントリの期間回数517には、オーバーラップ期間に含まれるループ処理のうち、エントリに対応する処理が含まれるループ処理の実行回数を格納する。さらに、ループ内のオーバーラップ期間である場合、期間回数517には、さらに、オーバーラップ期間が含まれるループ処理の実行回数と、エントリに対応する処理が含まれるループ処理の実行回数とを乗算した値が格納される。
例えば、オーバーラップ期間内の所定の処理を含むループ処理が「3」回実行され、オーバーラップ期間が含まれるループ処理が「4」回実行された場合には、所定の処理のエントリの期間回数517には、「12」が格納される。
なお、性能分析モジュール202は、実行時間516を期間回数517で除算することによって、ループ処理1回あたりの平均実行時間を算出できる。
同期id518は、同期をとるべき非同期処理、すなわち、同期処理に対応する非同期処理を識別するための識別子を格納する。
例えば、GPU非同期処理及びGPU同期処理の場合、同期id518には、オーバーラップを実現するために用いられるCUDAストリームを識別するための識別子が格納される。また、MPI通信処理及びMPI同期処理の場合、同期id518には、MPI通信処理の送信要求又は受信要求を識別するための識別子が格納される。
終了フラグ519は、各非同期処理がCPU処理との同期を完了したか否かを表すフラグを格納する。例えば、同期が完了していない場合には「0」が、同期が完了した場合には「1」が格納される。
具体的な処理としては、任意の非同期処理が起動された場合、性能分析モジュール202が、対応するエントリの終了フラグに「0」を設定する。当該非同期処理に対応する同期処理が完了した場合、性能分析モジュール202が、当該同期処理の同期id518と同一の同期idが格納される非同期処理のエントリの終了フラグに「1」を設定する。
個別情報520は、各処理固有の情報を格納する。個別情報520の詳細については、図6A〜図6Cを用いて後述する。
ここで、オーバーラップ期間性能情報テーブル205の更新例について説明する。
図24Aは、本発明の第1の実施形態におけるソース301の一例を示す説明図である。図24Bは、本発明の第1の実施形態におけるオーバーラップ期間性能情報テーブル205の一例を示す説明図である。なお、図24Aでは、ソース301の概念的な図を表す。
図24Aに示すソース301は、オーバーラップ期間がループ処理1に含まれる。また、当該オーバーラップ期間には、ループ処理2及びループ処理3が含まれる。すなわち、図24Aに示すソース301は、ケース1とケース2とが組み合わさったオーバーラップ期間のソースを示す。
また、ループ処理2にはCPU処理1が含まれ、ループ処理3にはCPU処理2が含まれる。
図24Aのソース301に対するオーバーラップ期間性能情報テーブル205は、図24Bのようになる。
図24Bは、ループ処理3の処理が実行中である場合のオーバーラップ期間性能情報テーブル205を表す。
オーバーラップ期間情報500のDo−id513にはループ処理3の識別子が格納される。これによって、性能分析モジュール202は、Do−id513にループ処理3の識別子が格納されたエントリが更新対象であることを把握できる。なお、ループ処理2の処理が実行中である場合、当該Do−id513にはループ処理2の識別子が格納される。また、オーバーラップ期間情報500の期間回数517には、ループ処理1の実行回数が格納される。
CPU処理1のCPU処理情報501のDo−id513には、ループ処理2の識別子が格納される。また、CPU処理1のCPU処理情報501の期間回数517には、ループ処理1の実行回数とループ処理2の実行回数との積が格納される。
CPU処理2のCPU処理情報501のDo−id513には、ループ処理3の識別子が格納される。また、CPU処理2のCPU処理情報501の期間回数517には、ループ処理1の実行回数とループ処理3の実行回数との積が格納される。
図6Aは、本発明の第1の実施形態におけるCPU処理情報501の個別情報520の一例を示す説明図である。
CPU処理情報501の個別情報520は、開始命令カウンタ601、終了命令カウンタ602、開始FLOPカウンタ603、終了FLOPカウンタ604、命令数605、及びFLOP数606を含む。
開始命令カウンタ601は、開始line511に対応する処理起動時までに実行された命令数を格納する。
終了命令カウンタ602は、終了line512に対応する処理起動時までに実行された命令数を格納する。
なお、ループ処理の場合、開始命令カウンタ601及び終了命令カウンタ602には、ループ処理毎に値が格納される。すなわち、1回のループ処理が終了する度に値が削除される。
開始FLOPカウンタ603は、開始line511に対応する処理起動時における浮動小数点数演算(Floating―point Operation)の実行回数を格納する。
終了FLOPカウンタ604は、終了line512に対応する処理起動時における浮動小数点数演算(Floating―point Operation)の実行回数を格納する。
なお、ループ処理の場合、開始FLOPカウンタ603及び終了FLOPカウンタ604には、ループ処理毎に値が格納される。すなわち、1回のループ処理が終了する度に値が削除される。
命令数605は、オーバーラップ期間における、対応するCPU処理情報501に関する実行命令数を格納する。命令数605は、例えば、終了命令カウンタ602から開始命令カウンタ601を減算することによって算出できる。
なお、ループ処理の場合、ループ処理毎に命令数が算出され、命令数605には、ループ毎の命令数の合計値が格納される。すなわち、累積的な値が格納される。
FLOP数606は、オーバーラップ期間における、対応するCPU処理情報501に関する浮動小数点数演算の実行回数を格納する。FLOP数606は、例えば、終了FLOPカウンタ604から開始FLOPカウンタ603を差分することによって算出できる。
なお、ループ処理の場合、ループ処理毎にFLOP数が算出され、FLOP数606には、ループ毎のFLOP数の合計値が格納される。すなわち、累積的な値が格納される。
開始命令カウンタ601、終了命令カウンタ602、開始FLOPカウンタ603、終了FLOPカウンタ604は、ハードウェアモニタ(図示省略)から取得可能な情報である。例えば、CPU処理情報501の開始line511にライン番号が格納された後に、性能分析モジュール202が、ハードウェアモニタ(図示省略)に各情報の取得命令を送信する方法が考えられる。
図6Bは、本発明の第1の実施形態におけるMemcpy非同期処理情報502及びGPU非同期処理情報503の個別情報520の一例を示す説明図である。
Memcpy非同期処理情報502及びGPU非同期処理情報503の個別情報520は、シーケンシャル番号611を含む。
Memcpy非同期処理情報502におけるシーケンシャル番号611は、実行モジュール302の実行中、何番目に実行されたGPU非同期処理であるかを表す識別子を格納する。
GPU非同期処理情報503におけるシーケンシャル番号611は、実行モジュール302の実行中、何番目に実行されたGPU非同期処理であるかを表す識別子を格納する。
性能分析モジュール202は、シーケンシャル番号611に基づいてGPU非同期処理情報209を参照することによって、Memcpy非同期処理情報502及びGPU非同期処理情報503の実行時間516を取得できる。すなわち、CPU101が把握できない非同期処理の実行時間を取得できる。
図6Cは、本発明の第1の実施形態におけるMPI非同期処理情報504の個別情報520の一例を示す説明図である。
MPI非同期処理情報504の個別情報520は、MPI種別621、通信サイズ622、及び宛先node数623を含む。
MPI種別621は、MPI通信処理の種別を格納する。通信サイズ622は、MPI通信処理において送信又は受信した情報の大きさを格納する。宛先node数623は、MPI通信の通信先ノードの数を格納する。
MPI種別621、通信サイズ622、及び宛先node数623は、例えば、PMPIを用いることによって取得できる。
ここで、PMPIとは、MPIで規定されているプログラミングインターフェースであり、MPI関数に、プログラマが定義した機能を追加することができる。PMPIを用いて、MPI関数実行時に、MPI種別621、通信サイズ622、及び宛先node数623を取得し、性能分析モジュール202に渡す機能を追加する方法が考えられる。
性能分析モジュール202は、取得されたMPI種別621、通信サイズ622、及び宛先node数623に基づいて、通信時間推定情報207を参照することによってMPI通信処理の実行時間を算出できる。すなわち、CPU101が把握できないMPI通信処理の実行時間を取得できる。
図7A〜図7Cは、本発明の第1の実施形態の通信時間推定情報207の一例を示す説明図である。
通信時間推定情報207は、MPI通信処理の種別毎に図7A〜図7Cに示すような情報を格納する。
図7Aは、MPI通信処理の種別が「MPI_Isend」である場合の通信時間推定情報207である。ここで、「MPI_Isend」は、データの送信を命令する命令列である。なお、「MPI_Isend」はノンブロッキング通信であるため、CPU101は、MPI通信処理を起動後した後、送信が完了しているか否かに関わらず別の処理を実行できる。
図7Bは、MPI通信処理の種別が「MPI_Irecv」である場合の通信時間推定情報207である。ここで、「MPI_Irecv」は、データの受信を命令する命令列である。なお、「MPI_Irecv」はノンブロッキング通信であるため、CPU101は、MPI通信処理を起動した後、受信が完了しているか否かに関わらず別の処理を実行できる。
図7Cは、MPI通信処理の種別が「MPI_Iallreduce」である場合の通信時間推定情報207である。ここで、「MPI_Iallreduce」は、指定された全てのプロセスに所定の演算結果の送信を命令する命令列である。本実施形態の計算機システムは2つのCPUを有することから、図7Cには宛先ノード数が「1」である場合及び「2」である場合の通信時間推定情報が記載される。なお、「MPI_Iallreduce」はノンブロッキング通信であるため、CPU101は、MPI通信処理を起動した後、送信が完了しているか否かに関わらず別の処理を実行できる。
通信時間推定情報207は、宛先node数701、通信サイズ702、及び通信時間703を含む。
宛先node数701は、通信先のノード数を格納する。通信サイズ702は、MPI通信処理において送信又は受信した情報の大きさを格納する。通信時間703は、MPI通信処理の実行時間を格納する。
本実施形態では、性能分析モジュール202が、個別情報520に含まれるMPI種別621に基づいて、当該MPI種別621に対応する通信時間推定情報207を特定する。さらに、性能分析モジュール202は、個別情報520に含まれる通信サイズ622及び宛先node数623に基づいて、特定された通信時間推定情報207を参照する。性能分析モジュール202は、通信サイズ622及び宛先node数623と、宛先node数701及び通信サイズ702とが一致するエントリを検索する。性能分析モジュール202は、検索結果に基づいて通信時間703を取得し、取得された通信時間703の値を実行時間516に格納する。
なお、通信時間推定情報207は、図7A〜図7Cに示すようなテーブルに限定されない。例えば、通信時間推定情報207は、データ量等から通信時間を算出するための計算式であってもよい。
図8は、本発明の第1の実施形態の性能分析モジュール202が備える各構成の関係を示す説明図である。
計測開始情報801、非同期処理開始情報802、非同期処理完了情報803、同期処理開始情報804、同期処理完了情報805、Doループ情報806、及び計測終了情報807は、性能分析モジュール202が取得する情報である。
CPU101が実行モジュール302の実行を開始すると、性能分析モジュール202は、コンパイラ201によって予め埋め込まれたトラップに基づいて実行モジュール302の実行が開始されたことを通知する計測開始情報801を取得する。性能分析モジュール202は、取得された計測開始情報801をオーバーラップ期間判定モジュール401に出力する。
オーバーラップ期間判定モジュール401は、入力された計測開始情報801に基づいて、オーバーラップ管理情報210の初期化処理を実行する。
また、CPU101が実行モジュール302の実行を終了すると、性能分析モジュール202は、コンパイラ201によって予め埋め込まれたトラップに基づいて実行モジュール302の実行が終了したことを通知する計測終了情報807を取得する。性能分析モジュール202は、取得された計測終了情報807を分析結果出力モジュール406に出力する。分析結果出力モジュール406は、入力されたオーバーラップ管理情報210に基づいて、オーバーラップ計測情報810を出力する。
性能分析モジュール202は、前述したPMPIなどの方法を用いて、非同期処理開始情報802、非同期処理完了情報803、同期処理開始情報804、及び同期処理完了情報805を取得する。
また、性能分析モジュール202は、コンパイラ201によって埋め込まれたトラップに基づいてDoループ情報806を取得する。
性能分析モジュール202が前述した各情報を取得すると、各モジュールは、それぞれ、対応する性能情報を取得する。
オーバーラップ期間判定モジュール401は、入力された非同期処理開始情報802に基づいて、オーバーラップ期間であるか否かを判定する。なお、入力される非同期処理開始情報802には、少なくとも、命令列のライン番号が含まれる。
また、オーバーラップ期間判定モジュール401は、Doループ情報806が入力されると、現在ループ処理が実行されているか否かを判定する。なお、入力されるDoループ情報806には、少なくとも、ループ処理の識別子が含まれる。
CPU情報取得モジュール402は、非同期処理開始情報802又は同期処理開始情報804が入力されると、CPU101の性能情報を取得する。なお、入力される非同期処理開始情報802及び同期処理開始情報804には、少なくとも、命令列のライン番号と開始時刻とが含まれる。
CPU情報取得モジュール402は、非同期処理完了情報803又は同期処理完了情報805が入力されると、CPU101の性能情報を取得する。なお、入力される非同期処理完了情報803及び同期処理完了情報805には、少なくとも、命令列のライン番号及び終了時刻が含まれる。
MPI情報取得モジュール403は、非同期処理開始情報802が入力されると、MPI通信処理の性能情報を取得する。なお、入力される非同期処理開始情報802には、少なくとも、命令列のライン番号、MPI通信処理の種別、通信サイズ、及び宛先ノード数が含まれる。
なお、MPI情報取得モジュール403は、実行時間を取得するときには、通信時間推定情報207を参照して、MPI通信処理の実行時間を取得する。
MPI情報取得モジュール403は、非同期処理完了情報803が入力されると、MPI通信処理の性能情報を取得する。なお、入力される非同期処理完了情報803には、少なくとも、命令列のライン番号が含まれる。
GPU情報取得モジュール404は、非同期処理開始情報802が入力されると、GPU非同期処理(コピー処理又はカーネル実行処理)の性能情報を取得する。なお、入力される非同期処理開始情報802には、少なくとも、命令列のライン番号が含まれる。
GPU情報取得モジュール404は、GPU非同期処理情報209を参照して、GPU非同期処理(コピー処理又はカーネル実行処理)の性能情報の取得処理を実行する。
GPU情報取得モジュール404は、非同期処理完了情報803が入力されると、GPU非同期処理(コピー処理又はカーネル実行処理)の性能情報を取得する。なお、入力される非同期処理完了情報803には、少なくとも、命令列のライン番号が含まれる。
同期処理情報取得モジュール405は、同期処理開始情報804が入力されると、GPU同期処理又はMPI同期処理の性能情報を取得する。なお、入力される同期処理開始情報804には、命令列のライン番号、及び、非同期処理の起動開始を表す命令列に含まれる識別情報が含まれる。
例えば、カーネル実行処理では、CUDAストリームの識別子が同期処理開始情報804に含まれる。また、MPI通信処理では、送信処理の識別子又は受信処理の識別子が同期処理開始情報804に含まれる。また、先行する全ての非同期処理、又は一部の複数の非同期処理の完了を待つ同期処理の場合、同期処理開始情報804には、「全て」又は「複数識別子」を示す識別情報が含まれる。
同期処理情報取得モジュール405は、同期処理完了情報805が入力されると、GPU同期処理又はMPI同期処理の性能情報を取得する。なお、入力される同期処理完了情報805には、少なくとも、命令列のライン番号が含まれる。
図9は、本発明の第1の実施形態におけるCPU101が実行する処理の概要を説明するフローチャートである。
CPU101は、ユーザからソース301の入力を受け付けると(ステップ901)、ロードモジュール生成処理を実行する(ステップ902)。具体的には、CPU101は、メモリ上に読み出されたコンパイラ201を実行する。これによって、コンパイラ201が、ソース301からトラップ埋め込みロードモジュール203を生成する。
なお、ロードモジュール生成処理の詳細については、図10を用いて後述する。
CPU101は、リンカ204を実行することによって、生成されたトラップ埋め込みロードモジュール203と性能分析モジュール202とから実行モジュール302を生成する(ステップ903)。
CPU101は、生成された実行モジュール302を実行し(ステップ904)、また、性能分析処理を実行する(ステップ905)。なお、性能分析処理の詳細については後述する。
CPU101は、性能分析処理の結果を出力し(ステップ906)、処理を終了する。
図10は、本発明の第1の実施形態におけるロードモジュール生成処理の詳細を説明するフローチャートである。
コンパイラ201は、入力されたソース301を解析する(ステップ1001)。
コンパイラ201は、解析結果に基づいて、ソース301にトラップを埋め込む(ステップ1002)。
具体的には、コンパイラ201は、解析結果に基づいて、ソース301におけるプログラム(実行モジュール302)の実行開始及び終了位置、並びに、ループ処理の位置を特定する。さらに、コンパイラ201は、特定されたプログラムの実行開始時、プログラムの実行終了時、ループ開始直前、及びループ終了直後に、性能分析モジュール202を呼び出すトラップを埋め込む。
コンパイラ201は、トラップが埋め込まれたソース301をコンパイルしてトラップ埋め込みロードモジュール203を生成し(ステップ1003)、処理を終了する。
以下、性能分析処理について説明する。
図11A及び図11Bは、本発明の第1の実施形態の性能分析モジュール202が実行する性能分析処理における各モジュールの処理を説明するPAD図である。
なお、図11A及び図11Bは、各モジュールの処理内容を、そのモジュールが起動される順序に合わせて説明するものである。非同期処理開始情報802、非同期処理完了情報803、同期処理開始情報804、同期処理完了情報805、Doループ情報806が入力されたときの各処理の流れについては、図12〜図17を用いて後述する。
計測開始情報801が入力されると、以下のような処理が実行される。
オーバーラップ期間判定モジュール401は、初期化処理を実行する(1101)。
具体的には、オーバーラップ期間判定モジュール401は、オーバーラップフラグ211に対応する変数Overwrapに「0」を設定し、また、テーブル識別子212に「0」を設定する。
ここで、変数Overwrapに「0」が設定される場合、すなわち、オーバーラップフラグ211が「0」の場合、オーバーラップ期間でないことを表す。また、変数Overwrapに「1」が設定される場合、すなわち、オーバーラップフラグ211が「1」である場合、オーバーラップ期間であることを表す。
また、オーバーラップフラグ211が「1」の場合、テーブル識別子212には、現在、性能情報が取得されているオーバーラップ期間性能情報テーブル205の識別子が格納される。これによって、性能分析モジュール202は、取得された性能情報を格納するオーバーラップ期間性能情報テーブル205を把握することができる。
一方、GPU情報取得モジュール404は、GPU非同期処理についての初期化処理を実行する(1102)。
具体的には、GPU情報取得モジュール404は、GPU非同期処理情報209のシーケンシャル番号213に「0」を設定し、GPUプロファイラ208を起動する。
本実施形態では、起動されたGPUプロファイラ208は、実行モジュール302の実行中、GPU非同期処理(カーネル実行処理又はコピー処理)が起動される度に、シーケンシャル番号213を更新する。また、GPUプロファイラ208は、シーケンシャル番号とGPU非同期処理の性能情報とを対応づけてGPU非同期処理情報209に格納する。なお、シーケンシャル番号213は、GPU非同期処理情報209に格納されたGPU非同期処理の性能情報を取得するために使用される。
前述した二つの初期化処理が終了すると、性能分析モジュール202は、非同期処理、同期処理、及びループ処理の性能情報の取得処理を開始する。
非同期処理開始情報802が入力された場合、以下のような処理が実行される。なお、オーバーラップ期間判定モジュール401及びCPU情報取得モジュール402は、非同期処理開始情報802がMPI通信処理及びGPU非同期処理(コピー処理又はカーネル実行処理)の何れでも同一の処理を実行する。一方、非同期処理開始情報802がMPI通信処理を示す場合、MPI情報取得モジュール403が処理を実行し、非同期処理開始情報802がGPU非同期処理を示す場合、GPU情報取得モジュール404が処理を実行する。
オーバーラップ期間判定モジュール401は、オーバーラップ期間が開始されたか否かを判定する(1103)。
本実施形態では、MPI通信処理及びGPU非同期処理等の任意の非同期処理の起動された時に、当該非同期処理の他に実行中の非同期処理が存在しない場合に、当該任意の非同期処理が起動された時がオーバーラップ期間の開始点として特定される。
具体的には、オーバーラップフラグ211が「0」である場合に、非同期処理開始情報802が入力されると、オーバーラップ期間判定モジュール401は、オーバーラップ期間の開始と判定する。すなわち、オーバーラップフラグ211が「0」であるため先行するオーバーラップ期間が完了しており、かつ、最初の非同期処理が開始された時が、オーバーラップ期間の開始点と判定される。
オーバーラップ期間の開始と判定された場合、オーバーラップ期間判定モジュール401は、当該オーバーラップ期間がループ処理内のオーバーラップ期間であるか否かを判定する(1135)。
具体的には、オーバーラップ期間判定モジュール401は、オーバーラップ管理情報210に格納されるオーバーラップ期間性能情報テーブル205を参照して、オーバーラップ期間情報500の開始line511が、非同期処理開始情報802に含まれる命令列のライン番号と一致するオーバーラップ期間性能情報テーブル205が存在するか否かを判定する。これは、ループ処理内に含まれるオーバーラップ期間である場合、既存のオーバーラップ期間性能情報テーブル205に情報を蓄積するためである。
オーバーラップ期間情報500の開始line511が、非同期処理開始情報802に含まれる命令列のライン番号と一致するオーバーラップ期間性能情報テーブル205が存在する場合には、ループ処理内のオーバーラップ期間であると判定される。
ループ処理内のオーバーラップ期間であると判定された場合、オーバーラップ期間判定モジュール401は、既存のオーバーラップ期間性能情報テーブル205を表す識別子をテーブル識別子212に格納し、当該オーバーラップ期間性能情報テーブル205のオーバーラップ期間情報500の期間回数517を更新する(1104)。
具体的には、オーバーラップ期間判定モジュール401は、非同期処理開始情報802に含まれる命令列のライン番号を当該オーバーラップ期間性能情報テーブル205の識別子としてテーブル識別子212に格納する。また、オーバーラップ期間判定モジュール401は、オーバーラップ期間情報500の期間回数517の値を「1」加算する。
ループ処理内のオーバーラップ期間でないと判定された場合、オーバーラップ期間判定モジュール401は、新たにオーバーラップ期間性能情報テーブル205を生成する(1105)。
具体的には、オーバーラップ期間判定モジュール401は、テーブル識別子212に非同期処理開始情報802に含まれる命令列のライン番号を格納する。また、オーバーラップ期間判定モジュール401は、生成されたオーバーラップ期間性能情報テーブル205のオーバーラップ期間情報500の開始line511に、非同期処理開始情報802に含まれる命令列のライン番号を格納する。また、オーバーラップ期間判定モジュール401は、当該オーバーラップ期間性能情報テーブル205のオーバーラップ期間情報500の期間回数517に「1」を格納する。
一方、CPU情報取得モジュール402は、オーバーラップフラグ211が「1」であるか否かを判定する(1106)。すなわち、オーバーラップ期間であるか否かが判定される。
オーバーラップフラグ211が「1」でないと判定された場合には、CPU処理の性能情報は取得されない。
オーバーラップフラグ211が「1」であると判定された場合、CPU情報取得モジュール402は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205のCPU処理情報501を更新する(1107)。
これは、オーバーラップ期間におけるCPU101自身の処理(CPU処理)が終了したことを意味するためである。すなわち、オーバーラップ期間において、非同期処理が起動された場合、CPU処理から非同期処理に切り替わるためである。
なお、オーバーラップ期間が開始された直後は、オーバーラップフラグ211はまだ「0」であるため、CPU処理情報501は更新されない。後述する手順1109においてオーバーラップフラグ211が「1」に設定され、さらに、新たな非同期処理開始情報802が入力された場合に、当該取得処理が実行される。したがって、更新対象となるエントリは、オーバーラップ期間において、非同期処理が開始される直前まで実行されていたCPU処理のCPU処理情報501である。
更新処理では、CPU情報取得モジュール402は、非同期処理開始情報802に含まれる命令列のライン番号から「1」減算した値をCPU処理情報501の終了line512に格納し、CPU処理情報501の終了時刻515に非同期処理が起動された時間を格納する。また、CPU情報取得モジュール402は、CPU処理の実行時間を実行時間516に格納する。
また、CPU情報取得モジュール402は、ハードウェアモニタ(図示省略)を実行することによって、終了命令カウンタ及び終了FLOPカウンタの値を取得して、取得されたそれぞれの値を終了命令カウンタ602及び終了FLOPカウンタ604に格納する。さらに、CPU情報取得モジュール402は、実行された命令の数を命令数605に格納し、また、実行された演算の数をFLOP数606に格納する。
なお、ループ内のCPU処理の場合には、既存のCPU処理情報501が更新される。具体的には、実行時間516には各ループの実行時間の合計値が格納され、命令数605、FLOP数606にはそれぞれ、各ループの命令数、FLOP数の合計値が格納される。また、期間回数517には「1」加算された値が格納される。ループ内のCPU処理に対応するCPU処理情報501の更新方法は、図14を用いて後述する。
一方、オーバーラップ期間判定モジュール401は、オーバーラップフラグ211が「0」であるか否かを判定する(1108)。
オーバーラップフラグ211が「0」でないと判定された場合、処理は実行されない。
オーバーラップフラグ211が「0」であると判定された場合、オーバーラップ期間判定モジュール401は、オーバーラップフラグ211を「1」に設定する(1109)。
一方、非同期処理開始情報802がMPI通信処理を示す場合、MPI情報取得モジュール403は、オーバーラップフラグ211が「1」であるか否かを判定する(1110)。
オーバーラップフラグ211が「1」でないと判定された場合、MPI通信処理の性能情報は取得されない。
オーバーラップフラグ211が「1」であると判定された場合、MPI情報取得モジュール403は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205にMPI非同期処理情報504のエントリを生成し、生成されたMPI非同期処理情報504に性能情報を格納する(1111)。
具体的には、MPI情報取得モジュール403は、MPI非同期処理情報504の開始line511に、非同期処理開始情報802に含まれる命令列のライン番号を格納し、MPI非同期処理情報504の同期id518にMPI通信処理を識別するための識別子を格納する。また、MPI情報取得モジュール403は、期間回数517に「1」を設定する。また、MPI情報取得モジュール403は、終了フラグ519に「0」を設定する。
また、MPI情報取得モジュール403は、個別情報520のMPI種別621、通信サイズ622及び宛先node数623のそれぞれに対応する値を格納する。
さらに、MPI情報取得モジュール403は、個別情報520に基づいて、通信時間推定情報207を参照することによって通信時間を算出し、算出された通信時間を推定実行時間として実行時間516に格納する。
なお、ループ内のMPI通信処理の場合には、既存のMPI非同期処理情報504が更新される。具体的には、実行時間516にはループ毎の実行時間の合計値が格納され、期間回数517には「1」加算された値が格納される。ループ内のMPI通信処理に対応するMPI非同期処理情報504の更新方法は、図13Bを用いて後述する。
一方、非同期処理開始情報802がGPU非同期処理(カーネル実行処理又はコピー処理)を示す場合、GPU情報取得モジュール404は、オーバーラップフラグ211が「1」であるか否かにかかわらず、シーケンシャル番号213の値に「1」を加算する(1112)。
当該値は、非同期処理開始情報802に対応するGPU非同期処理(コピー処理又はカーネル実行処理)のGPU非同期処理情報209内の実行順番を表す値となる。
また、GPU情報取得モジュール404は、オーバーラップフラグ211が「1」であるか否かを判定する(1113)。
オーバーラップフラグ211が「1」でないと判定された場合には、GPU非同期処理の性能情報は取得されない。
オーバーラップフラグ211が「1」であると判定された場合、GPU情報取得モジュール404は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205にMemcpy非同期処理情報502又はGPU非同期処理情報503のエントリを生成し、生成されたMemcpy非同期処理情報502又はGPU非同期処理情報503に性能情報を格納する(1114)。
具体的には、GPU情報取得モジュール404は、Memcpy非同期処理情報502(又はGPU非同期処理情報503)の開始line511に、非同期処理開始情報802に含まれる命令列のライン番号を格納し、Memcpy非同期処理情報502(又はGPU非同期処理情報503)の同期id518にGPU非同期処理を識別するための識別子を格納する。また、GPU情報取得モジュール404は、期間回数517に「1」を設定し、終了フラグ519に「0」を設定する。
さらに、GPU情報取得モジュール404は、Memcpy非同期処理情報502(又はGPU非同期処理情報503)のシーケンシャル番号611に、シーケンシャル番号213の値を格納する。
なお、ループ内のGPU非同期処理の場合には、既存のMemcpy非同期処理情報502又はGPU非同期処理情報503が更新される。具体的には、実行時間516にはループ毎の実行時間の合計値が格納され、期間回数517には「1」加算された値が格納される。また、シーケンシャル番号611には、新たなシーケンシャル番号が追加される。例えば、1回目のループ処理におけるシーケンシャル番号213が「20」、2回目のループ処理におけるシーケンシャル番号213が「55」である場合、シーケンシャル番号611には「20」及び「55」が格納される。
ループ処理におけるGPU非同期処理に対応するエントリ(Memcpy非同期処理情報502及びGPU非同期処理情報503)の更新方法は、図13Cを用いて後述する。
非同期処理完了情報803が入力された場合、以下のような処理が実行される。
CPU情報取得モジュール402は、オーバーラップフラグ211が「1」であるか否かを判定する(1115)。
オーバーラップフラグ211が「1」でないと判定された場合、CPU処理の性能情報は取得されない。
オーバーラップフラグ211が「1」であると判定された場合、CPU情報取得モジュール402は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205にCPU処理情報501のエントリを生成し、生成されたCPU処理情報501に性能情報を格納する(1116)。これは、オーバーラップ期間においてCPU処理が開始したことを意味するためである。すなわち、非同期処理が終了した場合、非同期処理からCPU処理に切り替わるためである。
具体的には、CPU情報取得モジュール402は、非同期処理完了情報803に含まれる命令列のライン番号に「1」加算した値をCPU処理情報501の開始line511に格納し、開始時刻514に非同期処理が完了した時間を格納する。また、CPU情報取得モジュール402は、ハードウェアモニタを呼び出し、開始命令カウンタ及び開始FLOPカウンタの値を取得し、取得された値を開始命令カウンタ601及び開始FLOPカウンタ603のそれぞれに格納する。
なお、ループ内のCPU処理の場合には、既存のCPU処理情報501が更新される。具体的には、命令数605、FLOP数606には、ループ毎の値が格納される。実行時間516にはループ毎の実行時間の合計値が格納される。ループ処理におけるCPU処理に対応するCPU処理情報501の更新方法は、図14を用いて後述する。
同期処理開始情報804が入力された場合、以下のような処理が実行される。
CPU情報取得モジュール402は、オーバーラップフラグ211が「1」であるか否かを判定する(1117)。
オーバーラップフラグ211が「1」でないと判定された場合、CPU処理の性能情報は取得されない。
オーバーラップフラグ211が「1」であると判定された場合、CPU情報取得モジュール402は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205のCPU処理情報501を更新する(1118)。これは、CPU101は同期処理が完了するまで他の処理を実行しないため、CPU情報取得モジュール402は、CPU処理の終了に関する情報を格納する。
更新対象となるエントリは、同期処理開始情報804に対応する同期処理が起動される直前まで実行されていたCPU処理のCPU処理情報501である。
更新処理では、CPU情報取得モジュール402は、同期処理開始情報804に含まれる命令列のライン番号から「1」減算した値をCPU処理情報501の終了line512に格納し、同期処理が起動された時間を終了時刻515に格納する。また、CPU情報取得モジュール402は、期間回数517に「1」を設定する。
さらに、CPU情報取得モジュール402は、ハードウェアモニタから終了カウンタ及び終了FLOPカウンタの値を取得し、取得された値を終了命令カウンタ602及び終了FLOPカウンタ604のそれぞれに格納する。また、CPU情報取得モジュール402は、実行時間516、命令数605及びFLOP数606に格納する値を算出し、算出された値を格納する。
なお、ループ内のCPU処理の場合、期間回数517には「1」加算された値が格納される。
一方、同期処理情報取得モジュール405は、オーバーラップフラグ211が「1」であるか否かを判定する(1119)。
オーバーラップフラグ211が「1」でないと判定された場合、同期処理の性能情報は取得されない。
オーバーラップフラグ211が「1」であると判定された場合、同期処理情報取得モジュール405は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205に、同期処理のエントリ(GPU同期処理情報505又はMPI同期処理情報506)を生成し、生成されたエントリに性能情報を格納する(1120)。
具体的には、GPU同期処理情報505又はMPI同期処理情報506の開始line511、及び開始時刻514にそれぞれの値が格納される。
なお、ループ内の同期処理である場合には、既存のGPU同期処理情報505又はMPI同期処理情報506が更新される。ループ処理における同期処理に対応するGPU同期処理情報505又はMPI同期処理情報506の更新方法は、図15を用いて後述する。
同期処理完了情報805が入力された場合、以下のような処理が実行される。
同期処理情報取得モジュール405は、オーバーラップフラグ211が「1」であるか否かを判定する(1121)。
オーバーラップフラグ211が「1」でないと判定された場合、同期処理の性能情報は取得されない。
オーバーラップフラグ211が「1」であると判定された場合、同期処理情報取得モジュール405は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205において、対応する同期処理のエントリを更新する(1122)。
具体的には、同期id518が同期処理完了情報805に含まれる同期idと一致するエントリ(GPU同期処理情報505又はMPI同期処理情報506)の終了時刻515、実行時間516、及び期間回数517にそれぞれの値が格納される。
なお、ループ内の同期処理である場合には、既存のGPU同期処理情報505又はMPI同期処理情報506が更新される。ループ処理における同期処理に対応するGPU同期処理情報505又はMPI同期処理情報506の更新方法は、図16を用いて後述する。
さらに、同期処理情報取得モジュール405は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205を参照して、同期処理完了情報805に対応する非同期処理が存在するか否かを判定する(1123)。
具体的には、以下のような処理が実行される。
GPU同期処理情報505の場合、当該エントリの同期id518と同一の同期id518であるGPU非同期処理(カーネル実行処理又はコピー処理)のエントリが存在するか否かが判定する。また、MPI同期処理情報506の場合、当該エントリの同期id518と同一の同期id518であるMPI非同期処理情報504が存在するか否かが判定される。
GPU同期処理情報505の同期id518と同一の同期id518であるGPU非同期処理のエントリが存在する場合、又は、MPI同期処理情報506の同期id518と同一の同期id518であるMPI非同期処理情報504が存在する場合、対応する非同期処理があると判定される。
対応する非同期処理があると判定された場合、同期処理情報取得モジュール405は、対応する非同期処理のエントリに終了フラグを付与する(1124)。
具体的には、同期処理情報取得モジュール405は、対応するMemcpy非同期処理情報502、GPU非同期処理情報503又はMPI非同期処理情報504の終了フラグ519に「1」を設定する。
なお、同期処理情報エントリの同期id518が、先行する「全て」又は「複数」の非同期処理を示している場合、対応する全ての非同期処理のエントリの終了フラグ519が「1」に設定される。
一方、オーバーラップ期間判定モジュール401は、オーバーラップフラグ211が「1」であるか否かを判定する(1125)。
オーバーラップフラグ211が「1」でないと判定された場合、処理は実行されない。
オーバーラップフラグ211が「1」であると判定された場合、オーバーラップ期間判定モジュール401は、オーバーラップ期間内の全ての非同期処理が終了したか否かを判定する(1126)。
本実施形態では、性能分析モジュール202は、任意の同期処理が終了することによって、対応する非同期処理の終了を検知する。さらに、終了した当該非同期処理の他に実行中の非同期処理が存在しない場合に、当該任意の非同期処理が終了した時がオーバーラップ期間の終了点として特定される。
具体的には、オーバーラップ期間判定モジュール401は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205を参照して、同期id518に識別子が格納される全てのエントリの終了フラグ519が「1」であるか否かを判定する。
テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205において、同期id518に識別子が格納される全てのエントリの終了フラグ519が「1」である場合には、オーバーラップ期間内の全ての非同期処理が終了したと判定される。
オーバーラップ期間内の全ての非同期処理が終了していないと判定された場合、性能情報の取得処理が継続される。
オーバーラップ期間内の全ての非同期処理が終了したと判定された場合、オーバーラップ期間判定モジュール401は、オーバーラップ期間の終了と判定し、オーバーラップフラグ211を「0」に設定し、さらに、テーブル識別子212を「0」に設定する(1127)。これによって、性能分析モジュール202は、現在オーバーラップ期間内の処理が実行されていないことを把握できる。
一方、CPU情報取得モジュール402は、オーバーラップフラグ211が「1」であるか否かを判定する(1128)。
オーバーラップフラグ211が「1」でないと判定された場合、CPU処理の性能情報は取得されない。
オーバーラップフラグ211が「1」であると判定された場合、CPU情報取得モジュール402は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205にCPU処理情報501のエントリを生成し、生成されたCPU処理情報501に性能情報を格納する(1129)。これは、同期処理が完了した後、新たにCPU処理が起動されるためである。
具体的には、CPU情報取得モジュール402は、同期処理完了情報805に含まれる命令列のライン番号に「1」加算した値をCPU処理情報501の開始line511に格納し、同期処理完了情報805に対応する同期処理が完了した時刻を開始時刻514に格納する。また、CPU情報取得モジュール402は、ハードウェアモニタを呼び出し、開始命令カウンタ及び開始FLOPカウンタの値を取得し、取得された値を開始命令カウンタ601及び開始FLOPカウンタ603のそれぞれに格納する。
なお、ループ内のCPU処理の場合には、既存のCPU処理情報501が更新される。当該処理は、手順1116と同一の処理である。
Doループ情報806が入力された場合、以下のような処理が実行される。
オーバーラップ期間判定モジュール401は、オーバーラップフラグ211が「1」であるか否かを判定する(1130)。
オーバーラップフラグ211が「1」でないと判定された場合、処理は実行されない。
オーバーラップフラグ211が「1」であると判定された場合、オーバーラップ期間判定モジュール401は、Doループ情報806がループ処理の入口処理命令又はループ処理の出口処理命令の何れであるか判定する(1131)。
Doループ情報806がループ処理の入口処理命令であると判定された場合、オーバーラップ期間判定モジュール401は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205において、オーバーラップ期間情報500のDo−id513にループ処理の識別子を格納する(1132)。
Doループ情報806がループ処理の出口処理命令であると判定された場合、オーバーラップ期間判定モジュール401は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205において、オーバーラップ期間情報500のDo−id513からループ処理の識別子を削除して、さらに「0」を格納する(1133)。
計測終了情報807が入力されると、分析結果出力モジュール406は、GPUプロファイラ208を停止し、GPU非同期処理の実行時間516を更新する(1136)。
具体的には、GPU非同期処理情報209に格納される性能情報がシーケンシャル番号順に読み出され、Memcpy非同期処理情報502及びGPU非同期処理情報503のシーケンシャル番号611に対応するGPU非同期処理の実行時間が実行時間516に格納される。シーケンシャル番号611に複数のシーケンシャル番号が格納されている場合は、対応するGPU非同期処理の実行時間の合計が実行時間516に格納される。
さらに分析結果出力モジュール406は、オーバーラップ管理情報210からオーバーラップ期間性能情報テーブル205を読み出し、分析結果をオーバーラップ計測情報810として出力する(1134)。
図12は、本発明の第1の実施形態における性能分析処理の流れを説明するフローチャートである。
性能分析モジュール202は、計測開始情報801が入力されるとオーバーラップ期間の性能情報の取得処理を開始する(ステップ1201)。
具体的には、性能分析モジュール202は、オーバーラップフラグ211に「0」を設定し、テーブル識別子212に「0」を設定し、また、シーケンシャル番号213に「0」を設定する。また、性能分析モジュール202は、GPUプロファイラ208を起動する。
実行モジュール302の実行中に非同期処理が起動されると、性能分析モジュール202は、非同期処理開始情報802を取得し、オーバーラップ期間内であるか否かを判定する(ステップ1202)。すなわち、起動された非同期処理が最初に起動された非同期処理であるか否かが判定される。
具体的には、性能分析モジュール202は、オーバーラップフラグ211が「0」であるか否かを判定する。オーバーラップフラグ211が「0」である場合、最初に起動された非同期処理であるため、オーバーラップの開始と判定される。
オーバーラップ期間内であると判定された場合、性能分析モジュール202は、ステップ1204に進む。これは、すでに、オーバーラップ期間の性能情報の取得処理が実行されていることを表すためである。
オーバーラップ期間内でないと判定された場合、性能分析モジュール202は、オーバーラップ管理情報210を参照して、対応するオーバーラップ期間性能情報テーブル205が存在するか否かを判定する(ステップ1203)。すなわち、ループ処理内のオーバーラップ期間であるか否かが判定される。
具体的には、性能分析モジュール202は、非同期処理開始情報802に含まれる命令列のライン番号と、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205におけるオーバーラップ期間情報500の開始line511とが一致するか否かを判定する。
非同期処理開始情報802に含まれる命令列のライン番号と、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205におけるオーバーラップ期間情報500の開始line511とが一致する場合には、既存のオーバーラップ期間性能情報テーブル205が存在すると判定される。
対応するオーバーラップ期間性能情報テーブル205が存在すると判定された場合、性能分析モジュール202は、ステップ1204に進む。このとき、既存のオーバーラップ期間性能情報テーブル205を表す識別子がテーブル識別子212に格納され、当該オーバーラップ期間性能情報テーブル205におけるオーバーラップ期間情報500の期間回数517が更新される。また、オーバーラップフラグ211に「1」が設定される。以下、既存のオーバーラップ期間性能情報テーブル205の情報が更新されることとなる。
既存のオーバーラップ期間性能情報テーブル205が存在しないと判定された場合、性能分析モジュール202は、新たなオーバーラップ期間性能情報テーブル205を生成する(ステップ1205)。
具体的には、以下の処理が実行される。
性能分析モジュール202は、まず、非同期処理開始情報802に含まれる命令列のライン番号をテーブル識別子212に格納する。
また、性能分析モジュール202は、オーバーラップ期間性能情報テーブル205を生成して、当該テーブルのオーバーラップ期間情報500の開始line511に、非同期処理開始情報802に含まれる命令列のライン番号を格納する。さらに、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205に、非同期処理開始情報802に対応する非同期処理のエントリを生成し、当該エントリに必要な情報を格納する。その後、性能分析モジュール202は、オーバーラップフラグ211に「1」を設定する。
なお、非同期処理開始情報802が入力された場合の処理については、図13A〜図13Cを用いて後述する。
次に、性能分析モジュール202は、非同期処理、同期処理、及びループ処理の性能情報を取得する(ステップ1204)。
性能分析モジュール202は、同期処理完了情報805が入力されると、オーバーラップ期間の終了であるか否かを判定する(ステップ1206)。すなわち、オーバーラップ期間内の全ての非同期処理が終了したが否かが判定される。
具体的には、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205を参照して、同期id518に値が格納されたエントリの終了フラグ519が全て「1」であるか否かを判定する。同期id518に値が格納されたエントリの終了フラグ519が全て「1」である場合には、オーバーラップ期間の終了と判定される。
オーバーラップ期間の終了でないと判定された場合、性能分析モジュール202は、ステップ1204に戻り、オーバーラップ期間の終了まで、性能情報の取得処理を継続する。
オーバーラップ期間の終了であると判定された場合、性能分析モジュール202は、オーバーラップフラグ211を「0」及びテーブル識別子212を「0」に更新して、出力情報を生成する(ステップ1207)。
具体的には、性能分析モジュール202は、オーバーラップ管理情報210からオーバーラップ期間性能情報テーブル205を読み出し、読み出されたオーバーラップ期間性能情報テーブル205に基づいて、オーバーラップ計測情報810を生成する。
なお、このとき、性能分析モジュール202は、GPUプロファイラ208を呼び出して、GPU非同期処理情報209からGPU非同期処理の実行時間を取得する。
次に、性能分析モジュール202は、実行モジュール302が終了したか否かを判定する(ステップ1208)。
実行モジュール302が終了していないと判定された場合、性能分析モジュール202は、ステップ1202に戻り同様の処理を実行する。
実行モジュール302が終了したと判定された場合、性能分析モジュール202は、処理を終了する。
図13A〜図13Cは、本発明の実施形態の性能分析モジュール202が非同期処理開始情報802を入力された場合に実行する処理を説明するフローチャートである。
図13Aは、MPI通信処理及びGPU非同期処理に共通の処理を示す。
性能分析モジュール202は、非同期処理開始情報802が入力されると、オーバーラップフラグ211が「0」であるか否かを判定する(ステップ1301)。すなわち、非同期処理開始情報802に対応する非同期処理以外に他の非同期処理が実行されていないか否かが判定される。
オーバーラップフラグ211が「0」でないと判定された場合、性能分析モジュール202は、ステップ1305に進む。
オーバーラップフラグ211が「0」であると判定された場合、性能分析モジュール202は、ループ内のオーバーラップ期間であるか否かを判定する(ステップ1302)。すなわち、オーバーラップ管理情報210に、すでに対応するオーバーラップ期間性能情報テーブル205が存在するか否かが判定される。
具体的には、性能分析モジュール202は、オーバーラップ期間性能情報テーブル205のオーバーラップ期間情報500の開始line511が、非同期処理開始情報802に含まれる命令列のライン番号と一致するオーバーラップ期間性能情報テーブル205がオーバーラップ管理情報210に存在するか否かを判定する。
ループ内のオーバーラップ期間であると判定された場合、性能分析モジュール202は、テーブル識別子212に既存のオーバーラップ期間性能情報テーブル205の識別子を格納し、既存のオーバーラップ期間性能情報テーブル205を更新する(ステップ1303)。その後、性能分析モジュール202はステップ1305に進む。
具体的には、性能分析モジュール202は、非同期処理開始情報802に含まれる命令列のライン番号をテーブル識別子212に格納する。また、性能分析モジュール202は、既存のオーバーラップ期間性能情報テーブル205におけるオーバーラップ期間情報500の期間回数517の値を「1」加算する。
ループ内のオーバーラップ期間でないと判定された場合、性能分析モジュール202は、新たにオーバーラップ期間性能情報テーブル205を生成し、生成されたテーブルの識別子をテーブル識別子に格納する(ステップ1304)。その後、性能分析モジュール202はステップ1305に進む。
具体的には、性能分析モジュール202は、テーブル識別子212に非同期処理開始情報802に含まれる命令列のライン番号を格納する。また、性能分析モジュール202は、生成されたオーバーラップ期間性能情報テーブル205におけるオーバーラップ期間情報500の開始line511に、非同期処理開始情報802に含まれる命令列のライン番号を格納する。さらに、性能分析モジュール202は、当該オーバーラップ期間性能情報テーブル205のオーバーラップ期間情報500の期間回数517に「1」を格納する。
次に、性能分析モジュール202は、オーバーラップフラグ211が「1」であるか否かを判定する(ステップ1305)。
オーバーラップフラグ211が「1」であると判定された場合、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205のCPU処理情報510にCPU処理の終了に関する情報を格納する(ステップ1306)。
これは、すでにオーバーラップ期間における性能情報の取得処理が開始されおり、非同期処理の起動によってCPU処理が終了したことを表すためである。
なお、終了したCPU処理に対応するCPU処理情報510のDo−id513に識別子が格納されている場合、すなわち、ループ内のCPU処理である場合には、当該CPU処理情報510に情報が蓄積される。
オーバーラップフラグ211が「1」でないと判定された場合、性能分析モジュール202は、オーバーラップ期間の開始であると判定して、オーバーラップフラグ211に「1」を設定し(ステップ1307)、ステップ1308に進む。これは、まだ、オーバーラップ期間とは判定されていないためである。
次に、性能分析モジュール202は、非同期処理開始情報802がMPI通信処理、又はGPU非同期処理(カーネル実行処理又はコピー処理)の何れであるかを判定する(ステップ1308)。
性能分析モジュール202は、起動された非同期処理に対応する命令列に基づいて、MPI通信処理、又はGPU非同期処理(カーネル実行処理又はコピー処理)の何れであるかを判定できる。
図13Bは、非同期処理開始情報802がMPI通信処理である場合の処理を示す。
ステップ1308において、非同期処理開始情報802がMPI通信処理であると判定された場合、性能分析モジュール202は、MPI通信処理に関する性能情報の取得処理を開始する。
まず、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205を参照して、ループ内のMPI通信処理であるか否かを判定する(ステップ1310)。
具体的には、性能分析モジュール202は、オーバーラップ期間情報500のDo−id513に値が設定されているか否かを判定する。オーバーラップ期間情報500のDo−id513に「0」以外の値が設定されている場合、ループ内のMPI通信処理であると判定される。
ループ内のMPI通信処理でないと判定された場合、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205に、新たなMPI非同期処理情報504を生成し、必要な情報を格納する(ステップ1311)。
具体的には、性能分析モジュール202は、非同期処理開始情報802に含まれる命令列のライン番号を開始line511に格納し、期間回数517に「1」を格納する。また、性能分析モジュール202は、非同期処理開始情報802に基づいて、同期id518、MPI種別621、通信サイズ622、及び宛先node数623のそれぞれに値を格納する。また、性能分析モジュール202は、通信時間推定情報207を参照して、MPI通信処理の推定時間を算出し、算出された推定時間を実行時間516に格納する。さらに、性能分析モジュール202は、終了フラグ519に「0」を格納する。
ループ内のMPI通信処理であると判定された場合、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205を参照して、対応するMPI非同期処理情報504が存在するか否かを判定する(ステップ1312)。すなわち、起動されたMPI通信処理に対応するMPI非同期処理情報504がすでに存在するか否かが判定される。
具体的には、以下のような処理が実行される。
性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205の開始line511を参照して、非同期処理開始情報802に含まれる命令列のライン番号と一致するMPI非同期処理情報504を検索する。
前述した検索の結果、非同期処理開始情報802に含まれる命令列のライン番号と一致するMPI非同期処理情報504が存在する場合、性能分析モジュール202は、さらに、当該MPI非同期処理情報504のDo−id513が、オーバーラップ期間情報500のDo−id513と一致するか否かを判定する。
MPI非同期処理情報504のDo−id513が、オーバーラップ期間情報500のDo−id513と一致すると判定された場合、対応するMPI非同期処理情報504が存在すると判定される。
対応するMPI非同期処理情報504が存在しないと判定された場合、性能分析モジュール202は、新たにMPI非同期処理情報504を生成する(ステップ1311)。
具体的には、性能分析モジュール202は、非同期処理開始情報802に含まれる命令列のライン番号を開始line511に格納し、期間回数517に「1」を格納する。また、性能分析モジュール202は、非同期処理開始情報802に基づいて、同期id518、MPI種別621、通信サイズ622、及び宛先node数623のそれぞれに値を格納する。また、性能分析モジュール202は、通信時間推定情報207を参照して、MPI通信処理の推定時間を算出し、算出された推定時間を実行時間516に格納する。
さらに、性能分析モジュール202は、終了フラグ519に「0」を格納する。また、性能分析モジュール202は、オーバーラップ期間情報500のDo−id513と同一の識別子をDo−id513に格納する。
対応するMPI非同期処理情報504が存在すると判定された場合、性能分析モジュール202は、既存のMPI非同期処理情報504の情報を更新する(ステップ1313)。
具体的には、開始line511、Do−id513、実行時間516、期間回数517、同期id518、MPI種別621、通信サイズ622、及び宛先node数623が更新される。
より詳細には、性能分析モジュール202は、非同期処理開始情報802に含まれる命令列のライン番号を開始line511に格納する。また、性能分析モジュール202は、非同期処理開始情報802に基づいて、同期id518、MPI種別621、通信サイズ622、及び宛先node数623のそれぞれの値を格納する。
さらに、性能分析モジュール202は、終了フラグ519に「0」を格納する。また、性能分析モジュール202は、通信時間推定情報207を参照して、MPI通信処理の推定時間を算出し、実行時間516に格納される値に算出された推定時間を加算する。すなわち、ループ毎の実行時間の合計値が格納される。また、性能分析モジュール202は、期間回数517の値を「1」加算し、オーバーラップ期間情報500のDo−id513と同一の識別子をDo−id513に格納する。
図13Cは、非同期処理開始情報802がGPU非同期処理である場合の処理を示す。
ステップ1308において、非同期処理開始情報802がGPU非同期処理(カーネル実行処理又はコピー処理)であると判定された場合、性能分析モジュール202は、GPU非同期処理(カーネル実行処理又はコピー処理)に関する性能情報の取得処理を開始する。なお、カーネル実行処理及びコピー処理の何れでも実行される処理は同一であるため、以下では、カーネル実行処理を例に説明する。
まず、性能分析モジュール202は、シーケンシャル番号213を更新する(ステップ1320)。具体的には、性能分析モジュール202は、シーケンシャル番号213に格納された値に「1」を加算する。
次に、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205を参照して、ループ内のカーネル実行処理であるか否かを判定する(ステップ1321)。
具体的には、性能分析モジュール202は、オーバーラップ期間情報500のDo−id513に値が設定されているか否かを判定する。オーバーラップ期間情報500のDo−id513に「0」以外の値が設定されている場合、ループ内のカーネル実行処理であると判定される。
ループ内のカーネル実行処理でないと判定された場合、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205に、新たなGPU非同期処理情報503を生成し、必要な情報を格納する(ステップ1322)。
具体的には、性能分析モジュール202は、非同期処理開始情報802に含まれる命令列のライン番号を開始line511に格納し、また、期間回数517に「1」を格納する。また、性能分析モジュール202は、非同期処理開始情報802に基づいて同期id518に値を格納する。また、性能分析モジュール202は、ステップ1320における更新処理後のシーケンシャル番号213の値をシーケンシャル番号611に格納する。さらに、性能分析モジュール202は、終了フラグ519に「0」を格納する。
性能分析モジュール202は、実行モジュール302の終了後、シーケンシャル番号611に基づいて、GPUプロファイラ208に問い合わせを行い、GPU非同期処理情報209からカーネル実行処理の実行時間を取得する。性能分析モジュール202は、実行時間516に取得した実行時間を格納する。
ループ内のカーネル実行処理であると判定された場合、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205を参照して、対応するGPU非同期処理情報503が存在するか否かを判定する(ステップ1323)。すなわち、起動されたカーネル実行処理に対応するGPU非同期処理情報503がすでに存在するか否かが判定される。
具体的には、以下のような処理が実行される。
性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205の開始line511を参照して、非同期処理開始情報802に含まれる命令列のライン番号と一致するGPU非同期処理情報503を検索する。
前述した検索の結果、非同期処理開始情報802に含まれる命令列のライン番号と一致するGPU非同期処理情報503が存在する場合、性能分析モジュール202は、さらに、当該GPU非同期処理情報503のDo−id513が、オーバーラップ期間情報500のDo−id513と一致するか否かを判定する。GPU非同期処理情報503のDo−id513が、オーバーラップ期間情報500のDo−id513と一致すると判定された場合、対応するGPU非同期処理情報503が存在すると判定される。
対応するGPU非同期処理情報503が存在しないと判定された場合、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205に、新たなGPU非同期処理情報503を生成し、必要な情報を格納する(ステップ1321)。
具体的には、性能分析モジュール202は、非同期処理開始情報802に含まれる命令列のライン番号を開始line511に格納し、また、期間回数517に「1」を格納する。また、性能分析モジュール202は、非同期処理開始情報802に基づいて同期id518に値を格納する。また、性能分析モジュール202は、ステップ1320における更新処理後のシーケンシャル番号213の値をシーケンシャル番号611に格納する。
さらに、性能分析モジュール202は、終了フラグ519に「0」を格納する。また、性能分析モジュール202は、オーバーラップ期間情報500のDo−id513と同一の識別子をDo−id513に格納する。
さらに、性能分析モジュール202は、実行モジュール302の終了後、シーケンシャル番号611に基づいて、GPUプロファイラ208に問い合わせを行い、GPU非同期処理情報209からカーネル実行処理の実行時間を取得する。性能分析モジュール202は、実行時間516に取得した実行時間を格納する。
対応するGPU非同期処理情報503が存在すると判定された場合、性能分析モジュール202は、既存のGPU非同期処理情報503を更新する(ステップ1324)。
具体的には、開始line511、Do−id513、期間回数517、同期id518、終了フラグ519、及びシーケンシャル番号611が更新される。
より詳細には、性能分析モジュール202は、非同期処理開始情報802に含まれる命令列のライン番号を開始line511に格納する。また、性能分析モジュール202は、非同期処理開始情報802に基づいて同期id518に値を格納する。
さらに、性能分析モジュール202は、終了フラグ519に「0」を格納する。また、性能分析モジュール202は、期間回数517を「1」加算し、オーバーラップ期間情報500のDo−id513と同一の識別子をDo−id513に格納する。また、性能分析モジュール202は、更新後のシーケンシャル番号213の値をシーケンシャル番号611に格納する。なお、ループ毎にシーケンシャル番号213は異なるため、シーケンシャル番号611には、ループ毎のシーケンシャル番号213が複数格納される。
さらに、性能分析モジュール202は、実行モジュール302の終了後、シーケンシャル番号611に基づいて、GPUプロファイラ208に問い合わせを行い、GPU非同期処理情報209からカーネル実行処理の実行時間を取得する。性能分析モジュール202は、実行時間516に取得した実行時間を格納する。このとき、シーケンシャル番号611には複数のシーケンシャル番号が格納されるため、実行時間516には、各シーケンシャル番号に対応する処理の実行時間の合計値が格納される。
図14は、本発明の第1の実施形態の性能分析モジュール202が非同期処理完了情報803を入力された場合に実行する処理を説明するフローチャートである。
図14に示す処理は、オーバーラップフラグ211が「1」である場合に実行される処理である。したがって、オーバーラップフラグ211が「0」である場合には、図14に示す処理は実行されない。
非同期処理完了情報803が入力されると、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205を参照して、次に実行されるCPU処理がループ内のCPU処理であるか否かを判定する(ステップ1401)。
具体的には、性能分析モジュール202は、オーバーラップ期間情報500のDo−id513に値が設定されているか否かを判定する。オーバーラップ期間情報500のDo−id513に「0」以外の値が設定されている場合、ループ内のCPU処理であると判定される。
ループ内のCPU処理でないと判定された場合、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205に、新たなCPU処理情報501を生成し、必要な情報を格納する(ステップ1402)。
具体的には、性能分析モジュール202は、非同期処理完了情報803に含まれる命令列のライン番号に「1」加算した値を開始line511に格納し、非同期処理完了情報803に対応する処理が起動された時刻を開始時刻514に格納する。また、性能分析モジュール202は、期間回数517に「1」を格納する。また、性能分析モジュール202は、非同期処理完了情報803に基づいて、同期id518の値を格納する。
さらに、性能分析モジュール202は、ハードウェアモニタに問い合わせることによって、開始命令カウンタ601及び開始FLOPカウンタ603の値を取得し、取得された値を格納する。
ループ内のCPU処理であると判定された場合、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205を参照して、対応するCPU処理情報501が存在するか否かを判定する(ステップ1403)。すなわち、起動されたCPU処理に対応するCPU処理情報501がすでに存在するか否かが判定される。
具体的には、以下のような処理が実行される。
性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205の開始line511を参照して、非同期処理完了情報803に含まれる命令列のライン番号に「1」加算した値と一致するCPU処理情報501が存在するか否かを検索する。
前述した検索の結果、非同期処理開始情報802に含まれる命令列のライン番号に「1」加算した値と一致するCPU処理情報501が存在する場合、性能分析モジュール202は、さらに、当該CPU処理情報501のDo−id513が、オーバーラップ期間情報500のDo−id513と一致するか否かを判定する。
CPU処理情報501のDo−id513が、オーバーラップ期間情報500のDo−id513と一致すると判定された場合、対応するCPU処理情報501が存在すると判定される。
対応するCPU処理情報501が存在しないと判定された場合、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205に、新たなCPU処理情報501を生成し、必要な情報を格納する(ステップ1402)。
具体的には、性能分析モジュール202は、非同期処理完了情報803に含まれる命令列のライン番号に「1」加算した値を開始line511に格納し、非同期処理完了情報803に対応する処理が起動された時刻を開始時刻514に格納する。また、性能分析モジュール202は、期間回数517に「1」を格納する。また、性能分析モジュール202は、非同期処理完了情報803に基づいて、同期id518に値を格納する。さらに、性能分析モジュール202は、オーバーラップ期間情報500のDo−id513と同一の識別子をDo−id513に格納する。
さらに、性能分析モジュール202は、ハードウェアモニタに問い合わせることによって、開始命令カウンタ601、及び開始FLOPカウンタ603の値を取得し、取得された値を格納する。
対応するCPU処理情報501が存在すると判定された場合、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205の既存のCPU処理情報501を更新する(ステップ1404)。
具体的には、開始line511、Do−id513、開始時刻514、期間回数517、同期id518、開始命令カウンタ601、及び開始FLOPカウンタ603が更新される。
より詳細には、非同期処理完了情報803に含まれる命令列のライン番号に「1」加算した値を開始line511に格納し、非同期処理完了情報803に対応する処理が起動された時刻を開始時刻514に格納する。また、性能分析モジュール202は、非同期処理完了情報803に基づいて、同期id518に値を格納する。
さらに、性能分析モジュール202は、期間回数517の値を「1」加算し、オーバーラップ期間情報500のDo−id513と同一の識別子をDo−id513に格納する。
さらに、性能分析モジュール202は、ハードウェアモニタに問い合わせることによって、開始命令カウンタ601及び開始FLOPカウンタ603の値を取得し、取得された値を格納する。ここで、開始命令カウンタ601及び開始FLOPカウンタ603はループ毎の値が格納される。すなわち、ループ毎に値が上書きされる。
図15は、本発明の第1の実施形態の性能分析モジュール202が同期処理開始情報804を入力された場合に実行する処理を説明するフローチャートである。
図15に示す処理は、オーバーラップフラグ211が「1」である場合に実行される処理である。したがって、オーバーラップフラグ211が「0」である場合には、図15に示す処理は実行されない。
なお、MPI通信処理又はGPU非同期処理の何れでも同一の処理が実行される。以下、同期処理開始情報804がMPI通信処理に対する同期処理である場合を例に説明する。
同期処理開始情報804が入力されると、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205を参照して、同期処理の起動前に実行していたCPU処理がループ内のCPU処理であるか否かを判定する(ステップ1501)。
当該判定は、ステップ1401と同一の方法を用いることが考えられる。すなわち、オーバーラップ期間情報500のDo−id513に「0」以外の値が設定されているか否かが判定される。
ループ内のCPU処理でないと判定された場合、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205を参照して、対応するCPU処理情報501に必要な情報を格納する(ステップ1502)。
具体的には、性能分析モジュール202は、同期処理開始情報804に含まれる命令列のライン番号を「1」減算した値を終了line512に格納し、同期処理開始情報804に対応する同期処理が起動された時刻を終了時刻515に格納する。また、性能分析モジュール202は、期間回数517に「1」を格納する。
また、性能分析モジュール202は、ハードウェアモニタに問い合わせることによって、終了命令カウンタ602、終了FLOPカウンタ604の値を取得し、取得された値を格納する。
さらに、性能分析モジュール202は、実行時間、命令数及びFLOP数を算出し、算出されたそれぞれの値を実行時間516、命令数605及びFLOP数606に格納する。
ループ内のCPU処理であると判定された場合、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205を参照して、当該ループの識別子と同一のDo−id513が格納されたCPU処理情報501を更新する(ステップ1504)。
具体的には、性能分析モジュール202は、同期処理開始情報804に含まれる命令列のライン番号を「1」減算した値を終了line512に格納し、同期処理開始情報804に対応する同期処理が起動された時刻を終了時刻515に格納する。
また、性能分析モジュール202は、ハードウェアモニタに問い合わせることによって、終了命令カウンタ602、終了FLOPカウンタ604の値を取得し、取得された値を格納する。
さらに、性能分析モジュール202は、期間回数517の値を「1」加算する。また、性能分析モジュール202は、実行時間、命令数及びFLOP数を算出し、算出されたそれぞれの値を実行時間516、命令数605及びFLOP数606に格納する。なお、実行時間516、命令数605及びFLOP数606には、ループ毎の値の合計値が格納される。
次に、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205を参照して、起動された同期処理がループ内の同期処理であるか否かを判定する(ステップ1503)。
当該判定は、ステップ1401と同一の方法を用いることが考えられる。すなわち、オーバーラップ期間情報500のDo−id513に「0」以外の値が設定されているか否かが判定される。
ループ内の同期処理でないと判定された場合、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205に新たなMPI同期処理情報506を生成し、必要な情報を格納する(ステップ1505)。
具体的には、性能分析モジュール202は、同期処理開始情報804に含まれる命令列のライン番号を開始line511に格納し、同期処理開始情報804に対応する同期処理が起動された時刻を開始時刻514に格納する。また、性能分析モジュール202は、同期処理開始情報804に基づいて、同期id518に値を格納する。
ループ内の同期処理であると判定された場合、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205を参照して、対応するMPI同期処理情報506が存在するか否かを判定する(ステップ1506)。
具体的には、以下のような処理が実行される。
性能分析モジュール202は、オーバーラップ期間性能情報テーブル205の開始line511を参照して、同期処理開始情報804に含まれる命令列のライン番号と一致するMPI同期処理情報506が存在するか否かを検索する。
前述した検索の結果、同期処理開始情報804に含まれる命令列のライン番号と一致するMPI同期処理情報506が存在する場合、性能分析モジュール202は、さらに、当該MPI同期処理情報506のDo−id513が、オーバーラップ期間情報500のDo−id513と一致するか否かを判定する。
MPI同期処理情報506のDo−id513が、オーバーラップ期間情報500のDo−id513と一致すると判定された場合、対応するMPI同期処理情報506が存在すると判定される。
対応するMPI同期処理情報506が存在しないと判定された場合、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205に、新たなMPI同期処理情報506を生成し、生成されたMPI同期処理情報506に必要な情報を格納する(ステップ1505)。
具体的には、性能分析モジュール202は、同期処理開始情報804に含まれる命令列のライン番号を開始line511に格納し、同期処理開始情報804に対応する同期処理が起動された時刻を開始時刻514に格納する。また、性能分析モジュール202は、同期処理開始情報804に基づいて、同期id518に値を格納する。さらに、性能分析モジュール202は、オーバーラップ期間情報500のDo−id513と同一の識別子をDo−id513に格納する。
対応するMPI同期処理情報506が存在すると判定された場合、性能分析モジュール202は、既存のMPI同期処理情報506を更新する(ステップ1507)。
具体的には、性能分析モジュール202は、開始line511、Do−id513、開始時刻514、及び同期id518を更新する。
より詳細には、性能分析モジュール202は、同期処理開始情報804に含まれる命令列のライン番号を開始line511に格納し、同期処理開始情報804に対応する同期処理が起動された時刻を開始時刻514に格納する。また、性能分析モジュール202は、同期処理開始情報804に基づいて、同期id518に値を格納する。さらに、性能分析モジュール202は、オーバーラップ期間情報500のDo−id513と同一の識別子をDo−id513に格納する。
図16は、本発明の第1の実施形態の性能分析モジュール202が同期処理完了情報805を入力された場合に実行する処理を説明するフローチャートである。
図16に示す処理は、オーバーラップフラグ211が「1」である場合に実行される処理である。したがって、オーバーラップフラグ211が「0」である場合には、図16に示す処理は実行されない。
なお、MPI通信処理又はGPU非同期処理(カーネル実行処理又はコピー処理)の何れでも同一の処理である。以下、同期処理完了情報805が、MPI通信処理の同期処理である場合を例に説明する。
同期処理完了情報805が入力されると、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205を参照して、終了した同期処理がループ内の同期処理であるか否かを判定する(ステップ1601)。
当該判定は、ステップ1401と同一の方法を用いることが考えられる。すなわち、オーバーラップ期間情報500のDo−id513に「0」以外の値が設定されているか否かが判定される。
ループ内の同期処理でないと判定された場合、性能分析モジュール202は、対応するMPI同期処理情報506に必要な情報を格納する(ステップ1602)。
具体的には、性能分析モジュール202は、同期処理完了情報805に対応する同期処理が終了した時刻を終了時刻515に格納する。また、性能分析モジュール202は、期間回数517に「1」を格納する。また、性能分析モジュール202は、同期処理完了情報805に対応する同期処理の実行時間を算出し、算出された値を実行時間516に格納する。
ループ内の同期処理であると判定された場合、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205を参照して、オーバーラップ期間情報500のDo−id513と同一の識別子が格納されたMPI同期処理情報506を更新する(ステップ1603)。
具体的には、性能分析モジュール202は、同期処理完了情報805に対応する同期処理が終了した時刻を終了時刻515に格納する。また、性能分析モジュール202は、期間回数517の値を「1」加算する。
さらに、性能分析モジュール202は、同期処理の実行時間を算出し、実行時間516に算出された値を加算する。すなわち、ループ処理毎の実行時間の合計値が格納される。
次に、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205を参照して、終了した同期処理の対象となる非同期処理のエントリの終了フラグ519を「1」に設定する(ステップ1604)。
具体的には、性能分析モジュール202は、MPI同期処理情報506の終了フラグ519に「1」を設定する。また、性能分析モジュール202は、当該MPI同期処理情報506の同期id518と同一の同期id518である他のMPI非同期処理情報504の終了フラグ519に「1」を設定する。
性能分析モジュール202は、オーバーラップ期間が終了したか否かを判定する(ステップ1605)。
具体的には、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205において、同期id518に識別子が格納される全てのエントリの終了フラグ519に「1」が格納されるか否かが判定される。
同期id518に識別子が格納される全てのエントリの終了フラグ519に「1」が格納される場合、オーバーラップ期間が終了したと判定される。
オーバーラップ期間が終了したと判定された場合、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205の取得処理を終了し、初期化処理を実行する(ステップ1606)。
具体的には、性能分析モジュール202は、オーバーラップフラグ211を「0」に設定し、テーブル識別子212を「0」に設定する。これによって、性能分析モジュール202は、オーバーラップ期間が終了し、また、更新中のオーバーラップ期間性能情報テーブル205がないことを把握できる。
オーバーラップ期間が終了していないと判定された場合、同期処理の終了後、新たなCPU処理が実行されるため、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205を参照して、起動されたCPU処理がループ内のCPU処理であるか否かを判定する(ステップ1607)。
当該処理はステップ1401と同一の処理であり、具体的には、性能分析モジュール202は、オーバーラップ期間情報500のDo−id513に値が設定されているか否かを判定する。オーバーラップ期間情報500のDo−id513に「0」以外の値が設定されている場合、ループ内のCPU処理であると判定される。
ループ内のCPU処理でないと判定された場合、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205に、新たなCPU処理情報501を生成し、必要な情報を格納する(ステップ1608)。
当該処理はステップ1402と同一の処理であり、具体的には、性能分析モジュール202は、開始line511、開始時刻514、期間回数517及び同期id518にそれぞれの値を格納する。
さらに、性能分析モジュール202は、ハードウェアモニタに問い合わせることによって、開始命令カウンタ601及び開始FLOPカウンタ603の値を取得し、取得された値を格納する。
ループ内のCPU処理であると判定された場合、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205を参照して、対応するCPU処理情報501が存在するか否かを判定する(ステップ1609)。
当該処理は、ステップ1403と同一の処理であり、具体的には、以下のような処理が実行される。
性能分析モジュール202は、オーバーラップ期間性能情報テーブル205の開始line511を参照して、同期処理完了情報805に含まれる命令列のライン番号に「1」加算したライン番号と一致するCPU処理情報501が存在するか否かを検索する。
前述した検索の結果、同期処理完了情報805に含まれる命令列のライン番号に「1」加算したライン番号と一致するCPU処理情報501が存在する場合、性能分析モジュール202は、さらに、当該CPU処理情報501のDo−id513が、オーバーラップ期間情報500のDo−id513と一致するか否かを判定する。
CPU処理情報501のDo−id513が、オーバーラップ期間情報500のDo−id513と一致すると判定された場合、対応するCPU処理情報501が存在すると判定される。
対応するCPU処理情報501が存在しないと判定された場合、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205に、新たなCPU処理情報501を生成し、必要な情報を格納する(ステップ1608)。
当該処理はステップ1402と同一の処理であり、具体的には、性能分析モジュール202は、開始line511、Do−id513、開始時刻514、期間回数517、同期id518に値を格納する。なお、期間回数517には「1」が格納され、Do−id513には、オーバーラップ期間情報500のDo−id513と同一の識別子が格納される。
さらに、性能分析モジュール202は、ハードウェアモニタに問い合わせることによって、開始命令カウンタ601、及び開始FLOPカウンタ603の値を取得し、取得された値を格納する。
対応するCPU処理情報501が存在すると判定された場合、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205の既存のCPU処理情報501を更新する(ステップ1610)。
当該処理はステップ1404と同一の処理であり、具体的には、開始line511、Do−id513、開始時刻514、期間回数517、同期id518、開始命令カウンタ601、及び開始FLOPカウンタ603が更新される。
なお、開始時刻514、開始命令カウンタ601、及び開始FLOPカウンタ603にはループ毎の値が格納され、期間回数517には「1」加算された値が格納される。また、Do−id513には、オーバーラップ期間情報500のDo−id513と同一の識別子が格納される。
図17は、本発明の第1の実施形態の性能分析モジュール202がDoループ情報806を入力された場合に実行する処理を説明するフローチャートである。
図17に示す処理は、オーバーラップフラグ211が「1」である場合に実行される処理である。したがって、オーバーラップフラグ211が「0」である場合には、図17に示す処理は実行されない。
性能分析モジュール202は、予め埋め込まれたトラップに基づいて、同期処理又は非同期処理が実行されたときループ処理であることを検知する。
その後、性能分析モジュール202は、Doループ情報806を参照してDoループ入口命令であるか否かを判定する(ステップ1701)。
Doループ入口命令であると判定された場合、性能分析モジュール202は、対応するオーバーラップ期間性能情報テーブル205を参照して、オーバーラップ期間情報500のDo−id513にループ処理の識別子を格納する(ステップ1702)。
Doループ出口命令であると判定された場合、性能分析モジュール202は、テーブル識別子212に対応するオーバーラップ期間性能情報テーブル205を参照して、オーバーラップ期間情報500のDo−id513からループ処理の識別子を削除する(ステップ1703)。
以下、本発明の適用例について説明する。
図18は、本発明の第1の実施形態におけるGPU非同期処理が記載されたソース301の一例を示す説明図である。図19は、本発明の第1の実施形態におけるオーバーラップ計測情報813の表示画面の一例を示す説明図である。
図19は、図18に示すソース301に対して、性能分析モジュール202が性能情報を取得した場合の表示画面の一例を示す図である。
図19では、CPU処理、コピー処理、及びカーネル実行処理のそれぞれの性能情報が表示されている。
CPU情報では、非同期処理の起動処理の実行時間と、ライン番号1008から開始するCPU処理、ライン番号1023から開始するCPU処理の性能情報、及び同期処理の性能情報が表示される。具体的には、実行時間、性能値GFLOPS(Giga FLoating−point Operations Per Second)及び待ち時間が表示される。
また、コピー処理では、CPU101(ホスト)からGPU105(デバイス)へのメモリコピーと、GPU105(デバイス)からCPU101(ホスト)へのメモリコピーとに分けて性能情報が表示される。コピー処理では、実行時間が性能情報として表示される。
カーネル実行処理では、実行時間が性能情報として表示される。
分析結果出力モジュール406が、オーバーラップ期間性能情報テーブル205に基づいて、図19に示す情報を出力できることは明らかである。
具体的には、分析結果出力モジュール406は、オーバーラップ管理情報210から各オーバーラップ期間性能情報テーブル205の各エントリの実行時間516及びFLOP数606を取得する。
次に、分析結果出力モジュール406は、各エントリの実行時間516を当該エントリの期間回数517で除算して実行時間及び待ち時間を算出する。また、分析結果出力モジュール406は、各CPU処理情報501のFLOP数606を、当該エントリの実行時間516と期間回数517との積で除算して性能値GFLOPSを算出する。
本実施形態では、オーバーラップ期間ごとに前述したような情報が表示される。なお、図19に示す表示画面は一例であって、オーバーラップ期間性能情報テーブル205に基づいて他の情報を表示してもよい。
図20は、本発明の実施形態におけるMPI通信処理が記載されたソース301の一例を示す説明図である。図21は、本発明の実施形態におけるオーバーラップ計測情報の表示画面の一例を示す説明図である。
図21は、図20に示すソース301に対して、性能分析モジュール202が性能情報を取得した場合の表示画面である。
図21では、ループ内のCPU処理、及びMPI通信処理の統計的な性能情報が表示される。
CPU処理では、ループ内のMPI通信処理の起動処理の平均実行時間と、ループ内のライン番号1008以下のCPU処理の平均実行時間とが表示される。
また、MPI通信処理では、送信処理と、受信処理とに分けて性能情報が表示される。MPI通信処理情報では、平均通信時間及び平均通信サイズが性能情報として表示される。
分析結果出力モジュール406は、オーバーラップ期間性能情報テーブル205に基づいて、図20に示す情報を出力できることは明らかである。
具体的には、分析結果出力モジュール406は、オーバーラップ管理情報210から各オーバーラップ期間性能情報テーブル205の各エントリの実行時間516を取得する。
次に、分析結果出力モジュール406は、各エントリの実行時間516を、当該エントリの期間回数517及びオーバーラップ期間情報500の期間回数517で除算して平均実行時間を算出する。
本実施形態では、オーバーラップ期間ごとに前述したような情報が表示される。なお、図21に示す表示画面は一例であって、オーバーラップ期間性能情報テーブル205に基づいて他の情報を表示してもよい。
また、本実施形態では、図19及び図21の表示情報を一つにまとめて表示してもよい。
なお、本実施形態では、CPU101単位の性能情報を取得したが本発明は限定されない。例えば、マルチコアのCPU101上で複数のスレッド又は複数のプロセスが実行されるような処理では、スレッド、プロセス、又はCPUコア単位の性能を取得することができる。これは、例えば、ハードウェアモニタに問い合わせる情報を変更することによって実現できる。またGPU105側の処理についても同様である。
[変形例]
変形例では、性能分析モジュール202の実現方法が異なる。以下、第1の実施形態との差異を中心に説明する。
図22は、本発明の変形例におけるメモリ102上に格納されるプログラム及び情報の一例を示す説明図である。
第1の実施形態と比較して、メモリ102にプロファイラ2201が格納され、当該プロファイラ2201が性能分析モジュール202を備える点が異なる。他の構成については第1の実施形態と同一である。
また、計算機システムの構成、性能分析モジュール202の構成は第1の実施形態と同一であるため説明を省略する。
図23は、本発明の変形例における計算機システムにおける各構成の論理的接続関係を示す説明図である。
プロファイラ2201は、ソース301を解析して、プログラムの実行開始と実行終了時に性能分析モジュール202を呼び出すトラップを埋め込む。また、ソース中のループ処理の開始直前とループ処理の終了直後に、性能分析モジュール202を呼び出し、当該ループ処理の識別子を取得するためのトラップを埋め込む。前述したトラップの埋め込み処理によって、トラップ埋め込みソース2301が生成される。
コンパイラ201は、トラップ埋め込みソース2301から実行形式のトラップ埋め込みロードモジュール203を生成する。
リンカ204は、トラップ埋め込みロードモジュール203とプロファイラ2201の性能分析モジュール202とをリンクすることによって実行モジュール302を生成する。
CPU101は、生成された実行モジュール302を実行する。実行モジュール302が実行されると、所定の処理が実行される。このとき、プロファイラ2201の性能分析モジュール202も同時に実行され、オーバーラップ期間における性能情報が取得される。
なお、性能分析モジュール202が実行する処理は、第1の実施形態と同一であるため説明を省略する。
さらに、本実施形態では、コンパイラ201又はプロファイラ2201は、プログラム(実行モジュール302)の実行開始及び終了、並びにループ箇所を特定するトラップを埋め込んだが、トラップを埋め込まない実装も考えられる。
例えば、非同期処理開始をPMPIなどによりトラップして、当該処理が最初の非同期処理であればオーバーラップ期間開始であると判定すればよい。この場合、1つのオーバーラップ期間内のループ処理の性能情報は別々の情報として出力されるが、ループ内のオーバーラップ期間の性能情報は統計的な情報としてまとめることが可能である。
また、コンパイラ201又はプロファイラ2201が、プログラム(実行モジュール302)の実行開始及び終了、並びにループ箇所を特定するトラップとして、非同期処理開始情報802及び非同期処理完了情報803だけでなく、同期処理開始情報804及び同期処理完了情報805を、性能分析モジュール202が取得できるようなトラップも埋め込む実装とすることも可能である。
また、本実施形態では、GPU非同期処理情報209がメモリ102上に格納される場合を示した。GPU非同期処理情報209がファイルに格納される場合でも、シーケンシャル番号611を用いることによって、ファイルから対応するGPU非同期処理の実行時間を取得して、同様の性能情報を表示することが可能である。
さらに本実施形態では、プログラム実行開始時にGPUプロファイラ208を起動し、プログラム実行終了時に停止する場合を示した。オーバーラップ期間開始時にGPUプロファイラ208を起動し、オーバーラップ期間終了時に停止する実装も考えられる。その場合は、オーバーラップ期間開始時にシーケンシャル番号213を初期化し、オーバーラップ期間内のみシーケンシャル番号213を更新すれば同様の処理を実現可能である。
なお、本実施形態では、CPU101、GPU105を備える計算機システムを例に説明したが、本発明はこれに限定されない。例えば、スカラー演算ユニット及びベクター辺算ユニットを備えるマルチコアプロセッサ、又は、スカラー演算ユニット及びDRP、DSPを備えるヘテロジニアスマルチコアプロセッサについても本発明を適用することができる。
本実施形態によれば、ソースに同期バリア等を追加することなくオーバーラップ期間を自動的に特定し、特定されたオーバーラップ期間における非同期処理の性能情報を取得できる。したがって、プログラマは容易にオーバーラップ期間における処理の実効性能を評価することができる。また、本実施形態によれば、ループ内の処理の性能情報については統計的な情報として蓄積するため、メモリ上で処理が可能となる。したがって、高速な処理が実現できる。さらにループ内の処理の性能情報を統計的な情報として表示するため、プログラマが性能情報を解析する労力を削減することができる。
特許請求の範囲に記載した以外の発明の観点の代表的なものとして、次のものがあげられる。
(1)計算機システム上で実行されるコンパイラであって、
前記計算機システムは、
複数のCPUと、前記CPUに接続されるメモリと、複数のGPUと、前記GPUに接続されるGPUメモリと、前記CPU間を接続し、互いにデータを送受信するための第1の通信経路と、前記CPUと前記GPUとの間を接続し、互いにデータを送受信するための第2の通信経路と、を備え、
前記コンパイラは、前記CPU及び前記GPUのそれぞれが並列して処理を実行するオーバーラップ期間を特定し、前記オーバーラップ期間において実行される処理の性能情報を取得する性能情報取得手段を備え、
前記処理は、前記CPU及び前記GPUのそれぞれが非同期に実行する演算処理及び通信処理の少なくともいずれかの非同期処理を含み、
前記コンパイラは、
第1の非同期処理の実行命令を含む処理プログラムを取得し、
前記取得された処理プログラムから前記CPU及び前記GPUが実行可能なロードモジュールを生成し、
前記取得されたロードモジュールと前記性能情報取得部とがリンクされることによって生成された実行モジュールを実行し、
前記実行モジュールの実行中に、前記第1の非同期処理の実行命令が読み出された時に、当該第1の非同期処理以外に実行中の他の前記非同期処理が存在するか否かを判定し、
前記第1の非同期処理以外には実行中の前記他の前記非同期処理が存在しないと判定された場合に、前記第1の非同期処理の実行命令が読み出された時を前記オーバーラップ期間の開始点として特定し、
前記第1の非同期処理が完了した時に、前記第1の非同期処理以外に実行中の前記他の非同期処理が存在するか否かを判定し、
前記第1の非同期処理以外に実行中の前記他の非同期処理が存在しないと判定された場合に、前記第1の非同期処理が完了した時を前記オーバーラップ期間の終了点として特定し、
前記特定されたオーバーラップ期間の前記開始点から前記終了点までの、前記処理の性能情報を取得し、
前記特定されたオーバーラップ期間において取得された前記処理の性能情報を出力するための出力情報を生成することを特徴とするコンパイラ。
(2)前記処理は、さらに、前記非同期処理に対する同期待ち処理を含み、
前記処理プログラムは、さらに、前記第1の非同期処理に対する第1の同期待ち処理の実行命令を含み、
前記コンパイラは、
前記CPUによって前記第1の非同期処理の実行命令が読み出された時に、前記第1の非同期処理に対する同期待ちを表す第1の同期idを付与し、
前記CPUによって読み出された前記第1の同期待ち処理が完了した時に、前記第1の非同期処理が完了したと判定して、同期待ちが完了したことを表す第1の終了フラグを付与し、
第1の終了フラグが付与された後に、前記オーバーラップ期間における全ての前記非同期処理に対して終了フラグが付与されているか否かを判定し、
前記オーバーラップ期間における全ての前記非同期処理に対して前記終了フラグが付与されている場合に、前記第1の非同期処理以外に実行中の前記他の非同期処理が存在しないと判定することを特徴とする(1)に記載のコンパイラ。
(3)前記処理は、さらに、繰り返し実行されるループ処理を含み、
前記処理プログラムは、さらに、前記ループ処理の実行命令を含み、
前記コンパイラは、
前記処理プログラムを取得した後に、前記取得された処理プログラムを解析し、
前記解析の結果に基づいて、前記CPUによって前記ループ処理の実行命令が読み出されたことを検知するためのDoループ情報を生成し、
前記Doループ情報に基づいて、前記処理が前記ループ処理に含まれる処理であるか否かを判定し、
前記処理が前記ループ処理に含まれる処理であると判定された場合に、1回の前記ループ処理毎に前記処理の性能情報を取得し、
前記ループ処理毎に取得された前記処理の性能情報に対して統計処理を実行して前記ループ処理における前記処理の性能情報を算出することを特徴とする(1)に記載のコンパイラ。
(4)前記CPUによって前記第1の非同期処理の実行命令が読み出された場合に、前記ループ特定情報に基づいて、前記第1の非同期処理が前記ループ処理に含まれる処理であるか否かを判定し、
前記第1の非同期処理が前記ループ処理に含まれる処理であると判定された場合には、前記ループ処理毎に、前記第1の非同期処理の性能情報を取得し、
前記ループ処理毎に取得された前記第1の非同期処理の性能情報に対して統計処理することによって前記ループ処理における前記第1の非同期処理の性能情報を算出することを特徴とする(3)に記載のコンパイラ。
(5)前記第1の非同期処理がCPU間の通信処理である場合に、転送量、転送パターン、及び転送先を前記CPU間の通信処理の性能情報として取得し、
前記取得された転送量、転送パターン、転送先の情報に基づいて、前記CPU間で送受信されたデータの推定転送時間を算出し、
前記算出された推定転送時間が含まれる前記出力情報を生成することを特徴とする(1)に記載のコンパイラ。
(6)前記計算機システムは、前記GPUによって実行された前記非同期処理の性能情報を取得するGPUプロファイラを備え、
前記コンパイラは、
前記オーバーラップ期間において前記GPUによって実行された前記非同期処理を特定し、
前記GPUプロファイラから前記特定された非同期処理の性能情報を取得することを特徴とする(1)に記載のコンパイラ。
(7)計算機システム上で実行される処理の性能を解析するプロファイラであって、
前記計算機システムは、
複数のCPUと、前記CPUに接続されるメモリと、複数のGPUと、前記GPUに接続されるGPUメモリと、前記CPU間を接続し、互いにデータを送受信するための第1の通信経路と、前記CPUと前記GPUとの間を接続し、互いにデータを送受信するための第2の通信経路と、を備え、
少なくとも一つの前記CPUは、前記メモリ上に読み出された前記プロファイラを実行し、
前記プロファイラは、前記CPU及び前記GPUのそれぞれが並列して処理を実行するオーバーラップ期間を特定し、前記オーバーラップ期間において実行される処理の性能情報を取得する性能情報取得手段を備え、
前記処理は、前記CPU及び前記GPUのそれぞれが非同期に実行する演算処理及び通信処理の少なくともいずれかの非同期処理を含み、
前記プロファイラは、
第1の非同期処理の実行命令を含む処理プログラムを取得し、
前記取得された処理プログラムから生成され、前記CPU及び前記GPUが実行可能なロードモジュールと前記性能情報取得手段とがリンクされた実行モジュールを前記CPUが実行し、前記第1の非同期処理の実行命令が読み出された時に、当該第1の非同期処理以外に実行中の他の前記非同期処理が存在するか否かを判定し、
前記第1の非同期処理以外には実行中の前記他の前記非同期処理が存在しないと判定された場合に、前記第1の非同期処理の実行命令が読み出された時を前記オーバーラップ期間の開始点として特定し、
前記第1の非同期処理が完了した時に、前記第1の非同期処理以外に実行中の前記他の非同期処理が存在するか否かを判定し、
前記第1の非同期処理以外に実行中の前記他の非同期処理が存在しないと判定された場合に、前記第1の非同期処理が完了した時を前記オーバーラップ期間の終了点として特定し、
前記特定されたオーバーラップ期間の前記開始点から前記終了点までの、前記処理の性能情報を取得し、
前記特定されたオーバーラップ期間において取得された前記処理の性能情報を出力するための出力情報を生成することを特徴とするプロファイラ。
(8)前記処理は、さらに、前記非同期処理に対する同期待ち処理を含み、
前記処理プログラムは、さらに、前記第1の非同期処理に対する第1の同期待ち処理の実行命令を含み、
前記プロファイラは、
前記CPUによって前記第1の非同期処理の実行命令が読み出された時に、前記第1の非同期処理に対する同期待ちを表す第1の同期idを付与し、
前記CPUによって読み出された前記第1の同期待ち処理が完了した時に、前記第1の非同期処理が完了したと判定して、同期待ちが完了したことを表す第1の終了フラグを付与し、
第1の終了フラグが付与された後に、前記オーバーラップ期間における全ての前記非同期処理に対して終了フラグが付与されているか否かを判定し、
前記オーバーラップ期間における全ての前記非同期処理に対して前記終了フラグが付与されている場合に、前記第1の非同期処理以外に実行中の前記他の非同期処理が存在しないと判定することを特徴とする(7)に記載のプロファイラ。
(9)前記処理は、さらに、繰り返し実行されるループ処理を含み、
前記処理プログラムは、さらに、前記ループ処理の実行命令を含み、
前記プロファイラは、
前記処理プログラムを取得した後に、前記取得された処理プログラムを解析し、
前記解析の結果に基づいて、前記CPUによって前記ループ処理の実行命令が読み出み出しを検知するためのDoループ情報を生成し、
前記Doループ情報に基づいて、前記オーバーラップ期間において実行される前記処理が前記ループ処理に含まれる処理であるか否かを判定し、
前記オーバーラップ期間において実行される前記処理が前記ループ処理に含まれる処理であると判定された場合に、前記ループ処理毎に前記処理の性能情報を取得し、
前記ループ処理毎に取得された前記処理の性能情報に対して統計処理を実行して前記ループ処理における前記処理の性能情報を算出することを特徴とする(7)に記載のプロファイラ。
(10)前記CPUによって前記第1の非同期処理の実行命令が読み出された場合に、前記ループ特定情報に基づいて、前記第1の非同期処理が前記ループ処理内の処理であるか否かを判定し、
前記第1の非同期処理が前記ループ処理内の処理であると判定された場合には、前記ループ処理毎に、前記第1の非同期処理の性能情報を取得し、
前記ループ処理毎に取得された前記第1の非同期処理の性能情報に対して統計処理を実行することによって前記ループ処理における前記第1の非同期処理の性能情報を算出することを特徴とする(9)に記載のプロファイラ。
(11)前記第1の非同期処理がCPU間の通信処理である場合に、転送量、転送パターン、及び転送先を前記CPU間の通信処理の性能情報として取得し、
前記取得された転送量、転送パターン、転送先の情報に基づいて、前記CPU間で送受信されたデータの推定転送時間を算出し、
前記算出された推定転送時間が含まれる前記出力情報を生成することを特徴とする(7)に記載のプロファイラ。
(12)前記計算機システムは、前記GPUによって実行された前記非同期処理の性能情報を取得するGPUプロファイラを備え、
前記プロファイラは、
前記オーバーラップ期間において前記GPUによって実行された前記非同期処理を特定し、
前記GPUプロファイラから前記特定された非同期処理の性能情報を取得することを特徴とする(7)に記載のプロファイラ。