2012-05-13 14 views
6

Necesito comparar rápidamente dos cadenas en la máquina con soporte SSE4. ¿Cómo puedo hacerlo sin escribir inserciones de ensamblador?Comparar cadenas por envoltorios SSE4

Algunas envolturas como long long bitmask = strcmp(char* a, char* b) serían perfectas.

+0

puede depender del compilador (incluida la versión) y de los indicadores utilizados. Si usa 'gcc-4.7', ¿intentó' -mcpu = native -O3', etc.? –

+1

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

+0

Googleing "sse4 strcmp" da muchos resultados con ready made código ensamblador Puede tratar de traducirlos a C usando intrínsecos. Que te diviertas. – hirschhornsalz

Respuesta

9

En lugar de usar el ensamblaje en línea, debe usar los intrínsecos de Intel SSE.

Para la comparación de cadenas, tendrá las características intrínsecas SSE4.2:

documentación está aquí: http://software.intel.com/sites/products/documentation/doclib/stdxe/2013/composerxe/compiler/cpp-mac/GUID-6E9CFDF2-5DF6-42A4-B429-0E2CD441342E.htm

+0

Tu enlace está muerto :( –

+0

Y estás en lo cierto. Cambiaron el enlace. Se actualizó con el nuevo. – Mysticial

0

Utilice asmlib de Agner Fog. http://www.agner.org/optimize/#asmlib

Ya se ha tomado la molestia de escribir el código en ensamble para usted, incluyendo el uso de las instrucciones SSE4.2. Use su función A_strcmp (o la versión A_stricmp insensible a mayúsculas y minúsculas).

Sería interesante cómo un método que utiliza intrínsecos se compara en el rendimiento.

Cuestiones relacionadas