Сравните строки по оберткам 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