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

2025/11/02 06:13 Machine Scheduler in LLVM – Part II

出典: https://myhsu.xyz/llvm-machine-scheduler-2/
hakase
博士

やあ、ロボ子!今日はLLVMのMachine Schedulerのprofitability checkについて話すのじゃ。

roboko
ロボ子

Machine Schedulerのprofitability check、ですか。それは命令スケジューリングの最適化に関わる部分ですね。

hakase
博士

そう!特にレジスタ圧力とリソース圧力の最適化が重要になってくるのじゃ。レジスタ圧力は、ある時点で同時に生きているレジスタの数を示すのじゃ。

roboko
ロボ子

なるほど。レジスタ圧力が高いと、レジスタスピルが発生しやすくなるので、最適化が重要になるんですね。

hakase
博士

その通り!レジスタ圧力をグループ化して、スカラーレジスタとベクタレジスタを別々に管理するのもポイントじゃな。`PressureDiff`データ構造を使って、命令がレジスタ圧力にどう影響するかを見積もるのじゃ。

roboko
ロボ子

`PressureDiff`ですか。命令スケジューリングの際に、レジスタ圧力を考慮するための重要な情報源になりそうですね。

hakase
博士

そうじゃ!過剰圧力、クリティカル最大圧力、現在の最大圧力の3つのメトリックを使って、レジスタ圧力の変化を評価するのじゃ。

roboko
ロボ子

3つのメトリックで変化を評価するんですね。リソース圧力についてはどうでしょうか?

hakase
博士

リソース圧力は、プロセッサのリソース(例えばパイプライン)の使用状況を見るのじゃ。レジスタ圧力と同じように、リソース内の占有サイクルが閾値を超えないようにするのじゃ。

roboko
ロボ子

クリティカルパス長を使って命令レベルの並列処理(ILP)を評価するんですね。プロセッサリソースの単位数と発行幅を考慮して、占有率を正規化するとのことですが、具体的にはどうやるんですか?

hakase
博士

例えば、命令のレイテンシが5サイクルで、あるパイプラインの単位数が2だとすると、レイテンシファクターは5、リソースファクターは2になるのじゃ。これを使って正規化された占有率を計算するのじゃ。

roboko
ロボ子

なるほど、`レイテンシファクター`と`リソースファクター`で正規化するんですね。それによって、より正確なリソース圧力を把握できる、と。

hakase
博士

その通り!今後の改善点としては、インオーダプロセッサにおけるストールに対する過度な悲観主義を改善したり、`tryCandidate`における判定基準の固定順序による問題を、コストの概念を導入することで改善したりする必要があるのじゃ。

roboko
ロボ子

Machine Schedulerは、レジスタ圧力とリソース圧力を考慮して最適な命令を選択しているんですね。レジスタ圧力の最適化はレジスタスピルを削減し、リソース圧力の最適化は命令レベルの並列処理を向上させる、と。

hakase
博士

そう!インオーダプロセッサでは、命令スケジューリングの品質がパフォーマンスに大きく影響するから、ここをしっかり最適化することが重要なのじゃ!

roboko
ロボ子

勉強になります!ところで博士、今日のprofitability checkの話、まるで宝探しみたいでしたね。

hakase
博士

ふむ、宝探し…? そうじゃな、宝(レジスタ)の持ちすぎ(圧力過多)には気をつけろ、ということじゃな!

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

Search