C++ 优化c+中的八叉树八进制确定函数+;
我正在建造一个空间八叉树。为了确定某个点(x,y,z)应放置在哪个分支/八分之一点,我使用以下函数:C++ 优化c+中的八叉树八进制确定函数+;,c++,octree,C++,Octree,我正在建造一个空间八叉树。为了确定某个点(x,y,z)应放置在哪个分支/八分之一点,我使用以下函数: if (x>x_centre) { xsign = 1; } else { xsign = 0; } if (y>y_centre) { ysign = 1; } else { ysign = 0; } if (z>z_centre) { zsign = 1; } else { zsign = 0; } return xsi
if (x>x_centre) {
xsign = 1;
}
else {
xsign = 0;
}
if (y>y_centre) {
ysign = 1;
}
else {
ysign = 0;
}
if (z>z_centre) {
zsign = 1;
}
else {
zsign = 0;
}
return xsign + 2*ysign + 4*zsign;
它返回一个0到7之间的数字,每个八分之一都是唯一的。事实证明,这个片段多次被称为大片段。当建造大树时,它会非常耗时
有没有简单的方法来加速这个过程
此allready可提供30%的加速:
xsign = x>x_centre;
ysign = y>y_centre;
zsign = z>y_centre;
return xsign + 2*ysign + 4*zsign;
任何其他提示?使用三元运算符可能是一种选择。有两件事:您可以将函数标记为
inline
,希望编译器在调用站点内联代码。其次,请记住true
相当于1
,false
相当于0
。最后一位将帮助您丢弃if
语句。如果我必须在我的树中放置一千万项,则平均深度为log(一千万)/log(8)=8。所以我不可避免地要调用这个函数八千万次。你说的预测失误是什么意思?@JoachimPileborg,谢谢!allready的性能提高了30%。最终版本可能会尽可能好。查看编译器正在创建的汇编代码(并在此处发布)。