为什么第一个循环的剂量总是比第二个循环快?

问题描述 投票:3回答:1

特别是,循环次数越多,差异就越明显。

用g ++测试而不进行优化

int main()
{
  int a[]={0,0};
  int b[]={0,0};
  //first loop
  for(unsigned int i=0;i<0x00FFFFFF;i++)
  {
     a[0]++;a[1]++; 
  }

  //second loop
  for(unsigned int i=0;i<0x00FFFFFF;i++)
  {
     b[0]++;b[0]++; //yes it's b[0] not b[1]
  }

  return 0;
}

有人可能不相信我,我也是。但在这段代码中,第一个循环至少比第二个循环快两倍。

c++
1个回答
2
投票

我怀疑这是一个流水线问题。在第一个循环中,您正在写入两个不同的内存位置,因此第二个添加不需要等待第一个完成,并且CPU可以同时执行这两个操作。

在第二个循环中,您将两次递增相同的变量,因此第二个循环必须等待第一个变量完成。这会减慢管道速度。

© www.soinside.com 2019 - 2024. All rights reserved.