Frage

Neuere ARM-Prozessoren sind die PLD und PLI Anweisungen.

Ich schreibe enge innere Schleifen (in C ++), die einen nicht-sequenziellen Speicherzugriffsmuster, aber ein Muster, das natürlich mein Code vollständig versteht. Ich würde eine erhebliche Beschleunigung antizipieren, wenn ich während der Verarbeitung des aktuellen Speicherplatz die nächste Lage Prefetch könnte, und ich würde erwarten, dass diese schnell genug, um das Experiment wert zu versuchen, zu sein!

Ich bin mit neuem teuren Compiler von ARM, und es scheint nicht PLD Anweisungen überall zu werden, einschließlich, geschweige denn in dieser speziellen Schleife, die ich interessiere.

Wie kann ich auf explizite Vorabrufbefehle in meinem C ++ Code?

War es hilfreich?

Lösung

Es sollte einige Compiler-spezifische Funktionen sein. Es gibt keine Standardmethode für C / C ++ zu tun. Schauen Sie sich Sie Compiler Reference Guide-Compiler. Für Realview-Compiler finden Sie unter dieser oder diese .

Andere Tipps

Wenn Sie versuchen, wirklich die maximale Leistung aus diesen Schleifen zu extrahieren, als ich das gesamte Looping in Assembler konstruiert Schreiben empfehlen würde. Sie sollten Inline Lage sein, Montag zu verwenden, abhängig von den Datenstrukturen in der Schleife beteiligt. Noch besser, wenn Sie jedes Stück der Schleife entrollen kann (wie die beteiligten Teile bei der Herstellung der Zugang nicht-sequenziellen).

Auf die Gefahr, das Offensichtliche zu fragen: Haben Sie den Compiler Zielarchitektur überprüft? Zum Beispiel (Humor me), wenn standardmäßig die Compiler ARM7 ausgerichtet sind, sind Sie nie geht die PLD Anweisung zu sehen.

Es ist nicht außerhalb des Bereichs der Möglichkeit, dass andere Optimierungen wie Software Pipelining und Schleifenentrollen kann die gleiche Wirkung wie Ihre Prefetching Idee erreichen (die Latenz der Lasten versteckt, indem sie es überlappend mit nützliche Berechnung), aber ohne den zusätzlichen Druck Instruction-Cache durch die zusätzliche Anweisungen verursacht. Ich würde sogar so weit gehen zu sagen, dass dies der Fall ist mehr als oft nicht, für enge Innenschleifen, die einige Anweisungen und wenig Steuerfluss zu neigen. Ist Ihr Compiler diese Art von traditionellen Optimierungen stattdessen tun. Wenn ja, kann es an der Pipeline Diagramm lohnt einen Blick ein detailliertere Kostenmodell zu entwickeln, wie Sie Ihren Prozessor arbeitet, und bewerten mehr quantitativ, ob Prefetching helfen würde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top