2009-03-12 4 views
7

Avete utilizzato uno strumento di profilatura come l'analizzatore Intel Vtune?Profiling Applicazioni C++ multithreading

Quali sono i tuoi consigli per un'applicazione multi thread C++ su Linux e Windows? Sono principalmente interessato a problemi di cache, utilizzo della memoria, perdite di memoria e utilizzo della CPU.

Io uso valgrind (solo su UNIX), ma principalmente per trovare errori di memoria e perdite.

+0

Recentemente ho trovato questo documento sulla profilazione: http://www.iop.org/EJ/article/1742-6596/119/4/042030/jpconf8_119_042030.pdf?request-id=6fb45e59-676f-4728- 86bd-f324abdc5053. igprof https://twiki.cern.ch/twiki/bin/view/CMS/IgProfAnalysis sembra uno strumento elegante (anche se devo ancora provarlo). –

risposta

8

Di seguito sono riportati i buoni strumenti per le applicazioni con multithreading. Puoi provare la copia di valutazione.

  1. strumento Runtime controllo di integrità
    • Checker Discussione - Intel checker Discussione/VTune, here
  2. memoria strumenti consistenza-controllo (utilizzo della memoria, perdite di memoria) - Memoria Validator, here
  3. Analisi delle prestazioni. (Utilizzo della CPU) - AQTime, here

EDIT: Intel checker filo può essere utilizzato per diagnosticare le gare di dati, deadlock, le discussioni in stallo, si blocca abbandonati ecc Si prega di avere un sacco di pazienza nelle analisi dei risultati in quanto è facile confondersi.

alcuni consigli:.

  1. disattivare le funzionalità che non sono necessari (In caso di identificazione di situazioni di stallo, corsa i dati possono essere disattivati ​​e viceversa.)
  2. pianeggiante Uso Strumentazione base alle proprie esigenze. Livelli come "Tutte le funzioni" e "Immagine completa" vengono utilizzati per le corse dati, dove "API Imports" può essere utilizzato per il rilevamento dei deadlock)
  3. utilizzare spesso il menu contestuale "Diagnostic Help".
1

La suite Rational PurifyPlus include sia un rilevatore di perdite ben collaudato che un profiler piuttosto buono. Non sono sicuro che vada giù al livello di errori di cache, però - potresti aver bisogno di VTune per questo.

PurifyPlus è disponibile su vari Unix e Windows, quindi dovrebbe coprire le vostre esigenze, ma sfortunatamente, contrariamente a Valgrind, non è gratuito.

3

VTune fornisce molti dettagli su ciò che il processore sta facendo e talvolta trovo difficile vedere il legno per gli alberi. VTune non segnalerà perdite di memoria. Avrai bisogno di purify plus per quello, o se puoi girare su una macchina Linux valgrind è buono per perdite di memoria ad un ottimo prezzo.

VTune mostra due visualizzazioni, una è utile quella tabulare, l'altra penso sia solo per gli addetti alle vendite per impressionare le persone ma non è utile.

Per un'opzione rapida ed economica, andrei con valgrind. Valgrind ha anche una parte di cache grind ad esso, ma non l'ho usato, ma sospetto che sia anche molto buono.

cheers, Martin.

5

Su Linux, provare oprofile. Supporta vari contatori delle prestazioni.

Su Windows, AMD CodeAnalyst (gratuito, a differenza di VTune) vale la pena dare un'occhiata. Supporta solo il profilo degli eventi sull'hardware AMD tramite (sulle CPU Intel è solo un pratico profiler basato sul timer).

Un collega ha recentemente provato Intel Parallel Studio (beta) e lo ha valutato favorevolmente (ha trovato alcuni problemi di parallelismo interessanti in alcuni codici).

2

Inserirò un'altra risposta per valgrind, in particolare la porzione di callgrind con l'interfaccia utente. È in grado di gestire più thread profilando ogni thread per eventuali errori di cache, ecc. Hanno anche un correttore di errori multi-thread chiamato helgrind, ma non l'ho mai usato e non so quanto sia bello.

+2

Helgrind è abbastanza bravo a trovare potenziali problemi di threading come incongruenze di ordine mutex lock, condizioni di gara ecc. Funziona solo con pthreads, quindi gli utenti di altre librerie di thread potrebbero essere sfortunati. Tuttavia, funziona molto più lentamente di valgrind sulla mia macchina, quindi la pazienza è fondamentale quando lo si utilizza! –

1

Per semplice profilatura gprof è abbastanza buono ..

2

È possibile provare profiler CPU di AMD CodeXL. È gratuito e disponibile per Windows e Linux.

Il profiler della CPU di AMD CodeXL sostituisce lo strumento CodeAnalyst non più supportato (che è stato menzionato in una risposta di cui sopra data da ora).

Per ulteriori informazioni e collegamenti per il download, visitare: AMD CodeXL web page.