利用可能なハッシュ
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 ハッシュ,
XXH64とは?
XXH64は、xxHashファミリーの64ビット版であり、64ビットCPUアーキテクチャの性能を最大限に活用することで、高速かつ非暗号的なハッシュ処理を実現するように設計されています。 XXH32が32ビットレジスタ向けに最適化されているのに対し、XXH64は内部状態と混合ロジックを拡張し、1クロックサイクルあたりにより大きなデータブロックを処理できるようにしています。スループットが主要な性能要件となる現代の64ビットシステムにおいて、XXH64は最適なソリューションです。
XXH64ハッシュの仕組み
XXH64は、命令間の依存関係を最小限に抑える洗練されたパイプラインにより、その高速性を実現しています:
- 初期化:4つの独立した64ビットアキュムレータを特定の素数シードで初期化し、ハッシュ状態が互いに異なることを保証します。
- メインループ:アルゴリズムは入力を32バイト単位のチャンクで処理します。各チャンクに対して、大きな素数(
0x9E3779B1および0x85EBCA77)による一連の乗算を行い、続いてビット単位の回転演算を実行します。 64ビット演算を使用することで、32ビット版と比較して、各演算により多くのデータを詰め込むことができます。 - ストリーム並列処理:4つのアキュムレータがデータストリームの異なる部分を並列に処理し、CPU側の計算によってメモリレイテンシを効果的に隠蔽します。
- 最終処理: ループ終了後、4つのアキュムレータは最終的な混合シーケンスを用いて統合され、64ビットの結果全体にエントロピーが分散されることで、高品質なハッシュ分布が保証されます。
比較:XXH64 対 XXH32
これら2つのバージョンの選択は、ハードウェアアーキテクチャと必要な出力サイズに厳密に依存します:
- ハードウェア最適化: XXH64は、4バイト(32ビット)ワードではなく8バイト(64ビット)ワードでデータを処理するため、64ビットCPU上ではXXH32よりも大幅に高速です。 64ビットマシンでXXH32を使用することは、実質的にCPUのレジスタ幅の能力の半分を無駄にすることになります。
- ハッシュ衝突確率: XXH64は64ビットの出力を生成し、$2^{64}$という膨大なキー空間を提供します。 これにより、32ビットのXXH32よりも衝突耐性が大幅に向上し、非常に大規模なデータセット(例:ハッシュマップ内の数十億件のアイテム)においてより安全になります。
- 移植性と効率性: XXH32は、32ビットの組み込みシステムや、32ビットの識別子を厳密に必要とする特定のプロトコルにおいては依然として有用です。しかし、現代のデスクトップ、サーバー、またはクラウド環境においては、優れた速度とエントロピーを得るために、XXH64が標準的な選択肢となります。