【问题标题】:What is a cold/dead field and what is a peeling optimization?什么是冷/死场,什么是剥离优化?
【发布时间】:2011-10-14 01:10:45
【问题描述】:

在论文Loop Recognition in C++/Java/Go/Scala (pdf) 中,我们在C++ Tunings 部分找到以下引用:

结构剥离。 结构 UnionFindNode 有 3 个冷场: type_loop_header_。由于节点被分配在一个 数组,这是剥离优化的一个很好的候选。他们三个 字段可以剥离成一个单独的数组。注意header_ 字段也死了——但删除它的性能很小 影响。 BasicBlock 结构中的 name_ 字段也死了, 但它非常适合填充空间,因此不会被移除。

有人可以向我解释什么是冷/死域,以及剥离优化是什么(我理解作者在那里做了什么,但其背后的基本原理是什么)?

【问题讨论】:

  • 奇怪。不应该把这些术语的意思写在纸上吗?或者至少在哪里可以找到它们的含义?
  • 论文中的其他任何地方都没有提到这些术语,谷歌也没有找到任何东西。

标签: c++ optimization


【解决方案1】:

Structure peeling 是一种优化,您可以将结构划分为多个结构以提高数据局部性(以减少缓存未命中)。您将“热”数据(经常访问)与“冷”数据(很少访问)分离为两个结构,通过最大化缓存命中的概率来提高缓存效率。

在文章中,作者决定将type_loop_header_ 字段从访问频率更高的字段中移开。

有关更多信息,您可以查看这篇关于结构布局优化的科学文章,其中包含对结构剥离等技术的描述:Structure Layout Optimizations in the Open64 Compiler: Design, Implementation and Measurements

如果您可以访问 ACM 数字图书馆,也可以下载Practical structure layout optimization and Advice

【讨论】:

    【解决方案2】:

    这些术语与编译器优化技术有关。

    这是我找到的here

    结构拆分

    结构分裂是将结构划分成它们的动作 成分。一旦完成,然后可以将组件分配给 寄存器,以便更快地访问。这是一个特别的优势,当 从函数返回结构,其中整个结构可以 在寄存器中而不是在堆栈中返回。

    Here 他们说:

    结构剥离变换是结构的一个特例 不需要引入指针的拆分。

    再次,here 他们说:

    另外,当一个变量死亡时(当它的值不会被使用时 稍后),分配给它的寄存器将被重用。

    【讨论】:

      猜你喜欢
      • 2022-08-14
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 2011-02-01
      • 2013-11-13
      相关资源
      最近更新 更多