Branchless Rust: Making a Filter 4x Faster by Removing an If13 hours agohttps://www.greyblake.com/blog/branchless-rust/按阈值过滤数字切片时,性能随选择性变化,50%时最慢,因为分支预测错误。分支预测器猜测执行路径;不可预测的数据会导致预测错误,每次代价高昂(15-20个周期)。排序输入使分支可预测(快4.5倍),但排序并非实际可行的修复方法。无分支编程通过始终写入元素并将比较结果作为数字来条件推进游标,从而消除不可预测的分支。更多...
Your code is fast – if you're lucky23 days agohttps://tiki.li/blog/lucky_code.html现代编译器,特别是 Clang,在使用某些编程风格时,会通过无分支指令来优化循环。一个采用了排序网络和循环展开的快速排序实现,最初比 C++ 标准库的 std::sort 慢。将一段初学者友好的 if 语句改写为紧凑的 C 语言惯用法(使用后置递增运算符)显著提高了性能。这个“外观上”的改动触发 Clang 将分支替换为 csel(条件选择)指令,使代码变为无分支结构。更多...