在论文Loop Recognition in C++/Java/Go/Scala (pdf)中,我们在 C ++ Tunings 部分找到以下引用:
结构剥离。结构
UnionFindNode
有3个冷场:type_
,loop_
和header_
。由于节点是在一个中分配的 数组,这是剥离优化的理想选择。他们三个 字段可以剥离成一个单独的数组。请注意header_
字段也死了 - 但删除它的性能很差 影响。name_
结构中的BasicBlock
字段也已死亡, 但它很适合填充空间,因此不会被移除。
有些人可以向我解释一下冷/死场是什么,剥皮优化是什么(我理解作者在那里做了什么,但背后的理由是什么)?
答案 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)