効率性に関しては、論理比較と冗長メモリ操作

どの税金が増えますか? という条件付きの
if文で配列要素の交換を囲んでいると、冗長な交換を防ぐことができます。

あるいは、確率的な唯一の条件を常に非効率的にチェックする必要がありますか?呼び出しごとに特殊な条件が増える可能性があるとします。

あなたがアルゴリズムを開発しており、効率をチェックしようとしているとしましょう:比較や交換(挿入ソートなど)。

if(condition)
   exchange two elements
ベストアンサー

これは、プロセッサのアーキテクチャ、実行頻度、処理に要するスループット、および交換を行うコストに大きく依存します。その場合、実行可能な現実世界の唯一の答えは「プロファイル、プロファイル、プロファイル」ですもう少し
“。

基本的には、CPUが分岐予測ミスから大きく苦しみ、要素の入れ替えが簡単でない場合は、条件付きのままにしておくことが理にかなっています。
しかし、あなたのターゲットCPUアーキテクチャーが、あまりにも多くのストールを引き起こしたり、エレメントを交換するコストが些かでない場合には、分岐予測ミスのかなりの量をサポートすることができれば、サイズに応じてパフォーマンスを得るかもしれません。前記アレイ。
MOVcc / CMPXCHG
などの命令や非x86対応の命令を使用することで恩恵を受けるかもしれません(このような状況では、分岐を取り除く)。

VTuneやCodeAnalystなどのボトルネックのある場所では、ブランチミス予測に関する統計情報が表示され、アルゴリズム全体にどれだけ影響を与えるかを確認することができます。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です