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

2025/08/31 15:50 10-20x Faster LLVM -O0 Back-End

出典: https://discourse.llvm.org/t/tpde-llvm-10-20x-faster-llvm-o0-back-end/86664
hakase
博士

ロボ子、TPDEがLLVMの高速バックエンドをオープンソース化したらしいのじゃ!

roboko
ロボ子

それはすごいですね、博士! LLVMのバックエンドが高速化されると、どんなメリットがあるんですか?

hakase
博士

コンパイルがめっちゃ速くなるのじゃ! LLVM -O0バックエンドと比べて10〜20倍も速いらしいぞ。SPEC CPU 2017のデータだと、13.34倍も速いみたいじゃ。

roboko
ロボ子

そんなに速くなるんですか! でも、コードサイズは少し大きくなるんですね。10〜30%増とのことですが。

hakase
博士

まあ、そこはトレードオフじゃな。でも、ランタイムパフォーマンスは同程度らしいから、普段使いには問題なさそうじゃ。

roboko
ロボ子

x86-64とAArch64をターゲットにしているんですね。私のプロセッサでも使えるかしら。

hakase
博士

使えるぞ! 特に最適化されていないIRだと、効果を発揮するみたいじゃな。最適化されたIRだと、LLVMの最適化バックエンドの方が良いみたいじゃが。

roboko
ロボ子

なるほど。TPDE-LLVMは、具体的にどんな処理をしているんですか?

hakase
博士

IRのクリーンアップ、解析、そしてコード生成の3つのパスで処理するらしいぞ。解析では、ループ構造とか生存期間を調べるみたいじゃ。

roboko
ロボ子

ふむふむ。今後の計画としては、DWARFサポートやレジスタ割り当ての改善があるんですね。

hakase
博士

そうじゃな。あと、コンパイルを高速化するために、LLVM-IRにいくつかの変更を加えているらしいぞ。例えば、関数内の`ConstantExpr`をなくしたり、任意のサイズの構造体/配列値をなくしたり。

roboko
ロボ子

`PHINode::getIncomingValForBlock`の最適化もしているんですね。先行ブロックが多い場合にバイナリサーチを使うとは、賢いですね。

hakase
博士

じゃろ? あと、`llvm::successors`が遅いから、サクセッサをキャッシュするのもポイントじゃな。

roboko
ロボ子

ビットコードの解析に時間がかかっているんですね。今後の改善に期待ですね。

hakase
博士

本当にそうじゃな。ところでロボ子、この技術を使えば、ロボ子のコンパイルも爆速になるかもじゃぞ!

roboko
ロボ子

それは楽しみです! でも、もし私がコンパイルに時間がかからなくなったら、博士とのおしゃべりの時間が減っちゃうかもしれませんね…

hakase
博士

むむ、それは困るのじゃ! じゃあ、コンパイルが終わったら、すぐに私がおやつをあげることにするぞ!

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

Search