循环嵌套外小内大原则

简介: 循环嵌套外小内大原则
for (int i = 0; i < 10; i++) {
   for (int j = 0; j < 10000; j++) {
   }
}


引入流水线工作机制以后,为了配合流水线工作,处理器增加了一个分支目标缓冲器(Branch Target Buffer)。在流水线工作模式下,如果遇到分支结构,就可以利用分支目标缓冲器预测并读取指令的目标地址。分支目标缓冲器在程序运行时将动态记录和调整转移指令的目标地址,可以记录多个地址,对其进行表格化管理。当发生转移时,如果分支目标缓冲器中有记录,下一条指令在取指令阶段就会将其作为目标地址。如果记录地址等于实际目标地址,则并行成功;如果记录地址不等于实际目标地址,则流水线被冲洗。同一个分支,多次预测失败,则更新记录的目标地址。因此分支预测属于“经验主义”或“机会主义”会存在一定的误测。


基于上述原因,大家以后在编写多重循环时应该把大循环放到内层,这样可以增加分支

预测的准确度,如下面的示例所示:

for(int i=0;i<10;i++){
  //下面每次循环会预测成功9999次
  //第1次没有预测,最后退出循环时预测失败1次
  //这样的过程重复10次
 for(int j=0;j<10000;j++){
  a[i][j]++;
  }
}
for(int j=0;j<10000;j++)
  //下面每次循环会预测成功9次
  //第1次没有预测,最后退出循环时预测失败1次
  // 这样的过程重复10000次
  for(int i=0;i<10;i++){
    a[i][j]++;
  }
}


相关文章
|
10月前
循环嵌套外小内大原则
循环嵌套外小内大原则
|
4月前
|
XML 算法 Java
Java编程中多重循环
Java编程中多重循环
50 0
|
4月前
|
C# 计算机视觉
26.C#循环嵌套
26.C#循环嵌套
45 0
|
4月前
|
Java 程序员
for循环语句(详解+典例)
for循环语句(详解+典例)
72 0
|
11月前
|
Java
两招教你跳出多重嵌套循环?
两招教你跳出多重嵌套循环?
53 1
|
11月前
|
存储 算法 数据处理
for 循环嵌套 for 循环,你需要懂的代码性能优化技巧!
本篇分析的技巧点其实是比较常见的,但是最近的几次的代码评审还是发现有不少兄弟没注意到。 所以还是想拿出来说下。
218 4
|
Python
巧用for循环嵌套结构
巧用for循环嵌套结构
86 0
|
API Python
一日一技:巧用or关键字实现多重条件判断
一日一技:巧用or关键字实现多重条件判断
101 0
|
C语言
C语言,跳出多层循环
对于多循环的函数,我们怎末跳出循环呢?现在讲两种方法跳出循环。关于return 跳出循环的我们之后再补充。
133 0