Ich vermute, dass Vorhersagehinweise auf der Ebene der Maschinenbefehle bestenfalls ein Rauschen und im schlimmsten Fall ein Nachteil (verschwendete Befehlsbytes) für eine moderne, nicht in Ordnung befindliche, spekulativ ausführende Architektur sind. Dies wäre so, als würde man der CPU sagen, sie solle dumm sein - damit sie ihre bereits intelligenten Dinge nicht mehr tut, für die sie entwickelt wurde.
Zweitens hängt das Ausmaß, in dem die Verzweigungsvorhersage verbessert werden kann, von der Ursache der Fehlvorhersage und der Leichtigkeit ab, mit der man die Leistungseffekte der Verzweigung messen oder die Tendenz der Verzweigung beobachten kann.
Ich denke jedoch, dass die vorhandene Menge an JIT-Optimierungstricks die Verzweigungsvorhersage bereits bis zu einem gewissen Grad verbessern kann, auch ohne die Hilfe von Zählern für die falsche Vorhersage von CPU-Verzweigungen.
Nur ein sehr einfaches Codebeispiel:
public void repeatHistory(int value)
{
if (value == 1492)
{
landing();
}
else if (value == 1776)
{
ratifying();
}
}
Angenommen, das repeatHistory
wird oft genannt. Wenn der auf Stichproben basierende Leistungsmonitor die Anrufstapelstatistik analysiert, kann er feststellen, dass repeatHistory()
Anrufe aus irgendeinem Grund ratifying()
häufiger auftreten als beim vorherigen Aufruf landing()
. Basierend auf dieser Beobachtung wird dies beim nächsten Durchlauf der JIT-Codegenerierung für die repeatHistory
Methode berücksichtigt und eine oder mehrere Optimierungen durchgeführt:
- Bewegen Sie den Scheck für
(value == 1776)
vor den Scheck für(value == 1492)
- Versuchen Sie, die
ratifying()
Methode in den Zweig in zu integrierenrepeatHistory()
- Wenn der
repeatHistory()
von einer anderen Schleife aufgerufen wird, versuchen Sie, die Schleife abzuwickeln, oder fügen Sie die repeatHistory()
Methode in diese Schleife ein.
- Und viele andere.
Nach dem Anwenden einer Optimierung muss häufig erneut analysiert werden, ob weitere Optimierungen angewendet werden können, da eine erfolgreiche Optimierung häufig die Tür zu mehr Möglichkeiten öffnet.