循环嵌套外小内大原则

简介: 循环嵌套外小内大原则
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]++;
  }
}


相关文章
|
2天前
|
C++
C++ 条件与 If 语句:掌握逻辑判断与流程控制精髓
C++ 中的条件语句用于根据布尔表达式的真假执行不同代码。`if` 用于当条件为真时执行一段代码,`else` 配合 `if` 在条件不成立时执行另一段代码。`else if` 允许测试额外的条件。`switch` 语句提供多分支选择。还有三元运算符 `(condition) ? expressionTrue : expressionFalse`,它是一种简写的 if...else 形式,常用于一行内作出决定。
34 0
|
2天前
|
C++
关系运算符及其优先次序:编程中的比较逻辑
在编程中,关系运算符是用于比较两个值之间关系的一种重要工具。它们帮助我们根据这些关系(如相等、不等、大于、小于等)来做出决策或执行特定的代码块。理解关系运算符及其优先次序对于编写正确和高效的代码至关重要。
23 0
|
2天前
|
C# 计算机视觉
26.C#循环嵌套
26.C#循环嵌套
19 0
|
7月前
|
Java
两招教你跳出多重嵌套循环?
两招教你跳出多重嵌套循环?
22 1
|
12月前
|
API Python
一日一技:巧用or关键字实现多重条件判断
一日一技:巧用or关键字实现多重条件判断
75 0
循环嵌套
一个循环语句之中嵌套其它的循环语句就称为循环嵌套处理,循环嵌套层次越多时间复杂度就越高。
68 0
循环嵌套
|
设计模式 数据安全/隐私保护
# 设计原则与思想 --- 重复代码or依赖反转原则(DRY)
# 设计原则与思想 --- 重复代码or依赖反转原则(DRY)
|
SQL 程序员 测试技术
本着什么原则,才能写出优秀的代码? (一)
本着什么原则,才能写出优秀的代码? (一)
134 0
本着什么原则,才能写出优秀的代码? (一)