什么是冷/死域,什么是剥离优化
What is a cold/dead field and what is a peeling optimization?
在论文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
这些术语与编译器优化技术有关。
这是我在这里发现的:
结构分裂
结构分裂是将结构分成它们的组件。一旦完成,组件就可以分配给寄存器,以便更快地访问。这是一个特别的优势,当从函数返回一个结构,整个结构可以在寄存器中返回,而不是在堆栈中返回。
这里他们说:
结构脱皮转变是结构的一种特殊情况不需要引入指针的分割。
这里又是
另外,当一个变量失效时(当它的值不再被使用时)之后),分配给它的寄存器将被重用。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- 什么时候调用组成单元对象的析构函数
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 什么时候在C++中返回常量引用是个好主意
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- C++避免重复声明的语法是什么
- c++库的公共头文件中应该包含什么
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- ifstream什么都没读
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 我应该使用什么来代替void作为变体中的替代类型之一
- 什么是冷/死域,什么是剥离优化