5 Stimmen

Beziehung zwischen SSE-Vektorisierung und Speicherausrichtung

Warum brauchen wir für SSE/AVX ausgerichteten Speicher?

Eine der Antworten, die ich oft höre, ist, dass das Laden von ausgerichtetem Speicher viel schneller ist als das Laden von nicht ausgerichtetem Speicher. Warum aber ist das Laden von ausgerichtetem Speicher viel schneller als das Laden von nicht ausgerichtetem Speicher?

9voto

Paul R Punkte 201623

Dies gilt nicht nur für SSE (oder auch x86). Auf den meisten Architekturen müssen Lade- und Speicherzugriffe natürlich ausgerichtet sein, da sie sonst entweder (a) eine Ausnahme auslösen oder (b) zwei oder mehr Zyklen plus einige Korrekturen benötigen, um den nicht ausgerichteten Lade-/Speichervorgang transparent zu verarbeiten. Bei x86 trifft (b) auf Datentypen < 16 Bytes zu, aber (a) gilt für SSE-Datentypen, es sei denn, Sie verwenden explizit nicht ausgerichtete Versionen der Lade-/Speicheranweisungen, die nicht ausgerichtete Daten verarbeiten können.

Sie könnten sich fragen: Warum nicht einfach die nicht ausgerichteten Versionen dieser SSE Lade-/Speicheranweisungen verwenden, unabhängig von der Ausrichtung? Die Antwort ist, dass diese Anweisungen in der Regel viel langsamer sind als ihre ausgerichteten Gegenstücke, da sie sich im Allgemeinen wie in (b) oben verhalten, was sie typischerweise um den Faktor 2 oder mehr langsamer macht, abgesehen von neueren Intel-CPUs wie dem Core i7, wo die Strafe viel kleiner ist, aber nicht unbedeutend.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X