2012-07-11 7 views
17

This question e la sua risposta, che è stata recentemente etichettata come una risposta epica, mi ha spinto a chiedermi; Posso misurare le prestazioni di un'applicazione in esecuzione in Windows in termini di errori di previsione ramo CPU? So che esistono alcuni strumenti di analisi statica che potrebbero aiutare a ottimizzare il codice per ottenere buone prestazioni nelle situazioni di previsione delle branche e che le tecniche manuali potrebbero essere utili semplicemente apportando modifiche e riprovando, ma sto cercando un meccanismo automatico che possa segnala un numero totale di errori di previsione delle filiali, per un periodo di tempo, durante l'esecuzione di un'applicazione Windows, e spero che qualche strumento di Profiler per Visual C++ possa aiutarmi.È possibile misurare errori di previsione delle branch su una CPU Intel Core moderna?

Per il piacere di questa domanda, l'applicazione in questione è costruita con un compilatore nativo come Visual C++ per Windows o utilizzando un altro compilatore nativo, come GCC, FreePascal, Delphi o TurboAssembler. L'eseguibile potrebbe non avere alcuna informazione di debug. Voglio sapere se riesco a rilevare e conteggiare i fallimenti di previsione dei rami, magari leggendo le informazioni interne della CPU tramite un servizio Windows come WMI, o magari eseguendo interamente all'interno di un ambiente virtualizzato che esegue Windows, come l'uso di VirtualBox, e quindi eseguendo completamente ambiente windows virtualizzato con la mia applicazione di test, all'interno di VirtualBox, e analisi runtime della CPU virtuale. O qualche altra tecnica che non conosco, quindi questa domanda.

Sì, ho cercato su Google. L'unica cosa che sembra promettente è this PDF da AMD. Page 18 menziona qualcosa di molto vicino a quello che vorrei fare, ma sembra scritto per chi lavora senza alcun sistema operativo, su piattaforme hardware di valutazione raw:

5.1. Filiali. Applicabilità. Le errate previsioni dei rami condizionali possono essere un problema significativo nel codice con molte logiche decisionali.

rami condizionali possono essere pronosticate male, quando la probabilità di scelta del percorso vero o falso è casuale o vicino a una ripartizione 50-50. L'hardware di previsione ramo non può "apprendere" un modello e le diramazioni sono non previste correttamente. Collezione. Raccogliere gli eventi in questa tabella per misurare le prestazioni ramo predizione:

rami calcolare il tasso a cui rami sono preso e il rapporto tra il numero di istruzioni al ramo utilizzando queste formule: Branch taken rate = Taken_branches/ Ret_instructions Branch preso ratio = Taken_branches/Filiali
istruzioni al ramo = Ret_instructions/Filiali

Aggiornamento: Credo di poter dire che sto cercando un modo per leggere il modulo i7 PMU Intel core, o funzioni equivalenti di altri CPU. Sembra che Intel VTUNE (dai commenti di Adrian) sia molto vicino a quello che ho chiesto.

+1

io non sono abbastanza sicuri di mettere questo in una risposta, ma penso VTune di Intel sarebbe in grado di raccontarvi previsioni ramo senza risposta, almeno se si sta profiling su un processore Intel. –

+0

Questo? (http://software.intel.com/en-us/articles/intel-vtune-amplifier-xe/) - wow. Sembra impressionante Per un semplice lettore PMU, sembra che ci sia anche QUESTO: http://software.intel.com/en-us/articles/intel-performance-counter-monitor/ –

+0

@Adrian McCarthy: per quanto ne so, è giusto. vTune è piuttosto impressionante, anche se non è economico. Sfortunatamente la limitazione alle CPU Intel può essere un problema in molti casi d'uso. – 0xC0000022L

risposta

5

VTune Performance Analyzer può farlo! Se state studiando questi argomenti, date un'occhiata a "Optimization Cookbook" di Intel Press.

Nota: i commenti indicano la stessa risposta ma con un po 'di incertezza, ho usato VTune e ho misurato il tasso di previsione del ramo per una CPU Intel. Quindi sono sicuro al 100%.

here is the link for VTune

here is the link for the book

+0

Il link al libro purtroppo non è aggiornato, ma grazie per il riferimento! – andreee