He comprobado diferentes implementaciones de CRC64. Por ejemplo, this, this y this. El problema con todo esto es que trabajan con bytes. Sin embargo, en un sistema de 64 bits, me gustaría trabajar con long
(8 bytes). De esta manera, necesitaré iterar menos. Por ejemplo, para datos de 128 bytes, usando un byte
, necesito iterar 128 veces, mientras que con long
, necesitaría iterar solo 16 veces.Suma de comprobación de CRC con long (64 bit)
¿Hay alguna implementación CRC64 que use long
o incluso un tamaño de palabra mayor que un byte? ¿Pueden estos esquemas ser modificados para hacerlo?
Si SSE está disponible, es más probable que GCC desenrolle su bucle e incluso utilice registros XMM de 128 bit si es posible. Entonces, antes de invertir mucho tiempo optimizando ciegamente el código, verifique lo que hace su compilador. –
Ya, pero el cálculo es cíclico, lo cual no creo que pueda ser vectorizado. – pythonic
Antes de intentar superar al compilador, compruebe qué tan inteligente es. GCC realiza muchos análisis de bucle, algunos de los cuales estoy seguro de que nunca escuchó. Puede (y de hecho lo hace, en determinadas circunstancias) desenrollar un bucle incluso para el cálculo cíclico. No digo que sí lo haga en su caso, pero debe verificar antes de proceder con sus propias optimizaciones. –