掲載済み (2026-05-30号)
171 203文字 • 2分

LLVMのSLPベクタライザにおけるコストモデルの調整

原題: Tuning LLVM's SLP Vectorizer Cost Model

英語

掲載情報

概要

LLVMのSLPベクタライザが、ループ内でのベクトル構築コストの計算を誤り、RISC-V環境で大幅な性能劣化を引き起こしていた問題を修正する過程の記録。

詳細内容

この記事は、LLVMのSLP(Superword Level Parallelism)ベクタライザの修正を通じて、RISC-Vターゲットで発生した約25%の性能回帰(レグレッション)を解決した技術的な詳細を解説しています。主な原因は、最近導入された「順序付き浮動小数点加算リダクション(ordered fadd reduction)」のコストモデルにありました。調査の結果、ベクタライザがリダクション自体のコストはループの反復回数(約20億回)でスケールさせていたのに対し、ベクトルを構築するためのコスト(TreeCost)をスケールさせていなかったことが判明しました。これにより、実際には非常に低速なコード(スタックへの退避とベクトルロードを繰り返すコード)が、コンパイラには「非常に利益が高い」と誤認されていました。解決策として、コスト計算関数にリダクションのルート命令(RdxRoot)を渡し、ループのコンテキストを正しく参照できるようにすることで、ベクトル構築コストも適切にスケールされるよう修正されました。この修正により、RISC-Vのベンチマーク性能は以前のベースラインまで回復しました。