J'essaie d'utiliser gprof pour profiler un code numérique que je développe, mais gprof semble ne pas pouvoir collecter des données de mon programme. Voici ma ligne de commande:gprof ne donne aucune sortie
g++ -Wall -O3 -g -pg -o fftw_test fftw_test.cpp -lfftw3 -lfftw3_threads -lm && ./fftw_test
Le fichier gmon.out est créé, mais il semble ne pas avoir de données. Quand je lance
gprof -b fftw_test gmon.out > gprof.out
Tout ce que je reçois est
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
Toute autre idée?
Le code fait beaucoup de choses, il n'appelle pas simplement les routines FFTW. Il a des fonctions qui calculent certains coefficients complexes, fonctions qui multiplient les données d'entrée par ces coefficients, et ainsi de suite.
Edit .: Y compris l'exemple de code et les résultats.
#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;
}
lignes de commande:
$ 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
Résultat:
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
Et voilà.
Pas une seule interaction? Eh bien, j'ai essayé les outils de perf pour Linux et ils semblent faire un bon travail, mais il n'est pas simple d'interpréter la sortie. Je suis venu avec ma propre classe de «profileur pauvre» pour m'aider avec le travail et a fini par réduire le temps de calcul par un peu. – Elias
Elias, c'est étrange. Mike https://stackoverflow.com/users/23771/mike-dunlavey recommande généralement son non-breveté 5 random backtrace aléatoire gdb profil pauvre homme dans presque toutes les questions marquées avec [profilage]. Votre gprof peut être cassé, quel est le système d'exploitation? Pouvez-vous créer (ou trouver dans fftw lib exemples) une variante plus simple du programme qui va remplir certaines données et appeler fftw avec le rapport gprof vide pour nous permettre de tester votre cas? – osgx
J'ai le même problème avec un programme principal simple. gcc 7.2.0 gprof 2.29.1 sur Archlinux. C'est comme si quelque chose devenait incompatible. –