gpt4 book ai didi

c - 循环展开和优化

转载 作者:太空狗 更新时间:2023-10-29 14:50:27 24 4
gpt4 key购买 nike

给定代码:

for (int i = 0; i < n; ++i) 
{
A(i) ;
B(i) ;
C(i) ;
}

和优化版本:

for (int i = 0; i < (n - 2); i+=3) 
{
A(i)
A(i+1)
A(i+2)
B(i)
B(i+1)
B(i+2)
C(i)
C(i+1)
C(i+2)
}

我不太清楚:哪个更好?我看不到任何使用其他版本可以更快地工作的东西。我在这里错过了什么吗?

我所看到的是每条指令都依赖于前一条指令,这意味着我需要等待上一条指令完成才能开始......

谢谢

最佳答案

在语言的高级 View 中,您不会看到优化。速度的提高来自于编译器对您所拥有的资源的处理。

在第一种情况下,它是这样的:

LOCATION_FLAG;
DO_SOMETHING;
TEST FOR LOOP COMPLETION;//Jumps to LOCATION_FLAG if false

第二个是这样的:

LOCATION_FLAG;
DO_SOMETHING;
DO_SOMETHING;
DO_SOMETHING;
TEST FOR LOOP COMPLETION;//Jumps to LOCATION_FLAG if false

您可以看到在后一种情况下,测试和跳转的开销仅为每 3 条指令。在第一种情况下,它是每 1 条指令;所以它发生得更频繁。

因此,如果您有可以依赖的不变量(一个 mod 3 数组,使用您的示例),那么展开循环会更有效,因为底层程序集编写得更直接。

关于c - 循环展开和优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10080390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com