2012-03-01 15 views
6

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?

+2

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. –

+1

Ya, pero el cálculo es cíclico, lo cual no creo que pueda ser vectorizado. – pythonic

+1

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. –

Respuesta

13

El cálculo de CRC utiliza un truco para evitar tener que procesar los datos bit a bit: utiliza una tabla de búsqueda que le permite procesar múltiples bits a la vez.

Procesamiento n bits a la vez requiere una tabla de búsqueda del tamaño 2^n. Las implementaciones vinculadas leen 1 byte (8 bits) a la vez, y de hecho todas usan una tabla de búsqueda de tamaño 256 == 2^8.

Procesamiento de 64 bits a la vez requeriría una tabla de búsqueda de tamaño 2^64, que no es práctico. Esta es la razón por la cual las implementaciones comunes de CRC hacen el procesamiento de 1 byte a la vez.

Si bien es posible procesar 2 bytes a la vez con una matriz de entrada 65536, es probable que esto tenga un impacto negativo en el rendimiento debido al uso de más memoria caché de la CPU.

+1

BTW, ¿sabe si las tablas de búsqueda también se usan en implementaciones de hardware? –

+0

@Vlad No sé mucho sobre las implementaciones de hardware. – interjay

+0

@VladLazarenko: Hay implementaciones de hardware que están vinculadas con las comunicaciones en serie y se ejecutan a la misma velocidad que la velocidad en baudios, procesando cada bit por turno y, por lo tanto, no necesitan tablas de búsqueda. – quamrana