Ich habe vor kurzem etwas in Speicher gegraben und wie man es richtig benutzt. Natürlich bin ich auch auf Prefetching gestoßen und wie ich das Leben für die CPU erleichtern kann.Gibt es eine Möglichkeit, einen Prozess "aufwärmen" zu lassen?
Ich habe einige Benchmarks durchgeführt, um die tatsächlichen Vorteile der ordnungsgemäßen Speicherung/Zugriff von Daten und Anweisungen zu sehen. Diese Benchmarks zeigten nicht nur die erwarteten Vorteile beim Vorabladen der CPU, sondern zeigten auch, dass der Prefetch auch den Prozess zur Laufzeit beschleunigt. Nach etwa 100 Programmzyklen scheint die CPU es herausgefunden zu haben und hat den Cache entsprechend optimiert. Das spart mir bis zu 200.000 Ticks pro Zyklus, die Zahl sinkt von rund 750.000 auf 550.000. Ich habe diese Nummern mit der qTestLib.
Nun zur Frage: Gibt es eine sichere Möglichkeit, diese Laufzeit-Beschleunigung zu nutzen, sozusagen aufheizen zu lassen? Oder sollte man das überhaupt nicht berechnen und nur von Anfang an schneller Code erstellen?
Wenn Sie hauptsächlich von einer besseren Verzweigungsvorhersage profitieren, können Sie die Profilgeführte Optimierung für bessere Hinweise und besser optimierten Code verwenden. – Hasturkun
Können Sie genauer angeben, was genau Sie bewertet haben? In welchem Level-Cache sprichst du dich auf? –
Beim Benchmark geht es darum, Daten im Speicher zu speichern. im Falle von diesem Vergleich std :: Vektor mit QList. Meine beste Vermutung über die automatische Cache-Optimierung ist, dass der TLB lernt, welche Adressen nicht geräumt werden sollen. – FruitSokrat