Recuento rápido del número de bytes iguales entre dos matrices
Yo escribi la funcionint compare_16bytes(__m128i lhs, __m128i rhs)
para comparar dos números de 16 bytes mediante instrucciones SSE: esta función devuelve cuántos bytes son iguales después de realizar la comparación.
Ahora me gustaría usar la función anterior para comparar matrices de dos bytes de longitud arbitraria: la longitud puede no ser un múltiplo de 16 bytes, así que necesito lidiar con este problema. ¿Cómo podría completar la implementación de la función a continuación? ¿Cómo podría mejorar la función de abajo?
int fast_compare(const char* s, const char* t, int length)
{
int result = 0;
const char* sPtr = s;
const char* tPtr = t;
while(...)
{
const __m128i* lhs = (const __m128i*)sPtr;
const __m128i* rhs = (const __m128i*)tPtr;
// compare the next 16 bytes of s and t
result += compare_16bytes(*lhs,*rhs);
sPtr += 16;
tPtr += 16;
}
return result;
}