2017-04-11 1 views
0

인텔 SSE4.2 내장 함수에는 64 비트 CRC 함수가 있습니다.AVX2에서 256 비트 CRC 계산

unsigned __int64 _mm_crc32_u64 (unsigned __int64 crc, unsigned __int64 v) 

그러나 AVX2 내장 함수에서 256 비트 버전의 CRC 계산을 찾을 수 없습니다. 내 프로그램에서 256 비트 변수 (__m256i)를 사용하고 있으므로 256 비트를 초과하여 crc (또는 해시)를 계산하려고합니다. Intel AVX2에서 어떻게이 작업을 수행 할 수 있습니까?

답변

1

_mm_crc32_u64은 개념 상 SSE4.2의 일부 임에도 불구하고 SIMD 내장 함수가 아닙니다. 이것은 64 비트 값에서 작동하는 정상적인 스칼라 명령입니다. 따라서 128 비트 또는 256 비트 SIMD 버전에 대해 이야기하는 것은 의미가 없습니다. 부호없는 64 비트 값의 배열에 루프로 적용하기 만하면됩니다.

다양한 x86 CRC32 명령어 및 내장 함수에 대한 자세한 내용은 this answer을 참조하십시오.

+0

그 경우, 각 4 루프에서 오는 crc 값을 합산해야합니까? 256 비트를 하나의 crc 값으로 나타내려고하기 때문에. –

+0

CRC를 추가해서는 안됩니다. 생성하는 모든 데이터를 올바른 순서로 누적 CRC해야합니다. 여전히 명확하지 않은 경우 새 질문을 시작하고 수행하려는 내용을 설명하고 기존 코드의 관련 부분을 포함해야 할 수도 있습니다. –

+0

한편, _mm_crc32_u64 함수와 같은 256 비트 벡터에 하위 연산 (시프 팅, XOR, MOD2 등)을 적용하는 것이 논리적입니까? –