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.
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.
Zamiast korzystać z wbudowanego zestawu, należy użyć wewnętrznej specyfikacji Intel SSE.
Dla porównania strun, musisz się intrinsics SSE4.2:
dokumentacja jest tutaj: http://software.intel.com/sites/products/documentation/doclib/stdxe/2013/composerxe/compiler/cpp-mac/GUID-6E9CFDF2-5DF6-42A4-B429-0E2CD441342E.htm
Twój link nie działa :( –
Masz rację, zmienili link i zaktualizowali go. – Mysticial
Oto dobry artykuł z użyciem SSE 4.2 dla zwiększenia operacji ciąg: http://www.strchr.com/strcmp_and_strlen_using_sse_4.2
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ść.
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? –
http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011/compiler_c/intref_cls/common/intref_sse42_comp.htm – Mysticial
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