LinuxでIntelFortranコンパイラー(v。12.0.3)を使用しています。でプロファイリングを実行し、すべての行に独自の実行カウントのラベルgprof
が付いた基本ブロックカウントを取得したいのですが、取得できたのはプログラム/サブルーチン/関数レベルのカウントだけです。私の結論は、コンパイラフラグが間違っているということですが、Webを調べてマニュアルページを読んだにもかかわらず、自分がしていることの代わりに何をすべきかを理解できません...ifort
コンパイル時に使用するフラグは次のとおりです。
-w -O0 -g -pg
そして、これが私が呼び出す方法ですgprof
:
gprof -l -A -x path/to/exe gmon.out > OUT
最初は、すべての行に実行頻度のラベルが付けられているように見えますが、各ブロック/行は単純にプロシージャカウントを取得していることがわかります(次の短い例では、関数は43679回呼び出され、「if」と「if」の両方が呼び出されました。たとえば、「else」には43679というラベルが付けられていますが、これは意味がありません):
43679 -> function variance_from_index (indices,array)
! declarations
43679 -> if (ubound(indices,1).eq.2) then
43679 -> variance_from_index = array(indices(1),indices(2))
else
43679 -> do i=1,ubound(indices,1)-1
43679 -> do j=i+1,ubound(indices,1)
43679 -> items(1:2) = (/indices(i),indices(j)/)
私はすでにIntelフォーラムに質問を投稿しましたが、これまでに1つの返信を受け取りました。これは、Intelのcodecov
ツールを示しています。これ自体は非常に便利なアプリケーションですが、コードのすべての行の実行カウントを出力するオプションがないように思われるため、現在のニーズに適合していないようです。私はgprof
、その出力(原則として)がまさに私が必要としているように見える、を使用することを強く望んでいます。
ご協力いただきありがとうございます!