再具体化再具体化(英語:Rematerialization)是一种编译器优化技术,首先由格里高利·柴廷(Gregory J. Chaitin)等人于1981年提出[1]并且被实现于PI.8编译器中。其通过重新计算某个值而不是从内存中加载该值的手段,来缩短程序运行时间。该技术可见于GCC等现代编译器中[2]。 使用这项技术通常见于寄存器配置领域之中,因为在遇到寄存器不足的场景时,一些变量会被转移至内存,形成溢出变量(spilled variable)。考虑到重新从内存加载某个溢出变量的延迟很长,过多的溢出变量会降低程序性能。 传统的编译器优化技术,比如公共子表达式消除以及循环不变代码外提,往往更加注重减少乃至消除多余的计算。一般而言,这些技术往往能够有效降低运行程序所需的处理器周期,但与此同时却也为程序添加了许多变量以及加长了变量的生命周期。在寄存器配置压力较大的场景下,这些副效果会导致大量溢出变量的产生,进而形成性能开销。编译器此时可以根据成本效益分析,决定是否执行再具体化。若该分析显示再具体化的开销小于加载数值的开销,编译器便会消除掉一些原有的优化,来降低寄存器配置方面的压力。 原理再具体化的工作原理运用了表达式可达性(expression availability)的概念,会跟踪用于计算每个变量的表达式。倘若用于计算某个值 得表达式 的某个变量在运行过程中被修改,该表达式 则被定义为是不可达的,而该值 也无法被再具体化。此外,还要考虑到被再具体化的表达式的最大复杂性,以避免出现程序重复计算的复杂算法,比加载花费更多时间之类的问题。[3] 参考
|
Index:
pl ar de en es fr it arz nl ja pt ceb sv uk vi war zh ru af ast az bg zh-min-nan bn be ca cs cy da et el eo eu fa gl ko hi hr id he ka la lv lt hu mk ms min no nn ce uz kk ro simple sk sl sr sh fi ta tt th tg azb tr ur zh-yue hy my ace als am an hyw ban bjn map-bms ba be-tarask bcl bpy bar bs br cv nv eml hif fo fy ga gd gu hak ha hsb io ig ilo ia ie os is jv kn ht ku ckb ky mrj lb lij li lmo mai mg ml zh-classical mr xmf mzn cdo mn nap new ne frr oc mhr or as pa pnb ps pms nds crh qu sa sah sco sq scn si sd szl su sw tl shn te bug vec vo wa wuu yi yo diq bat-smg zu lad kbd ang smn ab roa-rup frp arc gn av ay bh bi bo bxr cbk-zam co za dag ary se pdc dv dsb myv ext fur gv gag inh ki glk gan guw xal haw rw kbp pam csb kw km kv koi kg gom ks gcr lo lbe ltg lez nia ln jbo lg mt mi tw mwl mdf mnw nqo fj nah na nds-nl nrm nov om pi pag pap pfl pcd krc kaa ksh rm rue sm sat sc trv stq nso sn cu so srn kab roa-tara tet tpi to chr tum tk tyv udm ug vep fiu-vro vls wo xh zea ty ak bm ch ny ee ff got iu ik kl mad cr pih ami pwn pnt dz rmy rn sg st tn ss ti din chy ts kcg ve
Portal di Ensiklopedia Dunia