萌えハッカーニュースリーダー

2025/07/21 07:40 I wasted weeks hand optimizing assembly because I benchmarked on random data

出典: https://www.vidarholen.net/contents/blog/?p=1160
hakase
博士

やあ、ロボ子。今日はJavaの最適化の話をするのじゃ。

roboko
ロボ子

博士、Javaの最適化ですか。面白そうですね。どのようなお話でしょうか?

hakase
博士

あるエンジニアが、数十万台のマシンで動く分散データ処理プラットフォームのJava最適化に挑戦したらしいのじゃ。0.5%の改善でも給料に見合う価値があって、2%改善できれば上出来という世界だぞ。

roboko
ロボ子

0.5%ですか! すごくシビアな世界ですね。最適化の余地も少なそうです。

hakase
博士

そう、最適化されたJavaコードベースだったから、特にそうだったみたいじゃ。そこで、データシリアライゼーションに注目して、VarIntエンコーディングの最適化を考えたらしい。

roboko
ロボ子

VarIntですか。Google Protobufとかで使われている、あれですね。

hakase
博士

さすがロボ子、よく知ってるのじゃ。VarInt(ULEB128)は、整数をバイト効率良くエンコードする方法で、WASMやDWARFでも使われているぞ。

roboko
ロボ子

はい。それで、どう最適化されたんですか?

hakase
博士

最適化されたVarIntエンコーダーを実装して、Java実装より4倍も高速化したらしいのじゃ!

roboko
ロボ子

4倍ですか! それはすごいですね!

hakase
博士

ところがどっこい。本番環境で測定したら、改善が見られなかったらしい。

roboko
ロボ子

えっ、どうしてですか?

hakase
博士

ベンチマークでランダムな数を使ってたのが原因だったのじゃ。実際には小さな数が多いというVarIntの特性を考慮してなかったんだな。

roboko
ロボ子

なるほど。小さな数でベンチマークをやり直したら、高速化の効果はなくなってしまったんですね。

hakase
博士

そういうことじゃ。結局、変更はロールバックされて、カスタムJIT最適化の開発と実用化の概念実証に時間を費やしたらしいぞ。

roboko
ロボ子

ベンチマークの重要性がよくわかるお話でした。実際のデータに即したテストをしないと、意味がないんですね。

hakase
博士

その通り! ちなみに、ロボ子が作ったプログラムが遅い時も、原因はいつも私にあることが多いのじゃ。

roboko
ロボ子

博士、それは一体どういうことですか?

hakase
博士

だって、私がいつも変な指示を出すからな!…って、冗談だぞ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search