Ist die nicht ausgerichtete SSE-Last langsamer als die ausgerichtete Last bei x64_64-Intel-CPUs?

Ich denke darüber nach, einen Code mit hoher Leistung zu ändern, der derzeit 16-Byte-ausgerichtete Arrays und Verwendungen erfordert_mm_load_ps um die Ausrichtungsbeschränkung zu lockern und zu verwenden_mm_loadu_ps. Es gibt viele Mythen über die Auswirkungen der Speicherausrichtung auf die Leistung von SSE-Befehlen. Daher habe ich einen kleinen Testfall für eine an die Speicherbandbreite gebundene Schleife erstellt. Bei Verwendung der Eigenschaft "Ausgerichtete Last" oder "Nicht ausgerichtete Last" werden 100 Iterationen durch ein großes Array ausgeführt, wobei die Elemente mit der Eigenschaft "SSE" summiert werden. Der Quellcode ist hier.https://gist.github.com/rmcgibbo/7689820

Die Ergebnisse auf einem 64-Bit-Macbook Pro mit einem Sandy Bridge Core i5 sind unten aufgeführt. Niedrigere Zahlen bedeuten eine schnellere Leistung. Beim Lesen der Ergebnisse sehe ich im Grunde keine Leistungseinbußen bei der Verwendung von _mm_loadu_ps für nicht ausgerichteten Speicher.

Ich finde das überraschend. Ist das ein fairer Test / eine gerechtfertigte Schlussfolgerung? Auf welchen Hardwareplattformen gibt es einen Unterschied?

$ gcc -O3 -msse aligned_vs_unaligned_load.c  && ./a.out  200000000
Array Size: 762.939 MB
Trial 1
_mm_load_ps with aligned memory:    0.175311
_mm_loadu_ps with aligned memory:   0.169709
_mm_loadu_ps with unaligned memory: 0.169904
Trial 2
_mm_load_ps with aligned memory:    0.169025
_mm_loadu_ps with aligned memory:   0.191656
_mm_loadu_ps with unaligned memory: 0.177688
Trial 3
_mm_load_ps with aligned memory:    0.182507
_mm_loadu_ps with aligned memory:   0.175914
_mm_loadu_ps with unaligned memory: 0.173419
Trial 4
_mm_load_ps with aligned memory:    0.181997
_mm_loadu_ps with aligned memory:   0.172688
_mm_loadu_ps with unaligned memory: 0.179133
Trial 5
_mm_load_ps with aligned memory:    0.180817
_mm_loadu_ps with aligned memory:   0.172168
_mm_loadu_ps with unaligned memory: 0.181852

Antworten auf die Frage(4)

Ihre Antwort auf die Frage