13 Stimmen

Hardware-Leistungszähler-APIs für Windows

Ich möchte Folgendes verwenden Hardware-Leistungszähler speziell x86-CPUs, um Cache-Fehlversuche oder falsche Verzweigungsvorhersagen zu erhalten. Leistungszähler werden häufig in fortgeschrittenen Profilerprogrammen wie Intel VTune verwendet. Bitte lassen Sie sich nicht von Leistungszählern auf Windows-Betriebssystemen verwirren.

Um diese Zähler in einem C/C++-Programm zu verwenden, kann man PAPI verwenden: http://icl.cs.utk.edu/papi/

Dies ermöglicht Ihnen die einfache Verwendung von Leistungszählern, allerdings nur unter Linux. PAPI unterstützte früher Windows, aber jetzt nicht mehr.

Hat jemand in letzter Zeit PAPI oder andere APIs zur Verwendung von Hardware-Leistungszählern unter Windows ausprobiert?

9voto

Rom Punkte 4053

Sie können verwenden RDPMC Anweisung oder __readpmc MSVC-Compiler intrinsisch, was dasselbe ist.

Windows verbietet jedoch Anwendungen im Benutzermodus die Ausführung dieses Befehls, indem es CR4.PCE auf 0 setzt. Vermutlich geschieht dies, weil die Bedeutung der einzelnen Zähler durch MSR-Register bestimmt wird, auf die nur im Kernelmodus zugegriffen werden kann. Mit anderen Worten, wenn Sie kein Modul des Kernelmodus sind (z. B. ein Gerätetreiber), erhalten Sie eine "privilegierte Anweisung"-Falle, wenn Sie versuchen, diese Anweisung auszuführen.

Wenn Sie eine Anwendung für den Benutzermodus schreiben, besteht Ihre einzige Möglichkeit darin (wie @Christopher in den Kommentaren erwähnte), ein Kernelmodul zu schreiben, das diese Anweisung für Sie ausführt (was Sie mit einem Benutzer->Kernel-Aufruf bestrafen würde) und die Testsignierung auf Ihrem Rechner zu aktivieren, damit Ihr vermutlich selbstsignierter "Treiber" geladen werden kann. Das bedeutet, dass Sie diese Anwendung nicht einfach weitergeben können, aber für interne Abstimmungen wird das funktionieren.

2voto

wilx Punkte 17189

Was ist mit dieser HCP-Referenz ? Bietet sie nicht das, was Sie wollen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X