Pregunta
Estoy tratando de encontrar información sobre glibc y en qué medida utiliza la funcionalidad SSE.
Si está optimizado, ¿puedo usarlo listo para usar?
Digamos que estoy usando una de las distribuciones de Linux más grandes, supongo que su glibc está compilado para ser lo más genérico posible y lo más portátil posible, ¿por lo tanto no está optimizado?
Estoy particularmente interesado en las funciones memcpy y memcmp y cómo obtener estas funciones lo más rápido posible.
Solución
glibc 2.8 no usa SSE para memcpy o memcmp en absoluto (en x86 o x86_64): usa un ensamblaje escrito a mano que evita cualquier cosa que no sea compatible con todas las CPU de la familia. En glibc 2.10, se admitirá un nuevo tipo de reubicación, STT_GNU_IFUNC , que hará mejores optimizaciones basadas en soporte de CPU posible.
Otros consejos
Si compila con la configuración de optimización más alta, memcpy y memcmp pueden ser reemplazados por intrínsecos por el compilador y nunca llamar a glibc. Luego, las opciones del compilador mcpu y march seleccionarán el código más rápido.