17 hours ago
- 向编译器提供编译时已知的循环计数(例如通过`std::span<int, 8>`)可以启用循环展开优化。
- 动态大小的span(`std::span<int>`)会导致一个直接的循环,每次迭代都有计数器和分支。
- 展开消除了循环计数器和条件分支,节省了指令,并允许进一步的模式检测,例如使用`ldmib`进行多次加载。
- 编译器可能会部分展开、推测性展开,或者根据启发式和迭代计数回退到常规循环(例如,在50次迭代时放弃)。
- 检查热点循环并提供编译时循环计数可以为编译器成功做好准备;配置文件引导优化(PGO)也可以帮助优化性能。