Fan*_*ang 4 algorithm optimization
我在一篇论文中看到了一句话:"将分支转换为数据依赖关系以避免错误预测的分支".(第6页)
我想知道如何将代码从分支更改为数据依赖项.
这是一篇论文:http://www.adms-conf.org/p1-SCHLEGEL.pdf
更新:如何在二进制搜索中转换分支?
Jer*_*fin 11
基本的想法(我认为)将改变:
if (a>b)
return "A is greater than B";
else
return "A is less than or equal to B";
Run Code Online (Sandbox Code Playgroud)
成:
static char const *strings[] = {
"A is less than or equal to B",
"A is greater than B"
};
return strings[a>b];
Run Code Online (Sandbox Code Playgroud)
对于二进制搜索中的分支,让我们考虑"正常"二进制搜索的基本思想,它通常看起来(至少含糊地)如下:
while (left < right) {
middle = (left + right)/2;
if (search_for < array[middle])
right = middle;
else
left = middle;
}
Run Code Online (Sandbox Code Playgroud)
我们可以用几乎相同的方式摆脱这里的分支:
size_t positions[] = {left, right};
while (left < right) {
size_t middle = (left + right)/2;
positions[search_for >= array[middle]] = middle;
}
Run Code Online (Sandbox Code Playgroud)
[用于通用代码left + (right-left)/2而不是(left+right)/2.]