2012-05-03 12 views
7

Sto cercando un profiler os-independent a basso impatto per codice C++.Alla ricerca di un profiler C++ a basso impatto

Quando dico basso impatto, mi riferisco a qualcosa di meno invadente di valgrind. Ho intenzione di usarlo in un ambiente embed basato su MIPS (da cui l'os-independance) e ho provato una versione port di valgrind e ha completamente cambiato le caratteristiche delle prestazioni (troppo principio di Heisenberg al lavoro) quindi non posso percorrere quella strada. Sappiamo che la velocità del bus di memoria è un collo di bottiglia che probabilmente spiega perché valgrind è stato così invadente.

Ho creato un tipo di profiler domestico basato sui checkpoint che mi consente di misurare alcune parti del codice. Fondamentalmente devo modificare il codice (e ricompilare) per impostare i checkpoint in punti strategici nel codice. Quindi, quando viene eseguito, memorizza il numero di volte in cui viene colpito ogni checkpoint e il tempo trascorso dall'ultimo checkpoint. Quindi, dopo averlo eseguito, posso scaricare i checkpoint e per ognuno calcola: num-hits, max-time, min-time, avg-time, ecc.

Questo profiler (l'ho chiamato LowImpactProfiler) funziona bene, ma mi chiedo se c'è qualcosa di meglio là fuori.

Ive ha considerato oProfile, che è un profilatore di campionamento, ma poiché Im non esegue Linux, penso che sarà davvero difficile da implementare.

+1

Se l'obiettivo è scoprire cosa nel codice sta causando lentezza e potrebbe essere migliorato per ottenere prestazioni migliori * [potresti provare a farlo] (http://stackoverflow.com/questions/375913/what-can -i-uso-per-profilo-c-code-in-linux/378024 # 378024). * –

+0

@Brady: * Heisenburger *? Non sapevo di questo! –

+0

@Matthieu: non ne hai mai sentito parlare? È un hamburger quantico. –

risposta

5

Ho utilizzato Shiny per il profilo su dispositivi embedded molto limitati con grande successo. Dalla tua descrizione, richiede un approccio simile a LowImpactProfiler.

+0

Lo scaricherò questa settimana e darò un'occhiata, Gracias desde Madrid! – Brady

+0

Ive preso uno sguardo al codice di Shiny e mi piace finora, sembra essere una soluzione migliore di quello che ho attualmente. Grazie! – Brady

+0

Sembra promettente, ma dubito che ciò funzioni su dispositivi embedded a bassissima potenza. – Alex

1

Se si utilizza Windows, si può provare il mio profiler, descritto qui http://ravenspoint.wordpress.com/2010/06/16/timing/

Suona come potrebbe essere più facile da usare della tua, ma non è indipendente dal sistema operativo. Utilizza le chiamate a QueryPerformanceCounter() che è un'API di Windows. È open source, quindi potrebbe essere utile portarlo sul tuo sistema operativo, usando qualunque timer ad alte prestazioni disponibile lì.

+0

Grazie, ma ci voleva essere che utilizzano Windows, la sua app di telecomunicazioni e semmai, potrebbero un giorno essere portato su una piattaforma UNIX. Darei comunque un'occhiata. – Brady

+0

+1, mi piace l'API che usa, è * molto * simile ai miei checkpoint. Guarderò il codice e vedremo come portarlo/fonderlo con il mio. Preparerò il mio e lo metterò su Github la prossima settimana per te da guardare. Ho anche dei checkpoint con scope, o posso impostare singoli checkpoints senza aver bisogno di essere negli ambiti. Quando invio il mio codice, pubblicherò un messaggio qui e/o invierò un messaggio sul tuo sito web. Grazie! – Brady

Problemi correlati