2010-07-05 12 views
5

Ho provato a profilare il mio programma C++ con gprof. Il programma stesso ha funzionato per circa 53 secondi, quindi non capisco perché dice che main ha funzionato solo per circa 8,29 secondi. Qualche spiegazione su questo?Il C++ utilizza solo il ~ 20% del tempo dice gprof

Ecco un estratto:

index % time self children called  name 
               <spontaneous> 
[2]  20.5 0.00 8.29     main [2] 
       0.00 8.28  1/1   MPQS::start(std::basic_ofstream<char, std::char_traits<char> >&) [3] 
       0.00 0.01  1/1   MPQS::MPQS(NTL::ZZ, long) [36] 
       0.00 0.00  1/1   MPQS::~MPQS() [78] 
----------------------------------------------- 
       0.00 8.28  1/1   main [2] 
[3]  20.5 0.00 8.28  1   MPQS::start(std::basic_ofstream<char, std::char_traits<char> >&) [3] 
       7.15 1.08  801/801   MPQS::sieve() [4] 
       0.00 0.04  801/801   MPQS::find_smooth_vals() [23] 
       0.01 0.00  1/1   MPQS::try_solutions(NTL::mat_GF2&) [35] 
       0.00 0.00  801/801   MPQS::compute_coeffecients() [59] 
----------------------------------------------- 
       7.15 1.08  801/801   MPQS::start(std::basic_ofstream<char, std::char_traits<char> >&) [3] 
[4]  20.4 7.15 1.08  801   MPQS::sieve() [4] 
       1.08 0.00  801/801   MPQS::find_candidates() [9] 
+0

È la misurazione del tempo di orologio da parete o del tempo di CPU effettivamente utilizzato dal processo? – csl

+0

Hai provato a eseguire il codice tramite il comando unix 'time'? Ciò ti mostrerà tempo di orologio da muro vs. tempo di spazio dell'utente (il tuo codice) rispetto al tempo del kernel. Ti aspetti che il tuo codice sia legato all'IO o alla CPU? – Rup

+1

@Rup: "MPQS" indica quasi certamente "Setaccio quadratico polinomiale multiplo", un algoritmo per il factoring di grandi numeri. Mi aspetto che sia * pesantemente vincolato alla CPU. –

risposta

2

Stavi stampa dei risultati alla console? gprof non conta il tempo bloccato. See this.

+0

I cronometrato dal programma utilizzando una funzione GetTime(), fornita dalla libreria NTL C++. Misura il tempo in cui il processo è in esecuzione sulla CPU. Diceva di circa 53 secondi. Inserisco il programma all'inizio, ma il mio tempismo manuale, usando GetTime(), non inizia fino a dopo. I 53 secondi si adattano molto bene a quello che osservavo guardando l'orologio del mio computer. Non ho provato a farlo funzionare con il comando time, come posso farlo? Non so se mi aspetto che sia legato alla CPU o legato all'IO. –

+1

Ahh, quindi ovviamente gprof conta nel tempo che dedico all'input del programma! Questo è il motivo per cui dice che main è in realtà eseguito solo per un periodo di tempo così breve. Proverò a codificare il mio input nel programma e vedere i risultati! –

Problemi correlati