私は私の質問でできる限り明確にしようとする(容易ではない...私にとってもそれほど明確ではない)。 は私が x = a * n1 + b * n2 + c * n3
(このような単一の数学関数とそれらすべてのIFを置き換えることができたと数学的関数と比較した条件付き命令の実行速度
に例えば
IF ((a==0) && (b==1) && (c==1)) THEN x=1
ELSE IF ((a==0) && (b==0) && (c==1)) THEN x=2-
ので、複数のオペランドを持つTHEN指示...あなたはIFのセットを持っていると仮定します実際にはもっと複雑ですが、IFとオペランドももっと多くあります)
この機能は、以前に訓練された人工ニューラルネットワークからのものです。
実行にあたっては、関数はIFよりも時間がかかりますが、条件付きの命令が私に教えてくれたアセンブリでの私の古い背景から来たちょっとした感覚です算術的な時間よりも時間がかかる。
これを確認できますか?多分私が説明を見つけることができるリンクを私に提供するかもしれませんか?
ありがとうございました!
私はあなたの直感は正しいと思います。私はここで、ブランチを排除したという驚くべき結果について、ここでいくつかの最適化問題に従ってきました。 –
https://en.wikipedia.org/wiki/Branch_predictorとそれがリンクしている記事が始まります。相対的な利得は、機能の複雑さと考えられる分岐とに依存するが、現代のプロセッサでは、パイプライン化および分岐予測器がしばしば関連する。 – Peter
多分あなたは最初にあなたのコンパイラが[これを行うことはできません]をチェックするべきです(http://stackoverflow.com/questions/26124620/why-does-msvc-emit-a-useless-movsx-before-performing-this-bitあなたのプログラムをfubarする前にテストしてください。そして、もちろん*常に*実際には違いを生むことができるかどうかを確認してください。プロファイラを使用してください。プログラマの判断は、3回測定して1回カットすることです。 –