Closed KazApps closed 3 months ago
このプルリクエストはあまりパフォーマンスが向上していなかったようなのでクローズします。ベンチマーク結果は以下の通りです。
環境: Windows 11 + R9-7945HX + RAM 32GB
コマンド: bench threads 32 hash 16384
を20回実行
環境 | 変更前 | 変更後 | 高速化 |
---|---|---|---|
msys2 + clang 18 | 28068194.3 | 28876402.1 | +2.9% |
msys2 + gcc 14 | 26780341.1 | 27095826.4 | +1.2% |
AOCC 4.2(Windows用にクロスコンパイル) | 28827380.3 | 28697989.1 | -0.5% |
WSL2 + clang 18 | 29317130.1 | 28561244.1 | -2.6% |
WSL2 + gcc 14 | 27955880.3 | 28031336.9 | +0.3% |
WSL2 + AOCC 4.2 | 26744295.3 | 29286278.1 | +9.5% |
WSL2 + Intel Compiler 2024.2.0 | 30443294.4 | 28994974.2 | -5.0% |
プルリク、ありがとうございます。 確認が遅くなって申し訳ありません。
file_ofを乗算で済ませるのは10年ほど前に今回プルリクをいただいたコードに似たコードを書いた覚えがあります。 当時のCPUだとわずかに遅くなったので、書いたコードをrevertしました。
現代の最新のCPU(ZEN4以降など)で、高速化するなら採用するに値すると思います。 AWSでZEN5が使えるようになったら、そこで試してみて、速くなるなら採用したいと思います。
改善点
file_ofでテーブルを使っていたところを乗算とシフトを使ったコードに変更したところ、Windows 11 + Zen 4 + clang 18では約3%の速度の向上が確認されました。ただし、これらの変更が他の環境でも同様の改善をもたらすかは確認できていないため、他の環境でもテストすることを推奨します。 なお、rank_ofはおそらくテーブルを使う方が早そうです。
変更点
以下のコードに変更しました。
ベンチマーク
Windows 11 + R9-7945HX + RAM 32GBでのベンチマークの結果は以下の通りです。
変更前
変更後
rank_ofもテーブルを使わない実装にした場合