Сравните строки по оберткам SSE4

Мне нужно быстро сравнить две строки на машине с поддержкой SSE4. Как я могу сделать это без написания ассемблерных вставок?

Некоторые обертки, как long long bitmask = strcmp(char* a, char* b) было бы идеально.

3 ответа

Решение

Вместо использования встроенной сборки следует использовать встроенные функции Intel SSE.

Для сравнения строк вам понадобятся встроенные функции SSE4.2:

Документация находится здесь: http://software.intel.com/sites/products/documentation/doclib/stdxe/2013/composerxe/compiler/cpp-mac/GUID-6E9CFDF2-5DF6-42A4-B429-0E2CD441342E.htm

Используйте asmlib Агнера Тумана. http://www.agner.org/optimize/

Он уже взял на себя труд написать для вас код на ассемблере, включая использование инструкций SSE4.2. Используйте его функцию A_strcmp (или версия без учета регистра A_stricmp).

Было бы интересно узнать, как метод с использованием встроенных функций сравнивается по производительности.

Вот хорошая статья об использовании SSE 4.2 для ускорения строковых операций: http://www.strchr.com/strcmp_and_strlen_using_sse_4.2

Другие вопросы по тегам