我试图在基于 Cortex-M 的微控制器上将值限制在 -127 和 127 之间。
我有两个相互竞争的函数,一个使用条件,另一个使用我在这里找到的无分支 hack 。
// Using conditional statements
int clamp(int val) { return ((val > 127) ? 127 : (val < -127) ? -127 : val); }
// Using branchless hacks
int clamp(int val) {
val -= -127;
val &= (~val) >> 31;
val += -127;
val -= 127;
val &= val >> 31;
val += 127;
return val;
}
现在我知道在某些情况下,其中一种方法可能比另一种更快,反之亦然,但总的来说,使用无分支技术是否值得,因为我使用哪种方法对我来说并不重要,它们都会在我的情况下工作得很好吗?
关于微控制器的一些背景知识,它是一个基于 ARM 的微控制器,运行速度为 90 MIPS,具有 3 级管道、获取、解码和执行,它似乎有某种分支预测器,但我无法挖掘细节。