Branchless Rust: Making a Filter 4x Faster by Removing an If
11 hours ago
- 按阈值过滤数字切片时,性能随选择性变化,50%时最慢,因为分支预测错误。
- 分支预测器猜测执行路径;不可预测的数据会导致预测错误,每次代价高昂(15-20个周期)。
- 排序输入使分支可预测(快4.5倍),但排序并非实际可行的修复方法。
- 无分支编程通过始终写入元素并将比较结果作为数字来条件推进游标,从而消除不可预测的分支。
- 无分支代码运行时间恒定(约1毫秒),不受选择性影响,但在非常可预测的情况下(如保留1%)较慢。
- 该技术应仅用于具有不可预测分支的热路径;牺牲可读性和最佳情况性能。