は例えば、私はそれがgccのために定義されたとして、Linuxカーネルで使用されている知っている:C#で分岐予測ヒントを使用することはできますか?
#define likely(x) __builtin_expect((x),1)
#define unlikely(x) __builtin_expect((x),0)
このようなものは、C#で可能でない場合は、ほとんどを入れて手動でif文の順序を変更するための最良の選択肢であり、最初に起こりそうなケース?この種の外部知識に基づいて最適化する方法は他にありますか?
関連する注意点として、CLRはガード句を特定する方法を理解しており、代替ブランチが使用されると仮定しているため、この最適化をガードクラスに使用するのは不適切です。
(私は、これはマイクロ最適化することも実現注;私は学術目的のためにのみ興味があります。)
どのようにすれば、C#でILにコンパイルされたバイトコードがどのネイティブCPUにコンパイルされてしまうのでしょうか? – Oded
答えは「いいえ、できません」です。この不可能性の根拠はOdedによって示されている。 –
私はILがインラインでコンパイルされ、ヒントの指示が使用できるネイティブコードにコンパイルされているので、ILでそれを実行することが可能であることを期待していたと思います。または、プロセッサレベルでなくても、他の類似の手法を使用することもできます(ただし、これが可能かどうかはわかりません)。 – ceyko