A carga não alinhada do SSE é intrínseca mais lenta que a carga alinhada intrínseca nos processadores Intel x64_64?

Estou pensando em alterar algum código de alto desempenho que atualmente requer arrays alinhados de 16 bytes e usa_mm_load_ps para relaxar a restrição de alinhamento e usar_mm_loadu_ps. Há muitos mitos sobre as implicações de desempenho do alinhamento de memória para instruções SSE, então fiz um pequeno caso de teste do que deveria ser um loop de limite de largura de banda de memória. Usando a carga alinhada ou não alinhada intrínseca, ela executa 100 iterações em uma matriz grande, somando os elementos com intrínsecos SSE. O código fonte está aqui.https://gist.github.com/rmcgibbo/7689820

Os resultados em um Macbook Pro de 64 bits com um Sandy Bridge Core i5 estão abaixo. Números mais baixos indicam desempenho mais rápido. Como eu li os resultados, não vejo basicamente nenhuma penalidade de desempenho de usar _mm_loadu_ps na memória não alinhada.

Eu acho isso surpreendente. Este é um teste justo / conclusão justificada? Em que plataformas de hardware existe alguma diferença?

$ 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

questionAnswers(4)

yourAnswerToTheQuestion