2017-04-11 5 views
0

La fonction CRC 64 bits existe sur les intrinsèques Intel SSE4.2. Cependant, je ne trouve pas de version 256 bits du calcul du CRC sur les intrinsèques AVX2. Cependant, je ne trouve pas de version 256 bits du calcul CRC sur les intrinsèques AVX2. J'utilise des variables 256 bits (__m256i) sur mon programme, donc je veux calculer crc (ou hash) sur 256 bits. Comment puis-je faire cette opération avec Intel AVX2?Calcul CRC 256 bits sur AVX2

Répondre

1

_mm_crc32_u64 n'est pas un intrinsèque SIMD, même s'il fait théoriquement partie de SSE4.2 - c'est juste une instruction scalaire normale qui fonctionne sur des valeurs de 64 bits. Il n'est donc pas logique de parler de versions SIMD 128 bits ou 256 bits - il suffit de l'appliquer en boucle à un tableau de valeurs 64 bits non signées.

Voir this answer pour une explication plus complète des diverses instructions et des intrinsèques du CRC32 x86.

+0

Dans ce cas, devrais-je additionner les valeurs crc qui proviennent de chaque 4 boucles? Parce que je veux représenter 256 bits comme une valeur de crc. –

+0

Vous ne devriez pas ajouter de CRC - vous devriez simplement cumuler CRC toutes les données que vous générez, dans la bonne séquence. Si cela n'est toujours pas clair, vous devrez peut-être commencer une nouvelle question, expliquer ce que vous essayez de faire et inclure la partie pertinente de votre code existant. –

+0

D'autre part, est-il logique d'appliquer des sous-opérations (décalage, XOR, MOD2 etc.) à un vecteur de 256 bits comme la fonction _mm_crc32_u64? –