2011-01-05 24 views
12

Ero curioso di sapere se qualcuno ha suggerimenti per librerie e frontend di test delle prestazioni che produrranno grafici grafici per C++ (come come gcov produce dati di copertura e ci sono frontend là fuori per visualizzare i dati di copertura del codice) . Essere in grado di produrre grafici come:Utilità di test delle prestazioni per C++

http://download.eclipse.org/eclipse/downloads/drops/S-3.7M4-201012081300/performance/performance.php?fp_type=0

sarebbe abbastanza liscia. Al momento usiamo cppunit per il test delle unità, quindi forse c'è qualcosa che si integra con questo.

Altre informazioni: Stiamo compilando su Linux (usiamo Ubuntu Lucid/Maverick) su macchine Intel x86-64.

+0

http://stackoverflow.com/questions/4394606/beyond-stack-sampling-c-profilers, ha un elenco interessante di cose simili ... – Nim

+0

Questo dipenderà in gran parte dal sistema operativo e dalla CPU in uso per quanto riguarda ciò che è disponibile ... cerchi più test automatici o profili delle prestazioni? – AJG85

+0

Stavo pensando a qualcosa di più di un setup di test di regressione automatizzato che sarebbe particolarmente orientato verso le metriche di performance. Sarebbe bello poter sfruttare cppunit, ma non è necessario e sarei interessato a qualsiasi tipo di imbracatura per test delle prestazioni. La creazione di profili sarebbe il passo che faremo dopo che i nostri test di regressione hanno rilevato un grande successo di runtime o qualcosa di simile. –

risposta

4

Alcuni suggerimenti:

  • Il googletest C++ quadro è in grado di produrre report JUnit-compatibili.
  • Hudson può essere utilizzato per eseguire i test. Richiede solo che l'applicazione C++ possa essere eseguita come un'applicazione console.
  • Hudson Performance Plugin è in grado di generare grafici da report JUnit.
  • Ci sono molti altri plugins.
2

Su linux è possibile provare il toolkit valgrind. Valgrind include lo strumento di callgrind che può profilare il tuo codice. KCacheGrind visualizza molto bene l'output di cachegrind.

+1

L'idea non è quella di profilare il codice, di per sé, è quello di creare un sistema di generazione notturno che potrebbe notificarci le regressioni delle prestazioni prendendo alcune metriche semplici (forse anche solo in fase di esecuzione) su alcuni perf. test unitari che avremo. Quindi non vogliamo particolarmente strumentare il nostro codice, vogliamo solo vedere le sue prestazioni grezze. –

+0

@Kenny: è possibile analizzare l'output di 'cg_diff' per produrre il tipo di grafici che si desidera. –

2

Alcune note si spera rilevanti dalla mia esperienza di questo genere di cose in risposte here e here.

Non c'è motivo per cui la configurazione CppUnit esistente combinata con qualcosa come lo scoped_timer (vedi secondo di sopra) e un po 'di postelaborazione in alcuni grafici forse non dovrebbe soddisfare le vostre esigenze. Mentre credo che CppUnit includa un plug-in ("Clocker"?) Che si scollega in momenti non più validi, non penso che sia effettivamente utile per questo tipo di test delle prestazioni, perché invariabilmente si finisce col volere il tempo solo una parte di ogni test e non tutto il codice di installazione.

1

Esistono due framework di test delle prestazioni che possono essere di aiuto.

Entrambi sono ispirati da framework Google prova e fornire l'interfaccia per sostenere il test delle prestazioni, quindi è facile da trasportare la googletest originale a Hayai o SkyPat.

SkyPat combina unit test e perf_evnet. Estende il concetto di Google Test e fornisce un'interfaccia per accedere a PMU. perf_event fornisce conteggi di ciclo accurati SkyPat utili per strumenti sensibili alla varianza dei tempi, come i compilatori. SkyPat può anche profilare un pezzo di codice per eventi PMU (eq: cicli, istruzioni, riferimento cache, cache miss, ecc.).

Hayai supporta diversi metodi di misurazione delle prestazioni di sistema operativo diverso (Windows: QueryPerformanceCounter(), Linux: gethrtime(), Apple (OSX, iOS): mach_absolute_time()) nella sua struttura di test delle prestazioni.

Problemi correlati