什么是冷/死域,什么是剥离优化

What is a cold/dead field and what is a peeling optimization?

本文关键字:什么 剥离 优化 死域      更新时间:2023-10-16

在论文c++/Java/Go/Scala中的循环识别(pdf)中,我们在 c++调优一节中发现了以下引用:

结构剥落。结构UnionFindNode有3个冷场:type_, loop_, header_。由于节点被分配在数组,这是一个很好的候选剥离优化。这三个字段可以被剥离成一个单独的数组。注意header_Field也是死的——但是移除它几乎没有什么性能的影响。BasicBlock结构中的name_字段也是死的,但是它很适合填充空间,所以它不会被删除。

有人能给我解释一下什么是冷场/死场,什么是剥离优化吗(我理解作者在那里做了什么,但背后的原理是什么)?

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

在文章中,作者决定将type_, loop_header_字段从更频繁访问的字段中移开。

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

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

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

这是我在这里发现的:

结构分裂

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

这里他们说:

结构脱皮转变是结构的一种特殊情况不需要引入指针的分割。

这里又是

另外,当一个变量失效时(当它的值不再被使用时)之后),分配给它的寄存器将被重用。