私は開発中の数値コードのプロファイルにgprofを使用しようとしていますが、gprofはプログラムからデータを収集できないようです。以下は私のコマンドラインです:gprofは出力しません
g++ -Wall -O3 -g -pg -o fftw_test fftw_test.cpp -lfftw3 -lfftw3_threads -lm && ./fftw_test
gmon.outファイルが作成されましたが、データがないようです。私は
gprof -b fftw_test gmon.out > gprof.out
を実行すると、私が得るすべては
Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls Ts/call Ts/call name
Call graph
granularity: each sample hit covers 2 byte(s) no time propagated
index % time self children called name
Index by function name
任意の洞察力のですか?
コードは多くのことを行いますが、単にFFTWルーチンを呼び出すだけではありません。ある複素係数を計算する関数、入力データにこれらの係数を乗算する関数などがあります。
編集:サンプルコードと結果を含む。
#include <cstdlib>
#include <ctime>
int main()
{
std::srand(std::time(0));
double sum = 0.0;
for (int i = 0; i < RAND_MAX; ++i)
sum += std::rand()/(double) RAND_MAX;
std::cout << sum << '\n';
return 0;
}
コマンドライン:
$ g++ -Wall -O3 -g -pg -o gprof_test gprof_test.cpp && ./gprof_test
1.07374e+09
$ gprof -b gprof_test gmon.out > gprof.out
$ cat gprof.out
結果:
Flat profile:
Each sample counts as 0.01 seconds.
no time accumulated
% cumulative self self total
time seconds seconds calls Ts/call Ts/call name
Call graph
granularity: each sample hit covers 2 byte(s) no time propagated
index % time self children called name
Index by function name
そして、それはこれだけです。
1つのインタラクションはありませんか? Linux用のperfツールを試してみましたが、うまくやっているようですが、出力を解釈するのは簡単ではありません。私は仕事を手伝うために自分自身の「貧乏人プロファイラ」クラスを考え出し、計算時間をかなり短縮しました。 – Elias
エリアス、これは変です。 Mike https://stackoverflow.com/users/23771/mike-dunlaveyは、[プロファイリング]でタグ付けされたほとんどすべての質問で、彼の特許ではない統計的に証明された5つのランダムバックトレースgdbの貧乏人のプロファイリングをお勧めします。あなたのgprofが壊れているかもしれませんが、OSは何ですか?いくつかのデータを埋めるプログラムの簡単な変形を作成(またはfftw libの例で見つけること)できますか?空のgprofレポートでfftwを呼び出すと、あなたのケースをテストできますか? – osgx
私は簡単なメインプログラムで同じ問題を抱えています。 Archlinuxのgcc 7.2.0 gprof 2.29.1。何かが互換性のないもののようなものです。 –