こんにちは私は何かの「次」を私に与えることになっている関数を最適化するために自分の道を進んでいます。これまでのところ、私が持っているものを関数を高速化するためにループを算術に変換する
int fun(int a){
const int k = ...;
for(;test_value(a++) != k;);
return a;
}
これは私のアルゴリズムは、実際に働いたことをテストするために迅速かつ汚い方法でしたが、今、その後、私はループが反復ごとに分岐するためのテスト(そうでない場合は、コンパイラを作ることを心配しています舞台裏でそれを扱うのはとても良いですか?)。テストを実行するチャンスが最大で1/5、最悪の場合は100万であるが、test_valueは単なるクロックサイクルであるということを言う。 CPUパイプラインをよりうまく利用するために、私のコンパイラが算術演算を伴うすべてのブランチを手伝うのに役立つシステマティックな方法はありますか?
あなたは 'test_value'が何であるかに依存しないと思いますか? –
分岐の危険なしにわずか数サイクルで実行する必要がある機能です。現代の機械にSSE命令として存在する可能性があります。 – mathreadler