Contact me sending an e-mail (antispam defense activated) |
Title: Usare il profiler Author: Sandro Tosi Last modified: 2004-06-13 (2003-12-23) Spesso e` utile avere piena comprensione di cosa il proprio codice sta facendo come, per esempio, quante volte viene chiamata una determinata procedura e quanto tempo si impiega ad eseguire ogni routine a cui si fa riferimento nel proprio codice; l'attivita` di esaminare le chiamate a funzione ed il loro tempo di esecuzione e` chiamato `profiling'. Esistono due tipi di profiler (il nome dello strumento che ci consente di fare profiling): quello software e quello hardware; vediamone brevemente le differenze: mentre un profiler software e` di piu` facile reperibilita` (esitono diverse soluzioni, anche free, come vedremo), la sua precisione e` limitata, in particolare dal fatto che dipende dal sistema operativo su cui viene eseguito, e quindi le operazioni che puo` svolgere dipendono da cosa l'ambiente sottostante consente di esaminare; un profiler hardware, invece, e` uno strumento molto raffinato e particolare che consente una granularita` molto fine (ad esempio consente di misurare i cache miss del processore) ma la sua reperibilita` e` naturalmente minore ed inoltre richiede l'istallazione di un componente aggiuntivo all'interno del computer, cosa non sempre possibile o gradita. Nei sistemi Linux esiste un ottimo profiler, il `gprof' (esiste anche un font-end grafico, `kprof' per KDE), vediamo come usarlo. Supponiamo di utilizzare il compilatore `gcc': allora, per ottenere le informazioni di profiling, dovremo compilare i nostri sorgenti come al solito ed in piu` si dovranno aggiungere le opzioni di compilazione `-pg -fprofile-arcs' (potrebbe essere che l'ultima opzione non sia necessaria, ma metterla non fa male...): in questo modo, all'interno dell'eseguibile che verra` generato, saranno incluse le informazioni per restituire il profile del programma. A questo punto eseguiamo, come al solito, il file eseguibile generato dal compilatore: al termine dell'esecuzione, se guardiamo nella directory corrente possiamo notare come siano ``apparsi'' dei file nuovi, e per la precione un file `gmon.out' e tanti file `.da' quante sono le routine che il nostro programma chiama durante la sua esecuzione: sono queste le informazioni che saranno analizzate dal profiler. Adesso, possiamo finalmente eseguire `gprof' seguito dal nome del file eseguibile ottenuto dalla compilazione (se chiamato senza parametri, cerca di default il file `a.out') e, se tutto e` andato bene, otterremo in output un'idea di dove passa il tempo il nostro programma... Una delle opzioni interessanti a disposizione con questo tool e` la `annotated source' che restituisce il codice sorgente con affianco ad ogni linea il numero di volte che essa viene chiamata. Le stesse indicazioni sono valide anche per il compilatore Fortran g77 che, grosso modo, e` un traduttore di codice Fortran in codice C da passare poi al gcc. Per una visione piu` completa delle opzioni disponibili in `gprof' si rimanda, naturalmente, alla pagina `man' relativa. |