CPU 時間について、C++ および Fortran コードを含む R パッケージである OpenMx の関数をプロファイリングしようとしています。私のオペレーティングシステムは OS X 10.10 です。Rマニュアルのこのトピックに関するセクションを読みました。このセクションとこの投稿では、 Instruments を試してみることにしました。これが私がしたことです
- 開かれた楽器
- Time Profiler テンプレートの選択
- プレスレコード
- RStudio を使用して R スクリプトを開始しました
次の出力が得られます。コマンド ライン ツールのサンプルは、同じ出力を返します。
omxunsafedgemm_
問題は、メイン スレッドから直接呼び出されるように見えること です。ただし、これは低レベルの Fortran 関数です。これは常に と呼ばれる C++ 関数によって呼び出されomxDGEMM
ます。この例omxDGEMM
では、最初に呼び出されomxCallRamExpection
ます (つまり、呼び出しツリーのほぼ最下部にあります)。の合計時間omxDGEMM
は 0 です。したがって、プロファイル情報は現在役に立ちません。
パッケージの元のバージョンでは、omxDGEMM
インラインとして定義されています。問題が解決することを期待して、これを変更しました。そうではありませんでした。そのようにomxunsafedgemm
呼び出されますomxDGEMM
F77_CALL(omxunsafedgemm)(&transa, &transb,
&(nrow), &(ncol), &(nmid),
&alpha, a->data, &(a->leading),
b->data, &(b->leading),&beta, result->data, &(result->leading));
賢明なプロファイラー出力を取得する方法はありますか?