Popcnt with c,帮助编译器避免分支和对齐管道

时间:2016-04-10 02:38:36

标签: c assembly sse

受到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指令似乎很难让编译器与管道对齐 - 或者我没有让我的编译器甚至使用它 - 或者它根本没有从管道中受益)。

在这种情况下,任何人都有任何想法如何帮助编译器生成更好的代码?

0 个答案:

没有答案