【发布时间】:2016-07-30 19:18:35
【问题描述】:
您好,我正在优化一个应该给我“下一个”东西的功能。到目前为止,我得到的是
int fun(int a){
const int k = ...;
for(;test_value(a++) != k;);
return a;
}
这是一种快速而肮脏的方法来测试我的算法是否真的有效,但现在我担心循环会在每次迭代时对分支进行测试(如果不是编译器非常擅长在幕后处理它?) .让我们说任何 a 满足测试的机会最多为 1/5,最坏的情况是百万分之一,但 test_value 只是一个或两个时钟周期。有没有一些系统的方法可以帮助我的编译器用算术交换所有分支,以更好地利用 CPU 管道?
【问题讨论】:
-
你不认为这取决于
test_value是什么? -
这是一个应该在几个周期内执行的函数,没有任何分支风险。可能作为现代机器上的 SSE 指令存在。
标签: c optimization pipeline branch-prediction