Austauschen von Variablen (C ++, Prozessorlevel)

9

Ich möchte zwei Variablen austauschen. und ich möchte es durch die Pipeline mit einem Read After Write zu meinem Vorteil machen.

Pipeline:

%Vor%

Wie kann ich dem Compiler sagen, dass er das tun soll (und genau das) ohne automatische Sperren und Warnflags? Kannst du irgendwelche Literatur / Keywords vorschlagen?

Angaben:

  • - & gt; Ziel: moderne Architekturen, die Multistations (mehr als 4) Pipelining unterstützen.

  • - & gt; Dies hängt nicht mit einem bestimmten "Problem" zusammen. nur um der Wissenschaft willen.

aktuelle Hürden:

  • Wenn Sie wissen, wie Sie Datenfehler ignorieren, teilen Sie sie bitte.
CLASSIFIED 08.12.2011, 12:53
quelle

2 Antworten

3

Ich schlage vor, dass Sie die ersten Teile von lesen Intels Optimierungshandbuch . Dann werden Sie feststellen, dass eine moderne, spekulative CPU, die nicht in der richtigen Reihenfolge ist, Ihre Assemblersprache nicht einmal respektiert. Pipeline zu Ihrem Vorteil manipulieren? Basierend auf diesem Dokument würde ich sagen - vergiss es.

    
zvrba 09.12.2011 14:45
quelle
0

Dies hängt davon ab, auf welche CPU Sie abzielen und welcher Compiler. Sie geben auch keine an.

Im Allgemeinen wird eine CPU sehr viel tun, um vorzutäuschen, dass alles in der richtigen Reihenfolge ausgeführt wird, selbst wenn es in Wirklichkeit hinter den Kulissen superskalar ist. Code, der versucht, aus den Gefahren Nutzen zu ziehen, bricht nicht, sondern wird langsamer ausgeführt, da die CPU auf das Löschen der Gefahr wartet, bevor sie fortfährt. Andernfalls würde fast der gesamte Code bei zukünftigen Generationen der CPU ausfallen, wenn das superskalare Verhalten zunimmt.

Wenn Sie nicht auf einer sehr spezialisierten Architektur arbeiten und die Ausführungssteuerung auf Assembly-Ebene vollständig beherrschen, können Sie mit dieser Idee im Allgemeinen nicht weitermachen.

    
StilesCrisis 09.12.2011 19:10
quelle

Tags und Links