受到this question答案的启发,我继续实施了这样的事情:
const int jMax = ..., mask = 0;
for(;!mask;a+=jMax){
mask = 0;
for(j = 0; j<jMax ;j++)
mask |= ((test_value(a+j+1)==k)<<j);
}
return a+ffs(mask);
这应该有助于编译器将任何分支减少jMax因子,对吧?但是我没有看到任何加速。然后我读了这篇关于我所针对的指令test_value的news(硬件popcnt指令似乎很难让编译器与管道对齐 - 或者我没有让我的编译器甚至使用它 - 或者它根本没有从管道中受益)。
在这种情况下,任何人都有任何想法如何帮助编译器生成更好的代码?