Skip to content

perf: 高速化対応#3

Open
HappyOnigiri wants to merge 5 commits into
rnitta:masterfrom
HappyOnigiri:feature/perf-optimization
Open

perf: 高速化対応#3
HappyOnigiri wants to merge 5 commits into
rnitta:masterfrom
HappyOnigiri:feature/perf-optimization

Conversation

@HappyOnigiri
Copy link
Copy Markdown

Summary

7桁以上の指定したハッシュを生成しようとすると少し待ち時間があります。
本 PR でハッシュ計算を高速化したことで git hook に組み込んで常に美しいハッシュにする運用が可能になります。
これでチームから一目置かれる存在になれます!

Implements

  • rust-crypto 0.2 が新しい Rust ツールチェインでビルドできないため、sha1 crate 0.10 へ移行しました。あわせて Cargo.lock を最新フォーマット(v4)で再生成し、Flag::usage() が削除された seahorse 1.1.2 を避けるため Cargo.lock で seahorse を 1.0.0 にピン留めしています
  • ハッシュレートのベースライン計測用に --bench フラグを追加しました
  • SHA1 midstate(prefix_hasher() / suffix_bytes())で内側ループの固定部分を事前にフィードし、毎回のフル計算コストを削減しました
  • AtomicBool による早期終了シグナルで、マッチ発見後に他スレッドの無駄なループを抑制するようにしました
  • sha1 crate の asm フィーチャーで ARMv8 Crypto Extensions(ARM ハードウェア SHA1)を有効化しました

Benchmark(Apple M4 Pro、13 スレッド)

最適化 スループット vs ベースライン
ベースライン 16.3 M/s
SHA1 midstate 32.3 M/s +98%
AtomicBool 早期終了 32.9 M/s +102%
sha1 0.10 + ARM crypto 43.4 M/s +167%

※ いずれも commit_artist --bench -j 13 の実測値です。

Test plan

  • cargo build --release がエラーなしでビルドできること
  • --bench --jobs N でハッシュレートが表示されること
  • 通常の bruteforce 動作(パターンマッチ)が正常に動作すること

rust-crypto 0.2 は新しい Rust ツールチェインでビルドできないため
sha1 crate 0.10 へ移行。これに伴い Cargo.lock を最新フォーマット
(v4) で再生成した。

seahorse は Cargo.toml では ^1.0.0 のまま、Cargo.lock で 1.0.0 に
ピン留めする。1.1.2 で Flag::usage() が削除されており、^1.0.0 が
1.1.2 に解決されるとビルドできないため。
prefix("commit N\0...committer ")を一度だけフィードしたハッシャーを
クローンして再利用することで、毎イテレーションのハッシュ計算を削減。
マッチ発見時に found フラグを立て、同ブロックの他スレッドが
内側ループの先頭でチェックして即リターンするようにした。
@HappyOnigiri HappyOnigiri changed the title Feature/perf optimization perf: 高速化対応 May 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant