Является ли встроенная нагрузка SSE медленнее встроенной нагрузки на процессорах Intel x64_64?

Я рассматриваю вопрос об изменении некоторого высокопроизводительного кода, который в настоящее время требует 16-байтовых выровненных массивов и использует_mm_load_ps чтобы ослабить ограничение выравнивания и использовать_mm_loadu_ps, Существует множество мифов о влиянии на производительность выравнивания памяти для инструкций SSE, поэтому я сделал небольшой тестовый пример того, что должно быть циклом с ограниченной пропускной способностью памяти. Используя встроенную или невыровненную встроенную нагрузку, он выполняет 100 итераций по большому массиву, суммируя элементы со встроенными встроенными функциями SSE. Исходный код здесь.https://gist.github.com/rmcgibbo/7689820

Результаты на 64-битном Macbook Pro с процессором Sandy Bridge Core i5 приведены ниже. Меньшие числа указывают на более высокую производительность. Когда я читаю результаты, я не вижу практически никакого снижения производительности от использования _mm_loadu_ps на невыровненной памяти.

Я нахожу это удивительным. Это честный тест / обоснованный вывод? На каких аппаратных платформах есть разница?

$ 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

Ответы на вопрос(4)

Ваш ответ на вопрос