3.1.11.3. 基本プロファイラ¶
基本プロファイラは、サンプリング解析でプログラム全体の統計情報を計測および出力を行います。
3.1.11.3.1. 概要¶
基本プロファイラはプロファイルデータを計測するfippコマンドと、計測したデータからプロファイル結果を出力するfipppxコマンドの2つから構成されます。基本プロファイラが出力可能な統計情報は以下のとおりです。
時間統計情報
CPU動作状況
コスト情報
コールグラフ情報
ソースコード情報
詳細プロファイラの使用の流れは以下のとおりです。

3.1.11.3.2. 計測区間指定ルーチンの追加¶
言語種別
ヘッダファイル
サブルーチン/関数名
引数
機能
Fortran
なし
fipp_startfipp_stopなし
コスト情報測定開始コスト情報測定終了C/C++
fj_tool/fipp.h
void fipp_startvoid fipp_stopなし
コスト情報測定開始コスト情報測定終了注意
これらのサブルーチン/関数を利用して測定データを収集するには、
fipp
コマンドに、-Sregion
オプションを指定してください。これらのサブルーチン/関数を複数回呼び出す場合、必ず fipp_start、fipp_stop の順番で呼び出してください。fipp_stop を呼び出す前に再度 fipp_start を呼び出した場合、または fipp_start を呼び出す前に fipp_stop を呼び出した場合、警告メッセージを出力してその呼び出しを無視します。また、fipp_stop を呼び出さずにプロセスが終了した場合、その区間のプロファイルデータは計測しません。
これらのサブルーチン/関数を複数回呼び出した場合、指定したすべての計測区間の結果を合算します。
MPIプログラムの場合、計測対象にしたいすべてのプロセスでこれらのサブルーチン/関数を呼び出してください。呼び出しが行われなかったプロセスのプロファイルデータは計測しません。
計測区間指定ルーチンの使用例を示します。
Fortranの例
サンプル指定例
program main ... do i=1,10000 ... call fipp_start ! 計測を開始する do j=1,10000 ... end do call fipp_stop ! 計測を終了する end do end program main
すべてのプロセスを計測対象とする例(mpi_initサブルーチンを呼び出す前に計測を開始する)
call fipp_start ! 計測を開始する call mpi_init(err) ... call mpi_finalize(err) call fipp_stop ! 計測を終了する
すべてのプロセスを計測対象とする例(mpi_initサブルーチンを呼び出した直後に計測を開始する)
call mpi_init(err) call fipp_start ! 計測を開始する ... call fipp_stop ! 計測を終了する call mpi_finalize(err)
プロセス0のみ計測対象とする例
call mpi_init(err) call mpi_comm_rank(mpi_comm_world,rank,err) if(rank==0) then call fipp_start ! プロセス0のみ、計測を開始する end if ... if(rank==0) then call fipp_stop ! プロセス0のみ、計測を終了する end if call mpi_finalize(err)
C/C++の例
サンプル指定例
#include "fj_tool/fipp.h" // ヘッダーファイルのインクルード ... int main(void) { int i,j; for(i=0;i<10000;i++){ ... fipp_start(); // 計測を開始する for(j=0;j<10000;j++){ ... } fipp_stop(); // 計測を終了する } return 0; }
すべてのプロセスを計測対象とする例(MPI_Init関数を呼び出す前に計測を開始する)
fipp_start(); // 計測を開始する MPI_Init(&argc, &argv); ... MPI_Finalize(); fipp_stop(); // 計測を終了する
すべてのプロセスを計測対象とする例(MPI_Init関数を呼び出した直後に計測を開始する)
MPI_Init(&argc, &argv); fipp_start(); // 計測を開始する ... fipp_stop(); // 計測を終了する MPI_Finalize();
プロセス0のみ計測対象とする例
MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); if(rank==0){ fipp_start(); // プロセス0のみ、計測を開始する } ... if(rank==0){ fipp_stop(); // プロセス0のみ、計測を終了する } MPI_Finalize();
3.1.11.3.3. コンパイル/リンク¶
コンパイル/リンク例(MPIプログラムの場合)
[_LNlogin]$ mpifrtpx -Kfast,parallel "ソースファイル名"
コンパイル/リンク例(逐次/スレッド並列プログラムの場合)
[_LNlogin]$ frtpx -Kfast,parallel "ソースファイル名"注意
分割コンパイルを行う場合は、適切なプロファイラのライブラリがリンクされるように、原則としてコンパイル時に指定した最適化オプションは、リンク時にも指定してください。
例)OpenMPを利用するプログラムは、リンク時にも
-Kopenmp
オプションを指定する。
3.1.11.3.3.1. Fortranの翻訳時オプションについて¶
オプション
説明
-Nfjprof
ツールライブラリを結合します。 省略時は
-Nfjprof
が有効になります。-Nnofjprof
ツールライブラリを結合しません。 プロファイラを使用できません。
3.1.11.3.3.2. C/C++の翻訳時オプションについて¶
モード
オプション
説明
trad
-Nfjprof
ツールライブラリを結合します。省略時は
-Nfjprof
が有効になります。trad
-Nnofjprof
ツールライブラリを結合しません。プロファイラは使用できません。
clang
-ffj-fjprof
ツールライブラリを結合します。省略時は
-ffj-fjprof
が有効になります。clang
-ffj-no-fjprof
ツールライブラリを結合しません。プロファイラは使用できません。
3.1.11.3.4. プロファイルデータの計測¶
fippコマンドの実行例を示します。
[条件]
fipp
コマンドは、実行モジュール(a.out
)を指定している箇所に追加
-d
オプションで指定したディレクトリ(profiling_data
)にデータを収集[MPIプログラム]
#!/bin/sh # #PJM -L "node=2x2x2" #PJM -L "rscgrp=small" #PJM -L "elapse=01:00:00" #PJM -x PJM_LLIO_GFSCACHE=/vol000N #PJM -g groupname #PJM -s # fipp -C -d profiling_data -Icall,mpi mpiexec ./a.out[逐次/スレッド並列プログラム]
#!/bin/sh # #PJM -L "node=1" #PJM -L "rscgrp=small" #PJM -L "elapse=01:00:00" #PJM -x PJM_LLIO_GFSCACHE=/vol000N #PJM -g groupname #PJM -s # fipp -C -d profiling_data -Icall,cpupa ./a.out注意
fippコマンドにより計測したプロファイルデータに対して以下を行った場合、動作保証しません。
プロファイルデータの編集
プロファイルデータの追加、削除、リネーム
3.1.11.3.5. プロファイラのオプション¶
fippコマンドのオプションについて説明します。
オプション
説明
-C(必須オプション)プロファイルデータの計測を指示します。本オプションを省略した場合、エラーメッセージを出力しプログラムの実行を終了します。
-d profile_data(必須オプション) プロファイルデータを格納するディレクトリを指定します。本オプションを省略した場合、エラーメッセージを出力しプログラムの実行を終了します。profile_data
にはプロファイルデータを格納するディレクトリ名を相対、または、絶対パスで指定します。指定したディレクトリは新規作成、または、空のディレクトリでなければいけません。実行中にカレントディレクトリを移動するプログラムを解析する場合、profile_data
は絶対パスで指定してください。プロファイラはprofile_data
の下に1000ファイルごとのサブディレクトリを作成します。このため、大規模ジョブが対象の場合もprofile_data
を指定するだけで使用できます。exec-file [ exec_option ... ]
プロファイルデータの計測対象となる実行ファイルとオプションを指定します。MPIプログラムの場合、mpiexecから指定します。
-H[mode={all|user}]
CPU動作状況の計測内容について指定します。サブオプション
mode=
には、all
、または、user
のどちらか1つを指定します。本オプション、または、サブオプションmode={all|user}
省略時は、mode=all
が有効になります。
- mode=all
カーネルモードおよびユーザーモードにおける計測を行います。
- mode=user
ユーザーモードにおける情報計測を行います。
-Iitem(ハイフン+大文字アイ) 基本プロファイラで計測する項目を指定します。複数のitemを指定する場合は、カンマで区切ってください。item :{{call
|nocall
} | {cpupa
|nocpupa
} | {mpi
|nompi
}}
- call:
コールグラフ情報を収集します。
- nocall:
コールグラフ情報を収集しません。省略時は
-Inocall
が有効になります。- cpupa:
CPU動作状況を計測します。省略時は
-Icpupa
が有効になります。- nocpupa:
CPU動作状況を計測しません。
- mpi:
MPIコスト情報を計測します。対象がMPIプログラムの場合の省略時は
-Impi
が有効になります。- nompi:
MPIコスト情報を計測しません。対象が非MPIプログラムの場合の省略時は
-Inompi
が有効になります。-i interval
プロファイルデータを計測するサンプリング間隔を指定します。interval にはサンプリング間隔を整数値(ミリ秒単位)で指定します。本オプション省略時は、
-i 100
オプションが有効になります。interval
には、10から3,600,000 の範囲の整数値を指定します。-L{shared | noshared}
翻訳時オプション
-Nline
を指定して生成した共有ライブラリの計測方法を指定します。
- shared
行情報付き共有ライブラリ内の以下の情報を計測します。
手続の開始行番号
手続の終了行番号
ループコスト分布情報
行コスト分布情報
- noshared
行情報付き共有ライブラリ内の情報を計測しません。省略時は
-Lnoshared
が有効になります。-l limit
手続情報の計測件数を指定します。出力件数以上の手続情報は、__other__
として合算して計測します。本オプション省略時は、-l 0
オプションが有効になります。limit
には、0から2,147,483,647の範囲の整数値を指定します。limit
に 0 を指定した場合、全件を計測します。-m memsize
計測時に使用する作業用メモリサイズを整数値(KB単位)で指定します。作業用メモリの領域はスレッドごとに確保します。本オプション省略時は、-m 3000
オプションが有効になります。memsize
には、1から2,147,483 の範囲の整数値を指定します。-P{userfunc | nouserfunc}
翻訳時オプション
-Nline
または-ffj-line
を指定したオブジェクト(以降、行情報付きオブジェクトと呼びます)と翻訳時オプション-Nnoline
または-ffj-no-line
を指定したオブジェクト(以降、行情報なしオブジェクトと呼びます)が混在している場合の手続コストの計上方法を指定します。標準ライブラリまたは-Lnoshared
指定時の共有ライブラリは行情報なしオブジェクトとして扱います。
- userfunc
行情報なしオブジェクトの手続にコストが計上された場合、コールグラフ情報から行情報なしオブジェクトの手続を呼び出した手続を遡ります。行情報付きのオブジェクトの手続が存在した場合、その手続にコストを計上します。行情報付きのオブジェクトの手続が存在しなかった場合、コストは計上しません。
-Puserfunc
オプション指定時は、-Icall
オプションも同時に指定しなければなりません。-Icall
オプションを指定しない場合、エラーメッセージを出力し収集コマンドの処理を終了します。- nouserfunc
行情報なしオブジェクトの手続にコストが計上された場合、その手続にコストを計上します。ただし、手続開始行、手続終了行は出力しません。
-S{all | region}
プロファイルデータの計測区間を指定します。
- all
プログラム全体を計測します。省略時は
-Sall
が有効になります。- region
計測区間指定ルーチンで指定した区間内を計測します。ソースコード内に計測区間指定ルーチンを挿入する必要があります。
-W{spawn|nospawn}
動的生成されたプロセスに対する計測方法を指定します。省略時の指定は、MPIプログラムの場合、
-Wspawn
オプションが有効になり、非MPIプログラムの場合、-Wnospawn
オプションが有効になります。
- spawn
動的生成されたプロセスの統計情報を計測します。
- nospawn
動的生成されたプロセスの統計情報を計測しません。
3.1.11.3.6. プロファイル結果の出力¶
fipppxコマンドを使用して、fippコマンドで計測したプロファイルデータの結果を出力します。
本操作は使用するノードによって異なるコマンドを使用します。
- ログインノードの場合
fipppxコマンドを使用します。
- 計算ノードの場合
fippコマンドを使用します。
fipppxコマンドの実行例を以下に示します。
[_LNlogin]$ fipppx -A -pall -Ibalance,call -d profiling_data
-pall
)をしています。-p0,1
(プロセス0と1)のようにプロセス番号を指定して出力することもできます。3.1.11.3.6.1. fipppxコマンドのオプション¶
オプション |
機能・測定値(単位) |
---|---|
-A
(必須オプション)
|
プロファイル結果の出力処理を指示します。 |
-d profile_data
(必須オプション)
|
プロファイルデータを格納したディレクトリを、 profile_data に相対パスまたは絶対パスで指定します。 |
-f func_name |
プログラムが使用している手続名を func_name に指定して、func_name に関する情報を出力します。
ただし、fippコマンドで、func_name の手続に関する情報を計測していない、または、 func_name の手続コストが 0 の場合、
-ffunc_name を指定しても情報は出力されません。 |
-Iitem
(ハイフン+大文字アイ)
|
プロファイル結果の出力対象とする項目を指定します。
複数のitemを指定する場合は、カンマで区切ってください。
item:{{
balance | nobalance}| } | {call | nocall}| } | {cpupa | nocpupa}| } | {mpi | nompi } | {src[:path ] | nosrc}} }}
|
-l limit
(小文字のエル)
|
出力する手続情報の出力件数を指定します。
本オプション省略時は、
-l 10 オプションが有効になります。limit には、0から2,147,483,647の範囲の整数値を指定します。limit に 0 を指定した場合、全件を出力します。
|
-o outfile |
プロファイル結果の出力先を指定します。outfile には、出力先ファイル名を相対パスまたは絶対パスで指定するか、または、"stdout"を指定します。
本オプション省略時は、
-ostdout オプションが有効になります。 |
-pp_no |
プロファイル結果に出力するプロセスを指定します。
p_no には、
N@M 、input=n 、limit=m 、all の中からいずれか1つ以上を指定します。本オプション省略時は、
-ttext オプションが有効な場合は、-pinput=0 、limit=16 が有効になり、-txml オプションが有効な場合は、-pall オプションが有効になります。-p オプションにはコンマ(,)を区切りとして、 p_no を複数指定することができます。例えば、-p3,5,limit=10 のような指定ができます。
|
-Tt_no |
プロファイルデータの出力対象とするスレッドを指定します。
t_no には、
N 、limit=n 、all の中からいずれか1つ以上を指定します。-T オプションにはコンマ(,)を区切りとして、t_no を複数指定することができます。例えば、
-T3,5,limit=10 のような指定ができます。
|
-t{text|xml} |
プロファイル結果の出力形式を指定します。
|
3.1.11.3.6.2. プロファイル結果について¶
-I
オプションによって出力を制御できます。プロファイルデータ計測環境情報
時間統計情報
CPU動作状況
コスト情報(手続コスト分布情報、ループコスト分布情報、行コスト分布情報)
コールグラフ情報
ソースコード情報(TEXT形式のみ)