2012-06-18 2 views
-3

SSE 4.2 выполняет сравнение на двух операндах 16 байт за раз. Но также можно сравнить два операнда 8 байтов за один раз с обычными инструкциями процессора.Имеет ли смысл иметь SSE 4.2 на 64-битном процессоре?

Разница не такая большая, чтобы иметь специальную твердую реализацию такого сравнения. Является ли SSE 4.2 такой неуместной, или я что-то пропустил?

+0

Вы действительно измерили разницу в производительности?Или это все предположения? – hirschhornsalz

ответ

1

Я не уверен в специфике того, как выполняют инструкции сравнения стандартных регистров по сравнению с их более широкими эквивалентами SSE (возможно, что стандартная инструкция сравнения может потребовать больше циклов), но повышение производительности в 2 раза не является что угодно, чтобы встряхнуть палку.

Я думаю, вы спрашиваете: «Почему даже SSE 4.2, если все, что вы получаете, это 2 сравнения одновременно, а не 1?» Я думаю, что вы обозреваете несколько вещей:

  • Как я уже отмечал ранее, в два раза больше ширины операции. Если вы работаете над приложением, которое делает много таких сравнений, вы, вероятно, счастливы, что оно есть.

  • Вероятно, что добавочная стоимость добавления этой инструкции к уже существующим исполнительным устройствам SSE была относительно небольшой. Уже существует множество аппаратных средств для выполнения широкого спектра операций, уже определенных для более ранних наборов инструкций SSE.

    В настоящее время, инструкции, которые, кажется, добавляются либо являются более широкими версии старых возможностей (например, многие из инструкций AVX) или операции, которые имеют важное значение для некоторых конкретных приложений (например, инструкции CRC/AES, 4- элементных точечных продуктов). Возможно, что есть какое-то приложение, которое приносит много пользы от такого сравнения. инструкция и стоимость ее добавления стоила маркетингового преимущества , достигнутого за счет быстрого использования этих типов кода.

2

x64 процессоры только гарантированно иметь SSE2, вы должны были бы использовать CPUID для проверки SSE поддержки 4.2 (через CPUID.01H:ECX.SSE42[Bit 20] flag), однако, SSE 2 поддерживает 16 байт сравнение, с помощью _mm_cmpeq_epi8.

+0

Вопрос не в том, как проверить поддержку SSE 4.2 в текущем процессоре. Речь идет о неуместности SSE 4.2 на 64-битных процессорах. – Jofsey

+0

Sory для неточной формулировки вопроса. – Jofsey

1

Хотя это правда, что все SSE 4.2, за исключением добавленных инструкций, которые были «в целом полезны», новые строковые операции являются настолько общими, что они имеют потенциальные возможности использования за пределами обработки строк, а также. Я не знаю ни одного случая, когда это действительно помогает, потому что они довольно медленные.

0

Инструкции SSE4.2 сравнивают два упакованных операндов. Таким образом, вы не сравниваете два байта или слова, вы делаете очень сложное сравнение между 16 байтами и 16 другими байтами. (или 8 слов и 8 других слов.) («до X» в каждом случае ...)

Инструкции SSE4.2, как правило, медленнее, чем обычно, сравниваются, поскольку они почти всегда микрокодированы. Но, учитывая, что каждая инструкция SSE4.2 начинается с выполнения до 256 сравнений (в байтовом случае), а затем вычисляет кучу более полезного вывода, как правило, экономия на производительности алгоритма, если только ваш шаблон поиска не может пропустить несколько символов с каждой итерацией.

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