在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数字图书馆,还可以下载实际结构布局优化和建议.
| 归档时间: |
|
| 查看次数: |
935 次 |
| 最近记录: |