此优化技术的名称是什么?

强大的眼睛

以下优化技术的名称是什么,为什么它比以前的实现更好?

const int size = 100;
int arr1[size];
int arr2[size];

从双循环

for(int i=0; i<size; ++i)
    arr1[i] = 1;

for(int i=0; i<size; ++i)
    arr2[i] = 1;

到单回路

for(int i=0; i<size; ++i) {
    arr1[i] = 1;
    arr2[i] = 1;
}

编辑

选项是;

  • 指针别名
  • 循环不变代码运动
  • 复制Elison
  • 循环融合
  • 循环展开
5gon12eder

维基百科将此优化称为循环融合想法是,两个循环的循环控制流开销不会增加一倍。如果组合循环的内存访问模式较差,这可能对性能没有预期的影响,但是由于示例中的两个循环都按顺序访问了连续的内存块,因此硬件应该能够有效地对其进行处理。

在转换之前,每个循环都将执行此操作:

  1. i用0初始化
  2. 加载常数size
  3. 如果是i >= size,请跳至8。
  4. 加载arr1数组开始的地址
  5. 将常数1存储在地址arr1 + i
  6. 递增i一。
  7. 跳到3。
  8. 结尾

然后立即再次:

  1. i用0初始化
  2. 加载常数size
  3. 如果i >= size,则跳到16。
  4. 加载arr2数组开始的地址
  5. 将常数1存储在地址arr2 + i
  6. 递增i一。
  7. 跳到11。
  8. 结尾

任何编译器可能要做的第一件事是将“加载常量size”和“加载地址arr”移出循环体。然而,总工作量与有用工作的比率不是很好。将此与组合循环进行比较:

  1. i用0初始化
  2. 加载常数size
  3. 如果i >= size,则跳至10。
  4. 加载arr1数组开始的地址
  5. 将常数1存储在地址arr1 + i
  6. 加载arr2数组开始的地址
  7. 将常数1存储在地址arr2 + i
  8. 递增i一。
  9. 跳到3。
  10. 结尾

计算项目符号作为机器指令的度量标准并不是推理性能的最准确方法。您需要知道您的实际硬件支持哪些指令,才能实际比较所需指令的数量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

此哈希表优化的名称是什么?

来自分类Dev

此iOS视图的名称是什么?

来自分类Dev

此同步方法的名称是什么?

来自分类Dev

此构造函数语法的名称是什么?

来自分类Dev

此“喜欢旋转的人”控件的名称是什么?

来自分类Dev

此语法“(x,y)”的名称是什么?

来自分类Dev

此语法的(可搜索)名称是什么...?

来自分类Dev

此变量声明中的类名称是什么?

来自分类Dev

此Lisp函数的传统名称是什么?

来自分类Dev

此可视化的名称是什么?

来自分类Dev

在HTML中,此属性的名称是什么?

来自分类Dev

flutter中此属性的名称是什么?

来自分类Dev

此视频连接器的名称是什么?

来自分类Dev

此语法“(x,y)”的名称是什么?

来自分类Dev

此运算符的名称是什么-> *?

来自分类Dev

此变量声明中的类名称是什么?

来自分类Dev

此设计(反)模式的名称是什么?

来自分类Dev

此Lisp函数的传统名称是什么?

来自分类Dev

事件的名称是什么?

来自分类Dev

符号的名称是什么?

来自分类Dev

html元素的style属性中设置的项目的技术名称是什么?

来自分类Dev

该技术的名称是什么,它是否违反严格混叠规则或调用UB?

来自分类Dev

允许在PHP中更改URL格式的技术的名称是什么?

来自分类Dev

将CSS类添加到元素的技术的名称是什么?

来自分类Dev

可从Windows内部立即引导至Linux的技术的名称是什么?

来自分类Dev

Docker映像名称是什么,名称是唯一的?

来自分类Dev

Boost.Spirit使用的此异常C ++模板功能的名称是什么?

来自分类Dev

此编程语言功能的名称是什么?是否有任何支持它的实际语言?

来自分类Dev

C#(类似于多个元组的赋值)中此语法的名称是什么?

Related 相关文章

  1. 1

    此哈希表优化的名称是什么?

  2. 2

    此iOS视图的名称是什么?

  3. 3

    此同步方法的名称是什么?

  4. 4

    此构造函数语法的名称是什么?

  5. 5

    此“喜欢旋转的人”控件的名称是什么?

  6. 6

    此语法“(x,y)”的名称是什么?

  7. 7

    此语法的(可搜索)名称是什么...?

  8. 8

    此变量声明中的类名称是什么?

  9. 9

    此Lisp函数的传统名称是什么?

  10. 10

    此可视化的名称是什么?

  11. 11

    在HTML中,此属性的名称是什么?

  12. 12

    flutter中此属性的名称是什么?

  13. 13

    此视频连接器的名称是什么?

  14. 14

    此语法“(x,y)”的名称是什么?

  15. 15

    此运算符的名称是什么-> *?

  16. 16

    此变量声明中的类名称是什么?

  17. 17

    此设计(反)模式的名称是什么?

  18. 18

    此Lisp函数的传统名称是什么?

  19. 19

    事件的名称是什么?

  20. 20

    符号的名称是什么?

  21. 21

    html元素的style属性中设置的项目的技术名称是什么?

  22. 22

    该技术的名称是什么,它是否违反严格混叠规则或调用UB?

  23. 23

    允许在PHP中更改URL格式的技术的名称是什么?

  24. 24

    将CSS类添加到元素的技术的名称是什么?

  25. 25

    可从Windows内部立即引导至Linux的技术的名称是什么?

  26. 26

    Docker映像名称是什么,名称是唯一的?

  27. 27

    Boost.Spirit使用的此异常C ++模板功能的名称是什么?

  28. 28

    此编程语言功能的名称是什么?是否有任何支持它的实际语言?

  29. 29

    C#(类似于多个元组的赋值)中此语法的名称是什么?

热门标签

归档