Zunächst wird das CRC32
Anweisung des Intel dient zur Berechnung CRC-32C
(dh verwendet ein anderes Polynom, dass regelmäßiger CRC32. Schauen Sie sich das Wikipedia CRC32 Eintrag)
Um Intels Hardwarebeschleunigung für CRC32C mit gcc
zu verwenden, können Sie:
asm
-Anweisung _mm_crc32_u8
, _mm_crc32_u16
, _mm_crc32_u32
oder _mm_crc32_u64
. Siehe Intel Intrinsics Führer für eine Beschreibung derjenigen für den Compiler von Intel icc
, aber gcc
auch setzt sie . Dies ist, wie Sie es mit __mm_crc32_u8
tun würden, die ein Byte zu einem Zeitpunkt erfolgt, __mm_crc32_u64
wäre weitere Leistungsverbesserung geben, da es 8 Bytes zu einer Zeit in Anspruch nimmt.
Um dies zu kompilieren, musst du -msse4.2
in CFLAGS
übergeben. Wie gcc -g -msse4.2 test.c
sonst wird es sich über undefined reference to _mm_crc32_u8
beschweren.
Wenn Sie möchten, auf eine Ebene C-Implementierung zurück, wenn der Befehl nicht verfügbar in der Plattform ist, wo die ausführbare Datei ausgeführt wird Sie ifunc
Attribut GCC verwenden können. Wie
Siehe diese Antwort für schnelle Hardware- und Software-Implementierungen von CRC-32C. Die Hardwareimplementierung führt effektiv drei crc32
-Anweisungen parallel für die Geschwindigkeit aus.