Home Page

Tips page
c
cellulari
debian
egittologia
emacs
emacs-latex
hardware
html
inglese
java
latex
linux
matlab
misc
mysql
network
octave
programming

*Raise A to the power of B
*Usare il profiler
*Variabili d'ambiente per gcc

python
security
sed
tech
webapps
windows

University Page

Programming

Debian & Linux

Some works

About me

Del.icio.us Bookmarks

BOINC Combined Statistics

Site Statistics

Contact me sending an e-mail (antispam defense activated)

debian

hacker emblem

blogger

GeoURL

View Sandro Tosi's profile on LinkedIn

This is my Google PageRank

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.