사용 가능한 해시
MD2 해시, MD4 해시, MD5 해시, SHA1 해시, SHA224 해시, SHA256 해시, SHA384 해시, SHA512/224 해시, SHA512/256 해시, SHA512 해시, SHA3-224 해시, SHA3-256 해시, SHA3-384 해시, SHA3-512 해시, RIPEMD128 해시, RIPEMD160 해시, RIPEMD256 해시, RIPEMD320 해시, WHIRLPOOL 해시, TIGER128,3 해시, TIGER160,3 해시, TIGER192,3 해시, TIGER128,4 해시, TIGER160,4 해시, TIGER192,4 해시, SNEFRU 해시, SNEFRU256 해시, GOST 해시, GOST-CRYPTO 해시, ADLER32 해시, CRC32 해시, CRC32B 해시, CRC32C 해시, FNV132 해시, FNV1A32 해시, FNV164 해시, FNV1A64 해시, JOAAT 해시, MURMUR3A 해시, MURMUR3C 해시, MURMUR3F 해시, XXH32 해시, XXH64 해시, XXH3 해시, XXH128 해시, HAVAL128,3 해시, HAVAL160,3 해시, HAVAL192,3 해시, HAVAL224,3 해시, HAVAL256,3 해시, HAVAL128,4 해시, HAVAL160,4 해시, HAVAL192,4 해시, HAVAL224,4 해시, HAVAL256,4 해시, HAVAL128,5 해시, HAVAL160,5 해시, HAVAL192,5 해시, HAVAL224,5 해시, HAVAL256,5 해시,
XXH3란 무엇인가?
XXH3는 최신 CPU 아키텍처를 위해 설계된 xxHash 계열의 최첨단 해시 알고리즘입니다. 이 알고리즘은 SIMD(Single Instruction, Multiple Data)와 같은 고급 명령어 세트 및 정교한 병렬 처리를 활용하여 이전 버전(XXH32 및 XXH64)보다 훨씬 뛰어난 성능을 발휘하는 비암호화 해시 함수입니다. XXH3는 64비트 및 128비트 해시 출력을 모두 생성할 수 있어, 고성능 데이터 처리, 해시 맵 및 데이터 무결성 검사에 유연한 솔루션을 제공합니다.
XXH3 해시는 어떻게 작동하나요?
XXH3는 CPU 파이프라인의 스톨을 최소화하여 처리량을 극대화하도록 설계되었습니다:
- 초기화: 대규모 내부 상태를 초기화하여 여러 데이터 블록을 동시에 처리할 수 있게 합니다.
- 벡터 처리(SIMD): 표준 레지스터를 사용하여 데이터를 처리하는 XXH32/64와 달리, XXH3는 SIMD 명령어(예: AVX2 또는 NEON)를 사용합니다. 이를 통해 알고리즘은 단일 클럭 사이클 내에 여러 데이터 요소에 대한 연산을 수행할 수 있습니다.
- 병렬 누적: 병렬로 작동하는 여러 누적기를 유지합니다. 이 접근 방식은 CPU가 RAM에서 더 많은 데이터를 가져오기를 기다리는 동안 해시의 일부를 계산할 수 있게 하여 메모리 지연 시간을 효과적으로 숨깁니다.
- 최종 처리(Avalanche): 데이터 스트림이 처리된 후, XXH3는 고도로 최적화된 "avalanche" 혼합 단계를 적용합니다. 이를 통해 입력값의 아주 미세한 비트 변화조차도 완전히 다른 128비트(또는 64비트) 다이제스트로 이어지도록 보장합니다.
차이점: XXH3 대 XXH32 및 XXH64
- 처리량 및 성능:
XXH3가 훨씬 우수합니다: 최신 CPU에서 XXH3는 XXH64보다 2~3배 빠르며, XXH32보다 훨씬 빠릅니다. XXH3는 최신 시스템의 메모리 대역폭을 최대한 활용하도록 설계된 반면, 구버전들은 CPU의 명령어 실행 속도에 의해 제한받는 경우가 많습니다.
아키텍처 활용도:
- XXH32/64는 "스칼라" 방식: 이들은 표준적인 순차적 CPU 명령어를 사용합니다. 이 방식은 이식성이 뛰어나지만, 현재 프로세서에 탑재된 최신 "벡터" 유닛의 성능을 완전히 활용하지는 못합니다.
XXH3는 "벡터화"되어 있습니다: SIMD 명령어를 사용하도록 특별히 설계되어, 현재 세대 하드웨어(서버, 클라우드 환경 및 최신 PC)에 대한 "네이티브" 선택지입니다.
다용도성:
XXH3는 통합형입니다: 이전에는 원하는 출력 크기를 얻기 위해 XXH32(32비트)와 XXH64(64비트) 중 하나를 선택해야 했지만, XXH3는 동일한 고성능 코어에서 64비트와 128비트 출력을 모두 제공합니다.
충돌 저항성:
- XXH3 (128비트 모드): XXH32 및 XXH64보다 훨씬 뛰어난 충돌 저항성을 제공하므로, 드문 충돌조차 용납될 수 없는 대규모 데이터셋에 가장 적합한 선택입니다.