Ich suche nach Möglichkeiten zur Durchführung von Mikro-Benchmarks auf Mehrkernprozessoren.
Kontext:
Etwa zur gleichen Zeit, als Desktop-Prozessoren die Out-of-Order-Ausführung einführten, die eine Vorhersage der Leistung erschwerte, wurden - vielleicht nicht zufällig - auch spezielle Befehle eingeführt, um sehr genaue Zeitangaben zu erhalten. Beispiele für diese Anweisungen sind rdtsc
auf x86 und rftb
auf PowerPC. Diese Befehle lieferten präzisere Zeitangaben, als es ein Systemaufruf jemals zulassen könnte, und ermöglichten es den Programmierern, Mikro-Benchmarking zu betreiben - im Guten wie im Schlechten.
Bei einem noch moderneren Prozessor mit mehreren Kernen, von denen einige zeitweise schlafen, werden die Zähler nicht zwischen den Kernen synchronisiert. Uns wird gesagt, dass rdtsc
nicht mehr sicher für Benchmarking ist, aber ich muss wohl eingeschlafen sein, als uns die alternativen Lösungen erklärt wurden.
Frage:
Einige Systeme können den Leistungszähler speichern und wiederherstellen und einen API-Aufruf zum Auslesen der richtigen Summe bereitstellen. Wenn Sie wissen, wie dieser Aufruf für ein bestimmtes Betriebssystem lautet, teilen Sie uns dies bitte in einer Antwort mit.
Bei einigen Systemen kann es möglich sein, Kerne abzuschalten, so dass nur noch ein Kern läuft. Ich weiß, dass dies bei Mac OS X Leopard möglich ist, wenn das rechte Einstellungsfenster aus den Entwicklertools installiert wird. Glauben Sie, dass dies die rdtsc
wieder sicher zu verwenden?
Mehr Kontext:
Bitte gehen Sie davon aus, dass ich weiß, was ich tue, wenn ich versuche, einen Mikro-Benchmark durchzuführen. Wenn Sie der Meinung sind, dass es sich nicht lohnt, eine Optimierung vorzunehmen, wenn der Gewinn einer Optimierung nicht durch die Zeitmessung der gesamten Anwendung gemessen werden kann, stimme ich Ihnen zu, aber
-
Ich kann die gesamte Anwendung nicht zeitlich festlegen, bis die alternative Datenstruktur fertig ist, was sehr lange dauern wird. Wenn der Mikro-Benchmark nicht vielversprechend wäre, könnte ich die Implementierung jetzt aufgeben;
-
Ich benötige Zahlen für eine Veröffentlichung, auf deren Abgabetermin ich keinen Einfluss habe.