什么是冷/死场,什么是剥离优化?

时间:2011-07-27 08:06:23

标签: c++ optimization

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

  

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

有些人可以向我解释一下冷/死场是什么,剥皮优化是什么(我理解作者在那里做了什么,但背后的理由是什么)?

2 个答案:

答案 0 :(得分:14)

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

在文章中,作者决定将type_loop_header_字段移离更频繁访问的字段。

有关更多信息,您可以查看有关结构布局优化的科学文章,其中包含结构剥离的说明以及其他技术:Structure Layout Optimizations in the Open64 Compiler: Design, Implementation and Measurements

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

答案 1 :(得分:13)

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

这是我找到的here

  

结构拆分

     

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

Here他们说:

  

结构剥离转变是结构的特殊情况   分裂,不需要引入指针。

再次,here他们说:

  

此外,当变量已死时(不会使用其值)   后来),它被分配到的寄存器将被重用。