2012-01-06 14 views
8

mi piacerebbe usare hardware performance counter, x86 specifico le CPU per ottenere cache miss o ramo mis-previsione. I contatori delle prestazioni sono ampiamente utilizzati nei profiler avanzati come Intel VTune. Si prega di non confondere i contatori delle prestazioni sui sistemi operativi Windows.hardware API dei contatori delle prestazioni per Windows

Per poter utilizzare questi contatori in programma C/C++, si può usare PAPI: http://icl.cs.utk.edu/papi/

Questo consente di utilizzare facilmente i contatori delle prestazioni, ma solo su Linux. PAPI una volta supportava Windows, ma non ora.

C'è qualcuno che ha recentemente provato PAPI o altre API per utilizzare i contatori delle prestazioni hardware su Windows?

+0

Mente se ti chiedo: stai scrivendo un vero codice bang-on-bit? La maggior parte del codice app di Windows non si avvicina affatto a questo. –

+0

Stavo per suggerire VTune, ma l'hai già fatto. Quindi cosa c'è di sbagliato in questo? –

+0

No, sto scrivendo un codice di profilazione. Quindi, ho bisogno di API per programmare. Linux va bene con PAPI, ma Windows, sto ancora cercando le ultime API per utilizzare i contatori delle prestazioni HW. – Nullptr

risposta

4

È possibile utilizzare l'istruzione RDPMC o il __readpmc compilatore MSVC intrinseco, che è la stessa cosa.

Tuttavia, Windows impedisce alle applicazioni in modalità utente di eseguire questa istruzione impostando CR4.PCE su 0. Presumibilmente, ciò avviene perché il significato di ciascun contatore è determinato dai registri MSR, che sono accessibili solo in modalità kernel. In altre parole, se non si è un modulo in modalità kernel (ad esempio un driver di periferica), si otterrà il trap "istruzione privilegiata" se si tenta di eseguire questa istruzione.

Se si sta scrivendo un'applicazione in modalità utente, l'unica opzione è (come @Christopher menzionato nei commenti) scrivere un modulo del kernel che eseguirà questa istruzione per te (si incorre in utente-> penalità chiamata kernel) e abilitare la firma del test sulla macchina in modo che il "driver" presumibilmente autofirmato possa essere caricato. Ciò significa che non puoi distribuire facilmente questa app, ma ciò funzionerà per la messa a punto interna.

Problemi correlati