2012-05-13 10 views
6

Potrzebuję szybko porównać dwa ciągi na maszynie z obsługą SSE4. Jak mogę to zrobić bez pisania wstawek asemblera?Porównaj łańcuchy przez owijarki SSE4

Niektóre opakowania takie jak long long bitmask = strcmp(char* a, char* b) będą idealne.

+0

może zależeć od kompilatora (w tym wersji) i używanych flag. Jeśli używasz 'gcc-4.7', czy wypróbowałeś' -mcpu = native -O3' itd? –

+1

http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011/compiler_c/intref_cls/common/intref_sse42_comp.htm – Mysticial

+0

Googling "sse4 strcmp" daje wiele wyników z gotowymi produktami kod asemblera. Możesz spróbować przetłumaczyć je na C za pomocą intrinsics. Baw się dobrze. – hirschhornsalz

Odpowiedz

0

Użyj asmlib Agnera Fog. http://www.agner.org/optimize/#asmlib

Zrobił już problem z napisaniem kodu w zespole dla ciebie, w tym przy użyciu instrukcji SSE4.2. Użyj jego funkcji A_strcmp (lub nierozróżniającej wielkości liter A_stricmp).

Interesujące byłoby, w jaki sposób metoda wykorzystująca parametry wewnętrzne porównuje wydajność.