Wie schreibe ich ein anweisungscache-freundliches Programm in c ++?

Kürzlich hielt Herb Sutter einen tollen Vortrag über"Modernes C ++: Was Sie wissen müssen". Das Hauptthema dieses Vortrags war Effizienz und wie Datenlokalität und Zugriff auf den Speicher von Bedeutung sind. Er hat auch erklärt, wie der lineare Speicherzugriff (Array / Vektor) von der CPU geliebt würde. Er hat ein Beispiel aus einer anderen klassischen Referenz genommen"Spieleleistung von Bob Nystrom" Zu diesem Thema.

Nachdem ich diese Artikel gelesen hatte, stellte ich fest, dass es zwei Arten von Cache gibt, die sich auf die Programmleistung auswirken:

Daten-CacheAnweisungs-Cache

Cachegrind Das Tool misst auch die beiden Cache-Instrumentierungsinformationen unseres Programms. Die ersten Punkte wurden von vielen Artikeln / Blogs erklärt und wie man die gute Daten-Cache-Effizienz (Datenlokalität) erreicht.

Allerdings habe ich nicht viele Informationen zum Thema bekommenAnweisungs-Cache Und was sollten wir in unserem Programm beachten, um eine bessere Leistung zu erzielen? Nach meinem Verständnis haben wir (Programmierer) nicht viel Kontrolle darüber, welcher Befehl oder welche Reihenfolge ausgeführt werden würde.

Es wäre wirklich schön, wenn kleine c ++ - Programme erklären würden, wie sich dieser Zähler (.i.e Anweisungscache) mit unserem Schreibstilprogramm unterscheiden würde. Welche bewährten Methoden sollten Programmierer befolgen, um in diesem Punkt eine bessere Leistung zu erzielen?

Ich meine, wir können etwas über Daten-Cache-Themen verstehen, wenn unser Programm (Vektor gegen Liste) auf ähnliche Weise etwas über den zweiten Punkt erklärt. Die Hauptabsicht dieser Frage ist es, dieses Thema so gut wie möglich zu verstehen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage