你的代码很快——如果运气够好
Your code is fast – if you're lucky
最近在优化 Quicksort 实现时,我发现了一个有趣的细节:现代编译器(尤其是 Clang)只有在代码风格符合特定要求时,才会生成高效的无分支指令。我通过引入排序网络和循环展开,将 5000 万个 double 类型的排序时间从 4.39 秒优化到了接近 C++ std::sort 的 1.33 秒。但这并非终点,仅仅将指针移动逻辑从冗长的显式写法改为更紧凑的 C 语言惯用写法,就能触发编译器更激进的优化。代码的性能往往不取决于算法本身,而取决于你是否“幸运”地写出了能让编译器发挥最大威力的代码风格。
"你的代码运行速度很快——但这完全取决于你的运气。"