"Clean" Code, Horrible Performance
5 hours ago
- 许多“整洁代码”规则(例如优先使用多态而非switch语句)会导致显著的性能下降(速度慢1.5倍至15倍)。
- 使用包含虚函数的类层次结构会引入间接性、指针数组,并隐藏编译器可优化的代码模式,导致优化效果不佳。
- 用平面结构体联合上的switch语句替代多态,使性能提升了1.5倍;进一步使用查找表(数据驱动方法)实现了10倍的加速。
- 向问题中添加更多属性(如角点数量)拉大了性能差距:整洁代码速度比表驱动版本慢15倍。
- 编译器无法优化分散在不同翻译单元中且隐藏在虚函数调用后的代码,限制了手动和自动优化的效果。
- 采用违反整洁代码原则的AVX优化代码比整洁代码版本实现了20-25倍的加速。
- 像“DRY”这样的规则是合理的,但四个结构性规则(多态、无内部知识、小函数、单一职责)对性能有害。
- 作者认为整洁代码方法论可能会抹去12-14年的硬件进步,并且必须在可维护性与如此极端的性能代价之间进行权衡。