ユニットテストに似た構成で、小さなコード片の実行時間を計測するマイクロベンチマーク用C++ライブラリ。
rurban/smhasher
ハッシュ関数の速度と統計的品質を測定するテストスイート。テスト済みの実装を網羅した大規模な比較表も掲載しています。
- スター
- 2,183
- フォーク
- 192
- 未解決の Issue
- 45
- 最終コミット
- 12 時間前
これは何?
SMHasherはハッシュ関数向けのテストスイートです。大きなキーと小さなキーを対象に速度ベンチマークを実行し、ハッシュマップの検索コストを測定するほか、衝突数、偏り、アバランチ特性、健全性チェックなどの統計的品質テストを行い、関数の出力に潜む弱点を明らかにします。
リポジトリでは、MurmurHash、xxHash、wyhash、CityHash、FarmHash、SipHashなど、数百種類に及ぶ非暗号学的・暗号学的ハッシュ関数を網羅した大規模な比較表も公開しています。各項目にはスループット、小さなハッシュの1回あたりのサイクル数、ハッシュマップでの性能、オブジェクトサイズ、および関数が失敗した品質テストが記載されています。デスクトップ向けx86から32-bit ARM搭載スマートフォンまで、複数のCPUでの結果を掲載しています。
データとともに著者の考察も掲載されています。品質に多少の問題がある高速なハッシュでも、実際のハッシュテーブルでは良好に動作することが多い一方、セキュリティが重要な用途では暗号学的な方式や鍵付きの方式が必要だと述べています。
主な機能
- 01大きなキーのスループットと、小さなキーのハッシュ計算にかかるサイクル数をベンチマークします。
- 02ハッシュマップの検索性能とオブジェクトサイズを測定し、インライン化の分析に役立てます。
- 03衝突、偏り、アバランチ特性、健全性に関する統計的品質テストを実行します。
- 04複数のCPUプラットフォームにわたる、ソート可能な比較表を公開します。
ユースケース
- ハッシュテーブルやシンボルテーブルの実装に使うハッシュ関数を選ぶ。
- 採用前に候補となるハッシュ関数の速度と品質を比較する。
- 既知のテストスイートを使って、新しいハッシュ関数の実装を検証する。
- ハッシュの速度、衝突の傾向、ハッシュテーブルの性能のトレードオフを調べる。
使う前に知っておきたいこと
- ライセンスが明確に記載されておらず(メタデータでは NOASSERTION と報告)、再利用条件が不明です。
収録されている特集
トピック
よくある質問
- smhasher とは?
- ハッシュ関数の速度と統計的品質を測定するテストスイート。テスト済みの実装を網羅した大規模な比較表も掲載しています。 SMHasherはハッシュ関数向けのテストスイートです。大きなキーと小さなキーを対象に速度ベンチマークを実行し、ハッシュマップの検索コストを測定するほか、衝突数、偏り、アバランチ特性、健全性チェックなどの統計的品質テストを行い、関数の出力に潜む弱点を明らかにします。
- smhasher は無料で使えますか?ライセンスは?
- smhasher は Other ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
- smhasher は今もメンテナンスされていますか?
- 活発にメンテナンス中。smhasher の最終コミットは 2026年11月7日 です。
- smhasher は何に使えますか?
- ハッシュテーブルやシンボルテーブルの実装に使うハッシュ関数を選ぶ。 採用前に候補となるハッシュ関数の速度と品質を比較する。 既知のテストスイートを使って、新しいハッシュ関数の実装を検証する。 ハッシュの速度、衝突の傾向、ハッシュテーブルの性能のトレードオフを調べる。
- smhasher はどこで入手できますか?
- ソースコードとインストール手順は GitHub にあります:https://github.com/rurban/smhasher
概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。
関連プロジェクト
プラットフォームを問わず同一の32、64、128ビットハッシュを生成する、超高速な非暗号学的ハッシュのCライブラリ。
Webアプリケーションなどの負荷テストと性能測定に使える、オープンソースのJavaアプリケーション。
Viteを活用したユニット・コンポーネントテストフレームワーク。テストでもViteの設定、transformer、プラグインを再利用できます。
小さなテストの作成から、アプリやライブラリの複雑な機能テストまで対応するPythonテストフレームワーク。
ChatGPT APIを使い、コンパイル時に関数本体やテストケースを生成するRustの手続き型マクロ。