2012-07-02 3 views
1

Должны ли данные быть выровнены по 16 байт, чтобы он мог обрабатываться инструкцией SSE без ошибки сегментации? Компилятор, который я пробовал, - gcc с опцией -msse2. Я хочу использовать _mm_cmpgt_epi32 для сравнения большого массива int. Я обнаружил, что он не может быть выполнен в любом месте массива, кроме позиции с индексом кратных 4.Инструкции SSE нужны для выравнивания данных

ответ

6

Да, когда вы загружаете и сохраняете данные в/из регистров SSE, оно должно быть выровнено по 16 байт, , если вы не используете, вы используете неверные версии инструкций загрузки/хранения, например _mm_loadu_si128/_mm_storeu_si128. Как правило, для использования этих несогласованных инструкций по загрузке/хранению обычно снижается производительность, поэтому обычно можно попытаться обеспечить правильное выравнивание данных в любое время и использовать только несогласованные нагрузки/магазины в качестве последнего средства.

Смежные вопросы