Ho verificato diverse implementazioni di CRC64. Ad esempio, this, this e this. Il problema con tutti questi è che funzionano con i byte. Tuttavia, su un sistema a 64 bit, mi piacerebbe lavorare con long
(8 byte). In questo modo, avrò bisogno di iterare di meno. Ad esempio, per i dati di 128 byte, utilizzando un byte
, ho bisogno di iterare 128 volte, mentre con long
, avrei bisogno di ripetere solo 16 volte.checksum CRC utilizzando long (64 bit)
Esiste un'implementazione CRC64 che utilizza long
o una dimensione di parola superiore a un byte? Questi schemi possono essere modificati per farlo?
Se SSE è disponibile, è probabile che GCC srotoli il loop e utilizzi anche i registri XMM a 128 bit, se possibile. Quindi, prima di passare un sacco di tempo ad ottimizzare ciecamente il codice, controlla cosa sta facendo il tuo compilatore. –
Ya, ma il calcolo è ciclico, che non penso possa essere vettorializzato. – pythonic
Prima di provare a superare in astuzia il compilatore, controlla quanto è intelligente. GCC esegue molte analisi del ciclo, alcune delle quali sono sicuro che non hai mai sentito parlare. Può (e in effetti fa, in determinate circostanze) srotolare un ciclo anche per il calcolo ciclico. Non sto dicendo che lo fa nel tuo caso, ma devi controllare prima di procedere con le tue ottimizzazioni. –