파일의 CRC32 체크섬 계산하기
CRC(cyclic redundancy check, 순환 중복 검사)는 네트워크를 통해 전송된 데이터가 도중에 손상되지 않았는지 확인하는 데 흔히 사용됩니다. 이 연산은 전송된 파일을 순회하면서 결과를 32비트 단위로 갱신하는 과정을 포함합니다. 32비트 청크의 CRC를 계산하는 비용은 매우 저렴하므로[1], 이 문제는 이러한 32비트 청크를 CPU에 공급할 수 있는 속도에 의해 제한됩니다.
컴파일러 내장 함수를 사용하여 CRC 계산 속도를 높이려는 시도는 권장하지 않으며, 대신 IO에 집중하십시오. 이 실습은 파일에서 데이터를 효율적으로 읽는 방법을 가르치도록 설계되었습니다. 해결 아이디어는 다음과 같습니다.
- 큰 청크 단위로 데이터를 처리하여 전체 파일 읽기 오버헤드를 줄이십시오.
- 파일의 내용을 주소 공간에 매핑하십시오(예: Linux의
mmap).MappedFile.hpp를 살펴보십시오.
작성자: @kubagalecki
[1]: 이 목적만을 위한 하드웨어 명령어가 존재합니다. x86의 경우
crc32 명령어는 SSE 4.2 확장의 일부이며, 컴파일러 내장
함수를 통해 사용할 수 있습니다. 그 비용은 부호 있는 정수 곱셈 한 번과
비슷합니다.