查看“︁再具体化”︁的源代码
←
再具体化
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
'''再具体化'''({{lang-en|Rematerialization}})是一种[[编译器]]优化技术,首先由格里高利·柴廷(Gregory J. Chaitin)等人于1981年提出<ref>{{cite journal |author1=Gregory J. Chaitin |author2=Marc A. Auslander |author3=Ashok K. Chandra |author4=John Cocke |author5=Martin E. Hopkins |author6=Peter W. Markstein |title=Register allocation via coloring |journal=Computer Languages |date=1981-01 |volume=6 |issue=1 |pages=47–57 |doi=10.1016/0096-0551(81)90048-5}}</ref>并且被实现于PI.8编译器中。其通过重新计算某个值而不是从[[内存]]中加载该值的手段,来缩短程序运行时间。该技术可见于[[GCC]]等现代编译器中<ref>{{cite journal |author1=Mukta Punjabi |title=Register Rematerialization in GCC |url=http://gcc.fyxm.net/summit/2004/Register%20Rematerialization.pdf |accessdate=2021-08-07 |journal= |archive-date=2005-04-28 |archive-url=https://web.archive.org/web/20050428005246/http://gcc.fyxm.net/summit/2004/Register%20Rematerialization.pdf |dead-url=unfit }}</ref>。 == 使用 == 这项技术通常见于[[寄存器配置]]领域之中,因为在遇到[[寄存器]]不足的场景时,一些变量会被转移至内存,形成溢出变量(spilled variable)。考虑到重新从内存加载某个溢出变量的[[延迟_(工程学)|延迟]]很长,过多的溢出变量会降低程序性能。 传统的编译器优化技术,比如[[公共子表达式消除]]以及[[循环不变代码外提]],往往更加注重减少乃至消除多余的计算。一般而言,这些技术往往能够有效降低运行程序所需的[[指令周期|处理器周期]],但与此同时却也为程序添加了许多[[变量]]以及加长了变量的生命周期。在寄存器配置压力较大的场景下,这些副效果会导致大量溢出变量的产生,进而形成性能开销。编译器此时可以根据[[成本效益分析]],决定是否执行再具体化。若该分析显示再具体化的开销小于加载数值的开销,编译器便会消除掉一些原有的优化,来降低寄存器配置方面的压力。 == 原理 == 再具体化的工作原理运用了[[定义可达性|表达式可达性]](expression availability)的概念,会跟踪用于计算每个变量的表达式。倘若用于计算某个值 <math>V</math> 得表达式 <math>E</math> 的某个变量在运行过程中被修改,该表达式 <math>E</math> 则被定义为是不可达的,而该值 <math>V</math> 也无法被再具体化。此外,还要考虑到被再具体化的表达式的最大复杂性,以避免出现程序重复计算的复杂算法,比加载花费更多时间之类的问题。<ref>{{cite journal |last1=Briggs |first1=Preston |last2=Cooper |first2=Keith D. |last3=Torczon |first3=Linda |title=Rematerialization |journal=Proceedings of the ACM SIGPLAN 1992 conference on Programming language design and implementation - PLDI '92 |date=1992 |pages=311–321 |doi=10.1145/143095.143143}}</ref> == 参考 == <references/> {{编译器优化}} [[Category:編譯器最佳化]]
该页面使用的模板:
Template:Cite journal
(
查看源代码
)
Template:Lang-en
(
查看源代码
)
Template:编译器优化
(
查看源代码
)
返回
再具体化
。
导航菜单
个人工具
登录
命名空间
页面
讨论
不转换
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
工具
链入页面
相关更改
页面信息