发布网友 发布时间:2022-04-22 14:16
共1个回答
热心网友 时间:2023-11-06 07:24
由于展开能够消除分支以及一些管理归纳变量的代码,因此可以摊销一些分支开销。
展开可以积极调度(或管道化)循环以掩盖一些延迟。如果有足够的空闲寄存器使变量保持活动状态,因为通过展开相关性链展露了关键路径,这将非常有用。
如果迭代次数是可预测的,并且循环中没有条件分支,则英特尔(R) 奔腾(R) 4 处理器可以正确预测迭代次数为 16 次或更少的内部循环的退出分支。因此,如果循环体不是太大,并且已知可探测的迭代次数,则可以展开内部循环,直到它们的迭代次数达到最大值 16。对于奔腾 III 或奔腾 II 处理器,请不要展开迭代次数大于 4 的循环。 展开过度或展开非常大的循环时,可能导致代码篇幅增加。如果展开后的循环不能再放入跟踪缓存 (TC),这将有害无益。
展开循环体中包含分支的循环时,会增加对 BTB 容量的需求。如果展开后循环的迭代次数是 16 或更少,则分支预测应该能正确预测循环体中改变方向的分支。