This question und seine Antwort, die vor kurzem als eine Epische Antwort getaggt wurde, hat mich dazu gebracht, mich zu wundern; Kann ich die Leistung einer laufenden Anwendung in Windows hinsichtlich der Fehler bei der CPU-Verzweigungsvorhersage messen? Ich weiß, dass es einige statische Analysewerkzeuge gibt, die bei der Optimierung von Code für eine gute Leistung in Verzweigungsvorhersagesituationen helfen könnten und dass manuelle Techniken helfen könnten, indem einfach Änderungen vorgenommen und erneut getestet werden, aber ich suche nach einem automatischen Mechanismus eine Gesamtzahl von Fehlern bei der Verzweigungsvorhersage über einen bestimmten Zeitraum melden, wenn eine Windows-Anwendung ausgeführt wird, und ich hoffe, dass mir ein Profiler-Tool für Visual C++ helfen kann.Kann ich Fehler bei der Verzweigungsvorhersage auf einer modernen Intel Core CPU messen?
Für diese Frage wird die fragliche Anwendung entweder mit einem systemeigenen Compiler wie Visual C++ für Windows oder mit einem anderen systemeigenen Compiler wie GCC, FreePascal, Delphi oder TurboAssembler erstellt. Die ausführbare Datei enthält möglicherweise keine Debug-Informationen. Ich möchte wissen, ob ich Fehler bei der Verzweigungsvorhersage erkennen und zählen kann, indem ich z. B. interne CPU-Informationen über einen Windows-Dienst wie WMI lese oder ganz in einer virtualisierten Umgebung mit Windows laufe, z. B. mit VirtualBox, und dann komplett ausführe virtualisierte Windows-Umgebung mit meiner Testanwendung, innerhalb von VirtualBox und Laufzeitanalyse der virtuellen CPU. Oder eine andere Technik, die ich nicht kenne, also diese Frage.
Ja, ich googelte. Das einzige, was vielversprechend aussieht, ist this PDF von AMD. Seite 18 erwähnt etwas, das sehr nah an dem liegt, was ich gerne tun würde, aber scheint für diejenigen geschrieben zu sein, die ohne Betriebssystem arbeiten, auf rohen Hardware-Plattformen:
5.1. Geäst. Anwendbarkeit. Bedingte Verzweigungsfehlvorhersagen können ein bedeutendes Problem im Code mit einer Menge Entscheidungslogik sein.
Bedingte Verzweigungen können falsch vorhergesagt werden, wenn die Wahrscheinlichkeit für die Auswahl des wahren oder falschen Pfads zufällig oder nahe einer 50-50-Teilung ist. Die Verzweigungsvorhersage-Hardware kann ein Muster nicht "lernen", und Verzweigungen werden nicht richtig vorhergesagt. Sammlung. Sammeln Sie die Ereignisse in dieser Tabelle Verzweigungsvorhersageleistung zu messen:
Zweige die Rate Berechnen, an dem Zweig ist entnommen und das Verhältnis der Anzahl von Befehlen pro Zweig unter Verwendung diese Formeln: Zweig genommen Rate = Taken_branches/ Ret_instructions Verzweigung genommen Verhältnis = Taken_branches/Zweigstellen
Anweisungen pro Zweig = Ret_instructions/Zweigstellen
Update: ich glaube, ich könnte sagen, dass ich mich für einen Weg, um die Intel Core i7 PMU-Modul oder gleichwertige Funktionen anderen zu lesen CPUs. Es sieht so aus, als ob Intel VTUNE (aus den Kommentaren von Adrian) sehr nah an dem ist, wonach ich gefragt habe.
Ich bin nicht so sicher, dass dies in einer Antwort zu setzen, aber ich denke, VTune von Intel der Lage sein, würden Sie über entgangene Verzweigungsvorhersagen zu sagen, zumindest, wenn Sie Profilierungs auf einem Intel-Prozessor. –
Das? (http://software.intel.com/en-us/articles/intel-vtune-amplifier-xe/) - wow. Sieht beeindruckend aus. Für nur einen PMU-Leser sieht es so aus, als gäbe es DAS auch: http://software.intel.com/en-us/articles/intel-performance-counter-monitor/ –
@Adrian McCarthy: Soweit ich weiß, ist das richtig. vTune ist ziemlich beeindruckend, aber nicht billig. Leider kann die Beschränkung auf Intel-CPUs in vielen Anwendungsfällen ein Problem darstellen. – 0xC0000022L