1

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、その出力(原則として)がまさに私が必要としているように見える、を使用することを強く望んでいます。

ご協力いただきありがとうございます!

4

2 に答える 2

1

行の実行回数を取得するにはgcov、ではなく、を使用しますgprof。Gprofは統計プロファイリング(プログラムが1秒間に100回実行されている場所をチェックします)であり、Gcovは基本ブロックごとの粒度(正確に必要なもの)を備えたカバレッジユーティリティです。

言うことはできませんが、IntelFortranコンパイラでgcovを直接使用することは可能ですか。ただし、gfortran/g95で使用できます。行ごとのカウントの実行は同じである必要があります。

于 2012-10-29T19:56:13.057 に答える