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

Bjö*_*lex 15 c++ optimization

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

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

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

Luc*_*lle 14

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

在文章中,作者决定移动type_,loop_header_从更频繁访问的字段的字段了.

有关更多信息,您可以查看这篇关于结构布局优化的科学文章,其中包含结构剥离的描述以及其他技术:Open64编译器中的结构布局优化:设计,实现和测量

如果您可以访问ACM数字图书馆,还可以下载实际结构布局优化和建议.


BЈо*_*вић 13

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

这是我在这里找到的:

结构分裂

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

他们在这里说:

结构剥离变换是结构分裂的特定情况,其中不需要引入指针.

他们再次在这里说:

此外,当变量已死时(以后不再使用其值),将重新使用已分配给它的寄存器.