Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

サポートされている RUSTFLAGS

デバッグやプロファイリング時の支援として、実験的な -Z autodiff rustc フラグ(RUSTFLAGS 経由で cargo に渡すことができます)のサポートを追加しました。これにより、rustc を再コンパイルすることなく Enzyme の挙動を変更できます。現在、autodiff では以下の値をサポートしています。

デバッグフラグ

PrintTA // TypeAnalysis 情報を出力する
PrintTAFn // 特定の関数の TypeAnalysis 情報を出力する
PrintAA // ActivityAnalysis 情報を出力する
Print // 生成および最適化中の微分済み関数を出力する
PrintPerf // AD 関連のパフォーマンス警告を出力する
PrintModBefore // AD を実行する直前に LLVM-IR モジュール全体を出力する
PrintModAfter // AD を実行した後、最適化の前に LLVM-IR モジュール全体を出力する
PrintModFinal // 最適化と AD を実行した後に LLVM-IR モジュール全体を出力する
LooseTypes // Type Info が不足している場合に中止する代わりに、不正確な導関数のリスクを許容する

LooseTypes は、Can not deduce type of <X> という Enzyme エラーを解消し、一部のコードを実行できるようにするために役立つことがよくあります。ただし、このフラグは不正確な勾配を引き起こす可能性が十分にあることに注意してください。さらに悪いことに、その勾配は特定の入力値では正しくても、別の入力値では正しくない可能性があります。そのため、このようなバグについては issue を作成し、バグが修正されるのを待つ間だけ、このフラグを一時的に使用してください。

ベンチマークフラグ

パフォーマンス実験とベンチマークのために、以下もサポートしています。

NoPostopt // AD の後に LLVM-IR モジュールを最適化しない
RuntimeActivity // Enzyme のランタイムアクティビティ機能を有効にする
Inline // LLVM のデフォルトを超えて、可能な限りインライン化を最大化するよう Enzyme に指示する

複数の autodiff 値は、カンマを区切り文字として使用して組み合わせることができます。

RUSTFLAGS="-Z autodiff=Enable,LooseTypes,PrintPerf" cargo +enzyme build

-Zautodiff=Enable を使用すると、autodiff を使用できるようになり、通常の rustc コンパイルパイプラインが更新されます。

  1. 選択したコンパイルパイプラインを実行します。リリースビルドを選択した場合、ベクトル化とループ展開を無効にします。
  2. 関数を微分します。
  3. モジュール全体に対して、選択したコンパイルパイプラインを再度実行します。この時点では、ベクトル化やループ展開は無効にしません。