Hasty Briefsbeta

双语

Your code is fast – if you're lucky

2 days ago
  • #quicksort algorithm
  • #branchless programming
  • #compiler optimization
  • 现代编译器,特别是 Clang,在使用某些编程风格时,会通过无分支指令来优化循环。
  • 一个采用了排序网络和循环展开的快速排序实现,最初比 C++ 标准库的 std::sort 慢。
  • 将一段初学者友好的 if 语句改写为紧凑的 C 语言惯用法(使用后置递增运算符)显著提高了性能。
  • 这个“外观上”的改动触发 Clang 将分支替换为 csel(条件选择)指令,使代码变为无分支结构。
  • 在 x86 架构上,Clang 类似地使用 cmov 指令生成无分支代码,而 GCC 则始终生成较慢的基于分支的版本。
  • 优化后的快速排序比原始版本快了超过 6 倍,而且比 std::sort 也快了近一倍。