??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久久国产精品,久久人人爽人人爽人人AV东京热 ,国产精品久久毛片完整版http://www.shnenglu.com/qinqing1984/category/21446.htmlzh-cnTue, 12 Dec 2023 10:36:22 GMTTue, 12 Dec 2023 10:36:22 GMT60谈体系l构与内联优?/title><link>http://www.shnenglu.com/qinqing1984/archive/2023/11/16/230184.html</link><dc:creator>春秋十二?/dc:creator><author>春秋十二?/author><pubDate>Thu, 16 Nov 2023 15:32:00 GMT</pubDate><guid>http://www.shnenglu.com/qinqing1984/archive/2023/11/16/230184.html</guid><wfw:comment>http://www.shnenglu.com/qinqing1984/comments/230184.html</wfw:comment><comments>http://www.shnenglu.com/qinqing1984/archive/2023/11/16/230184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/qinqing1984/comments/commentRss/230184.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/qinqing1984/services/trackbacks/230184.html</trackback:ping><description><![CDATA[周知内联是ؓ了消除函数调用的代h(hun)Q即四大指o序列Q调用前序列、被调者v始序列、被调者收ֺ列、返回后序列。它们通常对应Cpȝ构调用者保?恢复寄存器集合与被调者保?恢复寄存器集合之U束。这个本质也是内联的前提。试问如果有某体pȝ构比如SQ它L深度的函数调用代价几乎ؓӞ那么昄内联是没意义没必要的。但是S可能存在吗?我认Z太可能。因为机器的资源比如寄存器集数量与堆栈空间是有限的,且调用需要知晓上下文Q所以不能够支持L深度的调用,但是可以支持有限深度比如4层调用,q?层调用代价几乎ؓӞ假设再来一层,那么W?层调用代价就不ؓ零了Q这时如果内联第5层就变成4层调用,代h(hun)又几乎ؓ零。综上所qͼ内联无论在何U体pȝ构,即在一定深度内没意义也不会破坏性能?br /><br /> 体系l构直接影响E序性能。主要体现在指o集、寄存器、cache三块。它们对于编译器实现代码优化必须都考虑Q尤其cache比如内联优化、@环展开、基本块布局、函数重排,如果不是因ؓ有cacheq玩意,内联优化的复杂性会大ؓ降低Q因Z用考虑代码膨胀引v的副作用即cache~失Q只要评估函数的指oC动态执行消耗的关系Q指令数很少但执行耗费很多旉周期的,则不宜内联,其函数为非叶子l点Q指令数很多但执行耗费较少的,则可仅内联其中的快速\径代码。因现实存在cacheq玩意,必L衡代码膨胀带来的副作用Q是否能接受一定的膨胀Q需要精评伎ͼ构徏函数调用频率与其静态调用位|的矩阵Q计收益比如^均执行一ơ的耗时是否减少Q若收益为正且明昑ֈ可内联,否则不宜内联?br /><br />有些~译器ؓ了简单处理,不会内联带静态变量的函数哪怕指令数很少Q或者内联不太正比?span style="color: #ff00ff;">LLVM</span>Q详见下文)。其实单从技术上可以做到Q不q要复杂些,复杂在于链接器的协作。ؓ了保证函数静态变量的语义Q编译时要预留全局唯一标志与构造函数的占位W,在调用者体内插入对全局唯一标志的(位)判断Q标志字的一位对应一个静态变量,表明是否已构造或初始化赋|、构造函数调?初始化赋倹{置位标志,而链接时要确定全局唯一标志及构造函数的地址。静态变量、全局唯一标志放于可执行文件的数据区,全局唯一构?初始化及析构函数放于代码区,具体布局位置可以灉|Q比? data. static_objQ? text. obj. ctor/dtor。如果这U函数性能影响较大需要内联优化,而编译器不支持,有个替代的办法是用全局变量或文?cȝ别的静态变量,辅以对应标志处理一ơ性构造或初始化赋|必要时将q处理封装ؓ一个函C保目标函数被内联)Q可辑ֈ同样效果不之处是作用域扩大了?br /><br /><strong>关于LLVM对于带静态变量的函数之内联的验l果</strong><br /><img src="http://www.shnenglu.com/images/cppblog_com/qinqing1984/llvm-inline-test-all-c-codes.png" width="912" height="955" alt="" /><br /><br /><img src="http://www.shnenglu.com/images/cppblog_com/qinqing1984/llvm-inline-test-compile-out-disa.PNG" width="913" height="381" alt="" /><br /><br /><img src="http://www.shnenglu.com/images/cppblog_com/qinqing1984/llvm-inline-test-test_1_disa.PNG" width="880" height="267" alt="" /><br /><br /><img src="http://www.shnenglu.com/images/cppblog_com/qinqing1984/llvm-inline-test-test_2_disa.PNG" width="876" height="147" alt="" /><br /><br /><img src="http://www.shnenglu.com/images/cppblog_com/qinqing1984/llvm-inline-test-main_disa.PNG" width="770" height="101" alt="" /><br /><br /><img src="http://www.shnenglu.com/images/cppblog_com/qinqing1984/llvm-inline-test-test_1_ir.PNG" width="917" height="598" alt="" /><br /><br /><img src="http://www.shnenglu.com/images/cppblog_com/qinqing1984/llvm-inline-test-test_2_ir.png" width="918" height="599" alt="" /><img src ="http://www.shnenglu.com/qinqing1984/aggbug/230184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/qinqing1984/" target="_blank">春秋十二?/a> 2023-11-16 23:32 <a href="http://www.shnenglu.com/qinqing1984/archive/2023/11/16/230184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谈图论在寄存器分配中的应用http://www.shnenglu.com/qinqing1984/archive/2023/10/04/230129.html春秋十二?/dc:creator>春秋十二?/author>Wed, 04 Oct 2023 05:08:00 GMThttp://www.shnenglu.com/qinqing1984/archive/2023/10/04/230129.htmlhttp://www.shnenglu.com/qinqing1984/comments/230129.htmlhttp://www.shnenglu.com/qinqing1984/archive/2023/10/04/230129.html#Feedback0http://www.shnenglu.com/qinqing1984/comments/commentRss/230129.htmlhttp://www.shnenglu.com/qinqing1984/services/trackbacks/230129.html​1. 区间?/strong>Q用于局部寄存器分配Q基本块内的每个z跃范围看作一个区_最早定义位|?最C用位|)Q所有活跃范围构成区间图。区间图是一U不_的冲H图Q因为高Cz跃范围的范围而导致伪冲突Q比如认Z个复制操作连接的或两个源相同目标不同的复制操作生重叠的两个z跃范围冲突Q但实际没有冲突Q,优势在于着色是PQ复杂度O(|V|)或O(|E|)Q而非NP问题。llvm早期的线性扫描分配器是基于区间图在全局的扩展,比较适用于JIT~译Q减编译时_
​2. 一般图Q用于全局寄存器分配,是一U精的冲突图(׃l定义与一l用构成的|络Q。优势在于努力最化溢出z跃范围而生成高效执行的代码Q但会牺牲编译时间。llvm的greedy寄存器分配是Z一般图的代表。编译器使用的冲H图可能会将机器U束条g比如多寄存器?调用U定~码q去而存在重复边Q导致不满图论中的单图定义Q故q里采用一般图
​3. 弦图Q定义详?a target="_blank">https://oi-wiki.org/graph/chord。基于静态单赋值Ş式名建立的冲H图是u图。优势在于可以做到最佳着Ԍ复杂度O(|V|+|E|)Q而非启发式(Z一般图的全局寄存器分配用启发式Q,利于减少寄存器压力。劣势在于必d指派寄存器后的仍然ؓ静态单赋g码{换ؓ机器码,而这U{换可能增加寄存器压力Q以及插入一些可能非必要的复制操作,若复制操作实现的数据与ssa phi函数对应Q则分配器无法合q这U复Ӟq将破坏弦图的性质
​4. 冲突图拆?/strong>Q查扑օ中的团分割即q通子?/span>Q移除它划分得到不相交的一些子图,q样一来,各子囑֏独立着Ԍ有点cMz跃范围拆分Q而利于减寄存器压力Q另外实Cq能节省下三角布?yu)矩阵(用于快速判断两l点是否冲突Q的规模
​#############################
寄存器分配与图论的染色理论相兟뀂其它的比如帔R传播与格代数及不动点相关Q@环优化与多面体、矩늛兟뀂这三方面是我目前看到的~译器所用数学理?/div>

]]>忙表辑ּ数据分析示?/title><link>http://www.shnenglu.com/qinqing1984/archive/2023/09/30/230118.html</link><dc:creator>春秋十二?/dc:creator><author>春秋十二?/author><pubDate>Sat, 30 Sep 2023 00:47:00 GMT</pubDate><guid>http://www.shnenglu.com/qinqing1984/archive/2023/09/30/230118.html</guid><wfw:comment>http://www.shnenglu.com/qinqing1984/comments/230118.html</wfw:comment><comments>http://www.shnenglu.com/qinqing1984/archive/2023/09/30/230118.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/qinqing1984/comments/commentRss/230118.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/qinqing1984/services/trackbacks/230118.html</trackback:ping><description><![CDATA[<div style="text-align: left;"><img src="http://www.shnenglu.com/images/cppblog_com/qinqing1984/busy_expr_data_flow_analysis_1_1.png" width="994" height="1387" alt="" /></div> <br /><div style="text-align: left;"><img src="http://www.shnenglu.com/images/cppblog_com/qinqing1984/busy_expr_data_flow_analysis_2_2.png" width="994" height="1388" alt="" /></div><br /><div style="text-align: left;"><img src="http://www.shnenglu.com/images/cppblog_com/qinqing1984/busy_expr_data_flow_analysis_3_3.png" width="994" height="1411" alt="" /></div> <br /><div style="text-align: left;"><img src="http://www.shnenglu.com/images/cppblog_com/qinqing1984/busy_expr_data_flow_analysis_4.png" width="994" height="1446" alt="" /></div><img src ="http://www.shnenglu.com/qinqing1984/aggbug/230118.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/qinqing1984/" target="_blank">春秋十二?/a> 2023-09-30 08:47 <a href="http://www.shnenglu.com/qinqing1984/archive/2023/09/30/230118.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Z矩阵法分析改q指令调?/title><link>http://www.shnenglu.com/qinqing1984/archive/2023/09/23/230098.html</link><dc:creator>春秋十二?/dc:creator><author>春秋十二?/author><pubDate>Sat, 23 Sep 2023 04:14:00 GMT</pubDate><guid>http://www.shnenglu.com/qinqing1984/archive/2023/09/23/230098.html</guid><wfw:comment>http://www.shnenglu.com/qinqing1984/comments/230098.html</wfw:comment><comments>http://www.shnenglu.com/qinqing1984/archive/2023/09/23/230098.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/qinqing1984/comments/commentRss/230098.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/qinqing1984/services/trackbacks/230098.html</trackback:ping><description><![CDATA[<div><img src="http://www.shnenglu.com/images/cppblog_com/qinqing1984/bb-list-schedule-algorithm.png" width="644" height="406" alt="" /><br />   周知~译原理龙书阐述的基本块指o调度法Q它所使用的空的资源预U表RTD与每个指令的资源预约表RTQ可以看作二l矩阵,行表C时钟周期、列表示cpu资源Q其定位的元素?表示占用/预约Q?表示I闲/非预U。前者是随周期递增而动态扩大的矩阵Q后者是固定寸(l数)的矩阵(指op周期与每周期预约资源皆已知)。在调度Ӟ按带优先U比如关键\径的拓扑排序基本块内的指令,序选取一条指令InstQ计每前驱发射周期加gq的l果tmpQ取所有tmp的最大值tmax作ؓInst的发周期,再判断处理器资源是否可用Q即RTD和RT?strong>与运?/strong>Q得C个新矩阵RTNQ若RTN?span style="color: #ff00ff;">全零矩阵</span>则tmax为Inst的最l发周期,否则递增tmax再做矩阵与运,直至得到全零矩阵。最后更新RTDQ即RTD与RT?strong>或运?/strong>l果存于RTD。重复上q过E直到基本块末尾?/div> <div>lg​不难看出Q如果一个基本块很大比如?000条指令,q_每指令花2个周期,则RTD需?000个条目,若一条目即矩阉|行占?2字节Q?56U资源数Q,则总量U?4k。当然这对于C内存体量来说不算什么,但可以有更好的节省内存的做法QRTD寸其实可以相对固定Q其上限为基本块中耗费周期最多指令的周期的一个大?常数因子倍(为兼指令ƈ行性)Q这样一来就要增加当指o完成Ӟ当前指o发射周期大于前一条的l止周期时复位前一条指令的RTDQ从发射周期处复位RTD即作一个矩?strong>反运?/strong>的操作,其它步骤对应的矩阵与、矩阉|q算的操作保留不变。另׃RTD固定了尺寸,因此发射周期递增后要取模</div> <div>【备注】以上是我针对简单机器模型(每种资源数量仅一个,比如整数q算单元1个,内存讉K单元1个,点q算单元1个)用布?yu)矩阵作的优化。如果是复杂的超标量机器xU资源数有多个,那么只需修改如下Q布?yu)矩阉|成整数矩阵;新增一个机器资源可用L整数矩阵RDAQ单列资源数同|Q布?yu)矩阵与q算换成<strong>加法</strong>q与RDA<strong>比较</strong>Q若<strong>大于</strong>RDA则递增tmaxQ布?yu)矩阉|q算换成加法Q布?yu)矩阵反q算换成<strong>减法</strong>QRTD减RT存于RTD</div><img src ="http://www.shnenglu.com/qinqing1984/aggbug/230098.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/qinqing1984/" target="_blank">春秋十二?/a> 2023-09-23 12:14 <a href="http://www.shnenglu.com/qinqing1984/archive/2023/09/23/230098.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于E序~译中的图论问题思?/title><link>http://www.shnenglu.com/qinqing1984/archive/2023/09/07/230068.html</link><dc:creator>春秋十二?/dc:creator><author>春秋十二?/author><pubDate>Wed, 06 Sep 2023 22:50:00 GMT</pubDate><guid>http://www.shnenglu.com/qinqing1984/archive/2023/09/07/230068.html</guid><wfw:comment>http://www.shnenglu.com/qinqing1984/comments/230068.html</wfw:comment><comments>http://www.shnenglu.com/qinqing1984/archive/2023/09/07/230068.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/qinqing1984/comments/commentRss/230068.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/qinqing1984/services/trackbacks/230068.html</trackback:ping><description><![CDATA[<div>讄序片DS=if C then S1 else S2QS1和S2可以是由赋倹{条件、@环构成的复杂语句QS不ؓ当前E序最后语句或某个循环M最后语句,则S对应的流囄成的深度优先生成树T?条树边,有S1的出口数+S2出口?1条交叉边。ؓ什么是3条树边?C到S1、C到S2、S1或S2到S3QS3是S后l点Q下同)。ؓ什么交叉边数是S1出口?S2出口?1Q因为流图中S1出口及S2出口到S3的边Q在生成T的过E中Q只?个出口比S3先访问,q对应Ş?条树边,讉KS3后再讉K其它出口Q这对应形成其它出口到S3的交叉边Q注意这里没有前向边Q因晚访问的出口在T中不可能是S3的祖先。如果把S改ؓif C then S1Q情况会怎样Q结果取决于生成T的过E中先访问S3q是S1。若先访问S3Q则有树?条:C到S3、C到S1Q交叉边数等于S1的出口数QS1的每个出口到S3各一条边Q没有前向边。若先访问S2Q则有树?条:C到S2Q前向边1条:C到S3Q交叉边数等于S1出口?1?/div><div>ȝ此类问题分析的基本思\是对E序控制l构先构建流图,再构建深度优先生成树QL别其中的前向辏V交叉边、后退?/div><img src ="http://www.shnenglu.com/qinqing1984/aggbug/230068.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/qinqing1984/" target="_blank">春秋十二?/a> 2023-09-07 06:50 <a href="http://www.shnenglu.com/qinqing1984/archive/2023/09/07/230068.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>函数式语a~译优化http://www.shnenglu.com/qinqing1984/archive/2023/09/07/230067.html春秋十二?/dc:creator>春秋十二?/author>Wed, 06 Sep 2023 22:47:00 GMThttp://www.shnenglu.com/qinqing1984/archive/2023/09/07/230067.htmlhttp://www.shnenglu.com/qinqing1984/comments/230067.htmlhttp://www.shnenglu.com/qinqing1984/archive/2023/09/07/230067.html#Feedback0http://www.shnenglu.com/qinqing1984/comments/commentRss/230067.htmlhttp://www.shnenglu.com/qinqing1984/services/trackbacks/230067.html1.闭包记录分配Q若逃逸分析能识别哪些闭包记录在创建它们的函数中是出口不活跃的Q则q些闭包记录可分配在栈中(不再是堆中)
2.内联扩展Q由于小函数较多Q因此内联可以免去调用开销而提高性能Q对于递归函数Q需先用循环前置头{换再内联Q如果是N归函数Q可先用尾调用优化删除递归。如果一个函数的所有调用都被内联扩展,q且该函数没有作为参C递或其它方式被引用,那么可以删除q个函数本n卛_数定义。内联扩展可以l作用于扩展后的函数体,只要存在函数调用Q这也叫层叠式内?/div>
3.循环不变量参数外?/strong>Q递归函数l过循环前置头{换后Q若每次递归调用头函敎ͼ传入的某些参数值M变,则可以将它们从函数参C删除Q函C中的每次使用出现用序曲函数对应的参数名替?/div>
4.解开嵌套的letQ将嵌套的多层let中的代码合ƈZ个let中的代码Qin中的代码不变
5.避免代码膨胀Q由于内联复制函CQ通常使程序体U变大,且层叠式内联可无限扩展下去,因此为避免代码膨胀Q有如下启发式策略对内联q行控制
  a) 只内联执行很频繁的函数调用,可根据静态估计比如@环嵌套深度、P代次敎ͼ或根据执行剖面分析反馈,计算函数的执行频?/div>
  b) 内联很小的函敎ͼ其函C不会比直接调用多多指?/div>
  c) 内联只调用一ơ的函数Q然后删除原来的函数定义


]]>动态二q制优化与静态编译优化的区别http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230064.html春秋十二?/dc:creator>春秋十二?/author>Wed, 06 Sep 2023 15:44:00 GMThttp://www.shnenglu.com/qinqing1984/archive/2023/09/06/230064.htmlhttp://www.shnenglu.com/qinqing1984/comments/230064.htmlhttp://www.shnenglu.com/qinqing1984/archive/2023/09/06/230064.html#Feedback0http://www.shnenglu.com/qinqing1984/comments/commentRss/230064.htmlhttp://www.shnenglu.com/qinqing1984/services/trackbacks/230064.html1. 输入Q前者是二进制可执行E序Q后者是高语言源程?/div>
2. 优化对象Q前者主要是直线型代码区域比如踪qҎ(gu)块Q热点\径代码)Q超块类似后者中的扩展块Q后者是控制图Q即所有代码块Q不限于热点路径代码。超块构造类似后者中的基本块攄和过E放|?/div>
3. 优化Ҏ(gu)Q前者要q行旉集剖析数据比如结点剖析和边剖析,再基于剖析数据Ş成有利于指ocache局部性的块Q然后在块上作帔R传播、常量折叠、强度削弱、复写传播、死代码消除、公p辑ּ消除{基本优化,也会作指令重排,但考虑到陷阱处理要恢复_的客戯E状态,因此比较受限Q没有后者中的指令重排自由。后者如果基于剖析作优化Q那么效果和前者差不多
4. 寄存器分?/strong>Q都是基于活跃范围的冲突囄色算法,但前者考虑到陷阱处理会廉相关寄存器的z跃范围Q而后者不?/div>
————————————————————————
ȝQ二q制优化所用的技术和~译优化其实相同Q不同的是ؓ陷阱处理所作的改变调整Q以及运用在热点代码块而非所有块


]]>NFA、DFA、正则表辑ּ的互转复杂度ȝhttp://www.shnenglu.com/qinqing1984/archive/2023/09/06/230063.html春秋十二?/dc:creator>春秋十二?/author>Wed, 06 Sep 2023 15:42:00 GMThttp://www.shnenglu.com/qinqing1984/archive/2023/09/06/230063.htmlhttp://www.shnenglu.com/qinqing1984/comments/230063.htmlhttp://www.shnenglu.com/qinqing1984/archive/2023/09/06/230063.html#Feedback0http://www.shnenglu.com/qinqing1984/comments/commentRss/230063.htmlhttp://www.shnenglu.com/qinqing1984/services/trackbacks/230063.html1. NFA到DFAQ设NFA的状态数为nQ根据子集构造法Q则臛_?^n个状态{U,Ҏ(gu)个状态{U,其状态分量至多有n个状态,每个状态计它的可辄态集合耗时为O(n^2)Q另可达状态集合的q耗时为O(n^2)Q故一个{U耗时为n*O(n^2)=O(n^3)Q则所有{UL耗时为O(n^3*2^n)。由于实际生的状态数q小?^nQ通常为nQ,因此耗时为O(n^3*s)Qs为DFA实际h的状态数
2. DFA到NFAQ{化方法是修改转移表,Ҏ(gu)个状态{Uȝ目标状态加上集合括P因NFA对特定输入可能有多个目标状态,故ؓ集合Q,若{?#163;-DFAQ则q需Ҏ(gu)个状态增加对£的{UMؓI集。该Ҏ(gu)耗时为O(n)Qn为DFA的状态数

3. DFA到正则表辑ּQ设DFA状态数为nQ根据递推公式R(i,j,k)=R(i,j,k-1)+R(i,k,k-1)R(k,k,k-1)^*R(k,j,k-1)Q?<=i<=j<=nQ?<=k<=nQ来逐步构造表辑ּQ最l的表达式就是所有R(1,j,n)的ƈQ其中j为可接受状态。该q程会生dn^3+n^2个表辑ּQ每ơk递增D表达式长度增?倍,故总耗时为O(n^3*4^n)。另一U更快的Ҏ(gu)是消除所有除初始和接受状态外的中间状态,每次消除一个,合q其前驱l过它到其后l的正则表达式和前驱直接到后l的正则表达式,因前驱或后臛_n-2个,则共?n-2)^2个前驱到后的直通边Q且中间状态至多n-2个,故耗时为O(n^3)Q最后合q各接受状态的正则表达式,因接受状态至多n-1个,故耗时为O(n)。故总耗时为O(n^3)
4. 正则表达式到£-NFAQ作词法分析Q对每个l结W号构徏状态结点及转移边,卛_£-NFAQ特定符号对应用q、连接、闭包、结合之一联合已构建的?#163;-NFAQ耗时为O(n)Qn为正则表辑ּ的长?/div>

]]>关于格的基本定理要ȝhttp://www.shnenglu.com/qinqing1984/archive/2023/09/06/230062.html春秋十二?/dc:creator>春秋十二?/author>Wed, 06 Sep 2023 15:39:00 GMThttp://www.shnenglu.com/qinqing1984/archive/2023/09/06/230062.htmlhttp://www.shnenglu.com/qinqing1984/comments/230062.htmlhttp://www.shnenglu.com/qinqing1984/archive/2023/09/06/230062.html#Feedback0http://www.shnenglu.com/qinqing1984/comments/commentRss/230062.htmlhttp://www.shnenglu.com/qinqing1984/services/trackbacks/230062.html1. 三条定律Q交换律、结合律、吸收律Q对于半格是q等律)Q吸收律包含了幂{律
2. 上下?/strong>Q交半格每对元素都有唯一最大下界,q半格每对元素都有唯一最上界,格每对元素都有唯一最大下界和唯一最上?/div>
3. 格定义一个偏?/strong>Q偏序有三个性质Q自反性、反对称性、传递?/div>
4. g偏序的关p?/strong>Q每个格对应一个偏序,但不是所有偏序都对应一个格Q要满每对元素都有唯一最上界和Q或Q对于半|唯一最大下界。如果集合中的Q何一个子集(包括I集Q均存在最上界和最大下界,那么对应一个完备格

5. M元素有限的格都是完备|g的交q算和ƈq算对于其定义的偏序来说是单调的
6. 格的乘积、和、提升、映仍然是|利用q个性质Q可以在已有格的基础上增量地构造描q能力更丰富的格Q这U技术称域精化,是提高程序静态分析精度的重要指导思想之一


]]>谈重命?/title><link>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230061.html</link><dc:creator>春秋十二?/dc:creator><author>春秋十二?/author><pubDate>Wed, 06 Sep 2023 15:35:00 GMT</pubDate><guid>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230061.html</guid><wfw:comment>http://www.shnenglu.com/qinqing1984/comments/230061.html</wfw:comment><comments>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230061.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/qinqing1984/comments/commentRss/230061.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/qinqing1984/services/trackbacks/230061.html</trackback:ping><description><![CDATA[<div>周知cpu为方便ؕ序执行,内部会用重命名寄存器技术消除数据依赖(war和wawQ。编译器在如下场景也会用到重命名</div><br /> <div><strong>​1. 静态单赋?/strong>。过E内的每个变量唯一定义一ơ,原有相同的则会重命名Q包括phil点的定?/div> <div><strong>​2. bb表调?/strong>。ؓ消除反相关依赖即warQ可以重命名L作用或写操作定义的|q样能调度生L钟周期更的指o序列Q但可能增加寄存器压力导致溢新增了长gq操作(内存加蝲/存储Qƈq另一轮调?/div> <div><strong>​3. ebb表调?/strong>。对于某一ebb的一条\径pQp存在q早退\径peQp和pe的公共前~是基本块bQ当调度pӞ如果某个操作i向后Ud到bQ且i定义的值杀Mpe上的同名|那么需要重命名i的定倹{若i的定D重命名,且其在p的出口处是活跃的Q则调度器需要在出口处复制回原来的名?/div> <div><strong>​4. trace表调?/strong>。踪q不同于ebb路径Q它允许中间存在多个前驱卛_口的基本块,而后者不能。当调度存在多入口的块b的某t迹tӞt上的某操作i可能前向Ud跨越bQt外的代码路径需作补偿)Q若i杀M一个活跃范围跨b的|则需要重命名i的定|同理Q若i向后Ud跨越b且杀Mt上的某|则需重命名i的定|q时t外的代码路径补偿可以使用同一名字</div><img src ="http://www.shnenglu.com/qinqing1984/aggbug/230061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/qinqing1984/" target="_blank">春秋十二?/a> 2023-09-06 23:35 <a href="http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不可达代码与M码的区别及删?/title><link>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230060.html</link><dc:creator>春秋十二?/dc:creator><author>春秋十二?/author><pubDate>Wed, 06 Sep 2023 15:33:00 GMT</pubDate><guid>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230060.html</guid><wfw:comment>http://www.shnenglu.com/qinqing1984/comments/230060.html</wfw:comment><comments>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230060.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/qinqing1984/comments/commentRss/230060.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/qinqing1984/services/trackbacks/230060.html</trackback:ping><description><![CDATA[<div>1. 不可达代码是指无入什么都不会执行的代码,对过E而言Q即是从入口基本块到不了Q没有\径可达)的那些基本块Q死代码是指可达但计了后面M可执行\径都不会使用其计结果的代码Q比如死变量和死指o</div><br /> <div>2. 不可达代码的识别本质是有向图的可达性判定与传递闭包计问题,一般用DFS法处理。先扑ֈ从入口基本块不可辄基本块,再删除(同时改变其前驱和后基本块的指向Q,直到找不Cؓ止。死代码的识别可用活跃分析或必要指o标记法,对于z跃分析Q删除基本块出口不活跃的变量定|以及它所使用不活跃操作数的定|对于标记法,从必要指令出发,Ҏ(gu)def-use铑֒use-def链,不断标记对其操作数有贡献的指令,最后删除没被标记的那些指o</div><br /> <div>3. 不可达代码和M码可能来源于E序员,更可能源于编译器的其它一些优化生,删除优化它们能显著减代码体U,Ҏ(gu)行速度有间接的影响Q因为可能改善指令高速缓层的利用?/div><img src ="http://www.shnenglu.com/qinqing1984/aggbug/230060.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/qinqing1984/" target="_blank">春秋十二?/a> 2023-09-06 23:33 <a href="http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230060.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>循环不变代码外提http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230059.html春秋十二?/dc:creator>春秋十二?/author>Wed, 06 Sep 2023 15:30:00 GMThttp://www.shnenglu.com/qinqing1984/archive/2023/09/06/230059.htmlhttp://www.shnenglu.com/qinqing1984/comments/230059.htmlhttp://www.shnenglu.com/qinqing1984/archive/2023/09/06/230059.html#Feedback0http://www.shnenglu.com/qinqing1984/comments/commentRss/230059.htmlhttp://www.shnenglu.com/qinqing1984/services/trackbacks/230059.html1. 目的是识别@环中那种在每个P代都产生相同值的计算Qƈ它们移到@环之外。注意,如果一个计出现在嵌套循环内,对外循环的特定P代而言Q内循环的每个P代都产生相同的|但外循环的不同P代生不同的|那么q种计算移到内循环外,而非外@环外

2. 识别循环不变量可以基于数据流分析求得的use-def链,一条指令是循环不变的,当它的每个操作数满以下条g之一
aQ该操作数是常数
bQ该操作数的所有到辑֮值在循环之外。因有一个在循环内,则该指o可能是循环变化的,除非那个定值是循环不变?/div>
cQ该操作数只存在一个ؓ循环不变量的到达定|且该指o之前没有对其左部变量Q若有)的用。因有多个这L定|则该指o可能是循环变化的,除非多个定值结果都一P因ؓ若前面有对其左部变量的用,则该指o的赋值就杀M左部变量的初|q样外提后左部变量第一ơP代就会用错误的定?/div>
3. ׃以上条g没考虑到控制流分析Q不能保证@环不变量在每个P代中执行Q以及@环不变量之左部变量的所有用都是相同的倹{因此ؓ了保证外提后的代码行为正,q需要满xӞ循环不变量所在基本块必须是@环中所有用了其左部变量的基本块和所有出口基本块的必l结炏V当外提循环不变量后Q考虑到@环有可能执行0ơ即一开始就不满_@环进入条Ӟ可以用是否进入@环的试条g来保护前|块Q即识别l止条g是否一开始就为falseQ来保护它。这U方法L安全的,但增加了代码体积。不q若l止条g恒ؓtrue或falseQ则常数传播分析会删除这个冗余测试,如果为falseQ那么还会删除前|块


]]>q程内优?/title><link>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230058.html</link><dc:creator>春秋十二?/dc:creator><author>春秋十二?/author><pubDate>Wed, 06 Sep 2023 15:23:00 GMT</pubDate><guid>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230058.html</guid><wfw:comment>http://www.shnenglu.com/qinqing1984/comments/230058.html</wfw:comment><comments>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230058.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/qinqing1984/comments/commentRss/230058.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/qinqing1984/services/trackbacks/230058.html</trackback:ping><description><![CDATA[<div><strong style="font-size: 11pt;">叶调用优化与收羃包装</strong></div> <div>1. 叶调用优化适用于被调者是不调用Q何过E的q程之场景,q种q程叫叶q程</div> <div>2. 有几U可能的优化</div> <div>aQ如果过E的实现使用display数组来寻址非局部变量,那么叶过E可避免在v始代码序列中更新display数组</div> <div>bQ如果叶q程内不使用p调者保存的寄存器(寄存器分配器应设法优先用由调用者保存的寄存器)Q那么可避免起始代码序列中保存代码和收尾代码序列中恢复代码。很的叶过E很可能不用到被调者保存的寄存器,只用部分调用者保存的寄存器的叶过E,那么调用者也可以避免一部分寄存器保存与恢复代码</div> <div>cQ如果调用者有很多ơ调用叶q程Q而且两者代码同时可见,那么叶过E不必自己分配栈帧,p用者一ơ性分配好</div> <div>3. 收羃包装是叶调用优化的一U推q,目的是尽可能Lq程起始代码序列和收代码序列中实际没用的寄存器保存恢复代码。可以先用数据流分析来计每个基本块的保存寄存器集合Q基本块入口可预见但其前׃可预见且入口不可辄那些寄存器)与恢复寄存器集合Q基本块出口可达但其后不可达且出口不可预见的那些寄存器Q,再在保存寄存器集合非I的基本块入口处插入save指oQ插入点已是最早的合适的位置Q,恢复寄存器集合非I的基本块出口处插入restore指oQ插入点已是最晚的合适的位置Q?/div> <div></div> <br /> <div><strong style="font-size: 11pt;">调用优化与N归删除</strong></div> <div>1. 调用优化的条g是两个(不同Q过E编译时同时可见Q比如处于同一~译单元Q或调用者有_多的、得优化可能发生的关于被调用者的信息</div> <div>2. 调用优化的实现Q因调者返回后代码序列到调用者收代码序列之间不存在有用计算Q所以原来标准链接处理要保存的那些寄存器不可能活跃,首先要裁剪调用前代码序列即不保存p用者保存的寄存器和不压栈返回地址Q以及裁剪被调过E的起始代码序列即不保存p调者保存的寄存器和不分配新栈Q借用调用者的栈Q若被调者的栈比调用者的大,则需按两者之差扩展栈帧)Q然后{Ud被调者裁剪过的v始代码序列,最后修改被调过E的收尾代码序列Q正释放栈帧,比如用指针赋给栈指针,使之直接q回到调用者的调用者(比如o调用pQp调用qQq是尾调用Q那么优化后q实际q回到oQ。综上可得,调用优化减免了压栈q回地址与保存寄存器的开销</div> <div>3. N归删除是尾调用优化的一U特例,׃调用者和被调者是同一q程Q因此不存在扩展栈和额外释放栈帧,只须改变参数及蟩转到q程入口处即?/div> <div></div><img src ="http://www.shnenglu.com/qinqing1984/aggbug/230058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/qinqing1984/" target="_blank">春秋十二?/a> 2023-09-06 23:23 <a href="http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据分析之q代法和区域分析算?/title><link>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230057.html</link><dc:creator>春秋十二?/dc:creator><author>春秋十二?/author><pubDate>Wed, 06 Sep 2023 15:18:00 GMT</pubDate><guid>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230057.html</guid><wfw:comment>http://www.shnenglu.com/qinqing1984/comments/230057.html</wfw:comment><comments>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230057.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/qinqing1984/comments/commentRss/230057.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/qinqing1984/services/trackbacks/230057.html</trackback:ping><description><![CDATA[<div><strong>1. 数学基础</strong>Q两者的共同Ҏ(gu)都基于数据流值的半格和对l合q算闭的传递函敎ͼ不同Ҏ(gu)区域分析法q要求传递函数是一个半|不仅支持l合q算Q而且支持交汇q算和闭包运,交汇q算用于把有相同后的不同执行\径组合v来,闭包q算用于环上Q比如@环)执行零到多次的效?/div><br /> <div><strong>2. 程</strong>QP代算法由初始化和循环求不动解l成Q以前向数据ؓ例,其中初始化包括初始化入口基本块的out集合为合适|其它基本块的out集合为半格的元素;循环求不动解遍历除入口外Q因为入口的out不会变)的每个基本块Q计其out集合Q直x有基本块的out不再改变。区域分析算法由计算层次区域序列、构造区域传递函数和计算各区域入口值组成,计算层次区域序列自底向上Q基本块为叶子区域,自然循环分ؓ循环体区域和循环区域Q都是内部区域,不是自然循环的整个流图ؓ根区域;区域传递函数有2个,一是R区域入口到其直接子区域S的入口的数据g递,CFin(R,S)Q另一是R区域入口到其直接子区域出口基本块BQ可能有多个Q出口处的数据流g递,CFout(R,B)Q区域传递函数的计算自底向上Q对于叶子区域,Fin是恒{函敎ͼFout和P代算法的传递函CP取决于具体数据流问题Q对于更大的区域Q非叶子区域Q,遍历每个子区域,Fin由所有Fout(R,B)交汇而成QB为S在R中的前驱Q若R为@环区域,则再求Fout的闭包,遍历S的每个出口基本块BQFout由Fout(S,B)和Fin(R,S)l合而成。计各区域入口D向下,根区域的In值等于流囑օ口的In|其它区域S的In值等于Fin(R,S)QR为父区域Q所有Fin在前一环节已构造好</div><br /> <div><strong>3.</strong> <strong>l果</strong>Q对同一数据问题比如到辑֮|两种法求得的数据流值是一L。ؓ什么区域分析算法是正确的?因ؓ它实际是按照E序控制来构造传递函数的Q包含了所有可能执行\径数据流g递的效果Q这相当于P代算法求不动解的q程Q所以最后只要一个流囄入口|p出各区域的入口倹{ؓ什么P代算法是收敛的?因ؓ半格是单调的且高度有I收敛速度取决于遍历基本块的顺序,如果按基本块深度优先排序Q逆后序)遍历Q那么P代轮C过图的深度(各条无环路径后退边的最大数Q加2</div><br /> <div><strong>4. 区别</strong>QP代算法用于可归约图和不可归U流图,区域分析法仅能用于可归U流?/div><img src ="http://www.shnenglu.com/qinqing1984/aggbug/230057.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/qinqing1984/" target="_blank">春秋十二?/a> 2023-09-06 23:18 <a href="http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230057.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>~存优化之过E内代码|放http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230056.html春秋十二?/dc:creator>春秋十二?/author>Wed, 06 Sep 2023 15:15:00 GMThttp://www.shnenglu.com/qinqing1984/archive/2023/09/06/230056.htmlhttp://www.shnenglu.com/qinqing1984/comments/230056.htmlhttp://www.shnenglu.com/qinqing1984/archive/2023/09/06/230056.html#Feedback0http://www.shnenglu.com/qinqing1984/comments/commentRss/230056.htmlhttp://www.shnenglu.com/qinqing1984/services/trackbacks/230056.html1. 作ؓ指o高速缓层优化的一U重要技术,它根据CFG图边的执行频率频J执行的基本块排列在一Pq布局那些基本块在下降分支路径Q而不在一L也就是很执行的基本块布局在{Ud支\径。这样做一来可以取到I-cache中的指o实际被执行的比例较高Q二来对于某些体pȝ构上转移和下降\径gq不{的分支指oQ可以降低蟩转gq?/div>
2. 实现q程内代码置放有以下几个环节Q?/div>
aQ获取剖析数据:~译器可以先在基本块出口处插入代码以l计到其后基本块的执行ơ数Q作为CFG图边的权重Q然后编译生成可执行文gQ输入代表性数据运行它Q结果输Z个数据文Ӟ用于W二ơ编译,q次~译实施q程内代码置放优?/div>
bQ以铄形式构徏热\径:热\径是CFG路径的一个集合,其中包括频繁执行的那些边Q每条\径是一个或多个基本块按边的方向构成的链Q每个链兌一个优先Q用于布局代码的先后顺序。初始时Q每个基本块构成一个只有它本n的链Q其优先UؓCFG图边的数量或者更大|接下来,在CFG中按权重降序遍历每条?lt;x,y>Qx不等于yQ,若x是某个链a的尾l点且y是某链b的头l点Q则把b合ƈ到a后面Q更新a的优先为a原来优先U、b优先U、P三者的最|同时递增PQ其中P为链合ƈ操作的计数器Q用于决定链的相Ҏ(gu)序由低到高排列,初gؓ0。当遍历l束Ӟ所有热路径构徏完成
cQ进行代码布局Q经q前一环节Q就得到了链的集合。首先从N合找出含有入口基本块的链tQ将t加入工作表WLQ然后从WLUd一个优先最低的链cQ按序(构徏链时加入基本块的序Q遍历c的每个基本块xQ把x攑֜q程可执行代码体的末端,对于?lt;x,y>Q将包含y的链t加入WLQ若t不在WL中)Q重复该q程直至WL为空


]]>前期优化之全局复写传播http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230055.html春秋十二?/dc:creator>春秋十二?/author>Wed, 06 Sep 2023 15:13:00 GMThttp://www.shnenglu.com/qinqing1984/archive/2023/09/06/230055.htmlhttp://www.shnenglu.com/qinqing1984/comments/230055.htmlhttp://www.shnenglu.com/qinqing1984/archive/2023/09/06/230055.html#Feedback0http://www.shnenglu.com/qinqing1984/comments/commentRss/230055.htmlhttp://www.shnenglu.com/qinqing1984/services/trackbacks/230055.html【输入输出?/strong>
一个过E的所有基本块Q除entry和exit外的每个基本块包含指令序?/div>
【流E?/strong>
由前向数据流分析、局部复写传播和遍历基本块构?/div>
1. 前向数据分析:目标是计出每个基本块入口处有效的复写赋值集合,q里定义为CPin(i)Qi为基本块Q其元素C复写赋值的四元l?lt;u,v,blk,pos>Qu为左变量Qv为右变量Qblk为基本块Qpos为在blk中的位置。另外定义COPY(i)为基本块i中出C到达了出口的那些复写赋值集合,即u和v在i中pos后没被赋|KILL(i)基本块i杀ȝ那些赋值集合,即i中存在对其它基本块复写赋值右变量的赋|CPout(i)为基本块i出口处有效的复写赋值集合。以上四U集合的数据方EؓQCPin(i){于i的每个前驱p的CPout的交集,CPout(i){于COPY(i)与CPin(i)减去KILL(i)之差的ƈ集。CPout(entry)初gؓI集Q其它基本块的CPout初gؓ全集UQUE所有复写赋值的集合x有基本块的COPY之ƈ集,Ҏ(gu)q代求不动点法可出每个基本块最l的CPin?/div>
2. 局部复写传播:作ؓ被全局复写传播调用的例E,有两个参敎ͼ一个ؓ输入输出参数单个基本块,另一个ؓ输入参数CPinQ即前向数据分析求得的l果。该例程内部l护一个有效复写赋值的表,UCACPQ其元素Z元组<u,v>Qu是复写赋值的左变量,v是右变量。首先初始化ACP卛_CPin中的复写赋值加入到ACPQ再遍历基本块的每条指oQ针Ҏ(gu)令类别做对应的处理,有以下几U情?/div>
aQ对于一?二元表达式及q程调用Q将表达式的操作数或调用参数替换为ACP中对应元l的W二分量Q若不存在这L元组则不用替?/div>
bQ对于赋D句(包括复写赋|Q从ACP中删除第一或第二分量ؓ赋D句左变量的元l,q是Z删除被杀ȝ复写赋?/div>
cQ对于复写赋g左变量u不等于右变量vQ将元组<u,v>加入到ACP
当遍历结束后Q局部复写传播就完成?/div>
3. 遍历基本块:Ҏ(gu)个基本块调用局部复写传播,当遍历结束后Q全局复写传播完成了

【分析?/strong>
数据分析的复杂度取决于基本块L及指令LQ局部复写传播的复杂度取决于基本块的指oLQ遍历基本块复杂度取决于基本块数量。全局复写传播会造成无用的赋值指令,但是q正l死代码删除和强度削减(比如两个相同的整型变量加法用UM代替Q提供了Z


]]>ZSSA的稀有条件常C?/title><link>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230054.html</link><dc:creator>春秋十二?/dc:creator><author>春秋十二?/author><pubDate>Wed, 06 Sep 2023 15:10:00 GMT</pubDate><guid>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230054.html</guid><wfw:comment>http://www.shnenglu.com/qinqing1984/comments/230054.html</wfw:comment><comments>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230054.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/qinqing1984/comments/commentRss/230054.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/qinqing1984/services/trackbacks/230054.html</trackback:ping><description><![CDATA[<div><strong>【输入?/strong></div> <div>ssa控制图。结点ؓ一个phi函数或一条运指令,边包含控制流边和ssa?/div><br /> <div><strong>【输出?/strong></div> <div>所有ssa变量的最lLatCellQ常量半格|</div><br /> <div><strong>【流E?/strong></div> <div>1. 法l护两个工作表,一是流图边FlowWLQ用于跟t控制流的执行,二是ssa边SSAWLQ用于单赋值变量的传播。还有一个ExecFlag映射Q用于确保仅有控制流边导向的q算l点最多执行一ơ,多次执行是没必要的,因ؓq算涉及的分量不会变Q没有ssa前驱边)QExecFlag(a,b)为true表示边a->b导向的结点b已执行,否则未执?/div> <div>2. 两种l点的分析:</div> <div>a) 对于phil点Q不被哪种边导向,都先计算其LatCellQphil果与各个phi参数的交Q,若与旧g同,则将它的ssa后边加入SSAWLQ若控制后l边未执行卛_应ExecFlag为falseQ则它的控制流后边加入FlowWL</div> <div>b) 对于q算l点Q若是控制流边导向且未被执行q(到结点的所有边的ExecFlag为falseQ或ssa边导向且以前执行q(存在臛_一条边的ExecFlag为trueQ,则执行其q算Q计左值变量的LatCellQ解释执行整数运)Q若与旧g同,则将ssa后边加入SSAWLQ若LatCell是常量且为条件运,则将满条g的Y或N边加入FlowWLQ否则将所有控制流后边加入FlowWL</div> <div>3. 法初始Ӟ讄所有控制流边的ExecFlag为falseQ设|所有ssa变量的LatCell为未知(半格元素)Q将图入口到第1个结点的边加入FlowWL。然后进行主循环Q先从FlowWLUd一条边Q若边的ExecFlag为false则设为trueQ判断尾l点cdQ若为phi则{Cq?-a处理Q若则转到2-b处理Q再从SSAWLUd一条边Q若边尾l点为phicd则{?-a处理Q否则ؓq算cd转到2-b处理Q以上过E直至FlowWL和SSAWL皆ؓI?/div><br /> <div><strong>【分析?/strong></div> <div>该算法思想是符h行,对于q算x=y或x=y+zQ这?泛指Ҏ(gu)型有意义的操作)Q在帔R半格中,x、y、z初gؓ未知Qy和z单调降低Q导致x也单调降低,它们最多降?ơ,故当格g变后QSSAWLlؓI,另外׃ExecFlag的作用导致所有仅控制边导向的结Ҏ(gu)多执行一ơ,因此FlowWLlؓI,法是收敛的Q复杂度取决于控制流边和ssa边的L</div><img src ="http://www.shnenglu.com/qinqing1984/aggbug/230054.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/qinqing1984/" target="_blank">春秋十二?/a> 2023-09-06 23:10 <a href="http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230054.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>E序控制依赖囄构徏http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230053.html春秋十二?/dc:creator>春秋十二?/author>Wed, 06 Sep 2023 15:07:00 GMThttp://www.shnenglu.com/qinqing1984/archive/2023/09/06/230053.htmlhttp://www.shnenglu.com/qinqing1984/comments/230053.htmlhttp://www.shnenglu.com/qinqing1984/archive/2023/09/06/230053.html#Feedback0http://www.shnenglu.com/qinqing1984/comments/commentRss/230053.htmlhttp://www.shnenglu.com/qinqing1984/services/trackbacks/230053.html【输入?/strong>
E序控制图CFG

【输出?/strong>
带区域结点的控制依赖图CDG

【流E?/strong>
1. 为CFGd一个虚构谓词结点startQ它的YҎ(gu)向入口结点entryQ出Ҏ(gu)向出口结点exitQ得到CFG+。添加start是因为entry到第1个基本块没有条g判断
2. 为CFG+构徏后必l结Ҏ(gu)PDOMTreeQ将CFG+中所有n不是m的后必经l点的边m->n加入集合SQ边的标h自CFG为Y或N
3. 遍历SQ对每条边m->nQ先在PDOMTree中找到最低公q先pQ如果m为根l点则ؓmQ否则ؓm的父l点Q,再将PDOMTree中p到n路径上每个结点(p和entry除外Qx加入CDGQƈd边m->xQ其Ҏ(gu)号同m->n
4. 对CDG的每个内部结点,若存在Y边,则新Z个区域结点,q接所有Y边对应的子结点;若存在Nl点Q则新徏一个区域结点,q接所有N边对应的子结?/div>
【应用?/strong>
对于控制依赖于同一l点的所有结点,只要它们之间没有数据依赖关系Q就可以q行执行


]]>q程间分析之调用图构建算?/title><link>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230052.html</link><dc:creator>春秋十二?/dc:creator><author>春秋十二?/author><pubDate>Wed, 06 Sep 2023 15:04:00 GMT</pubDate><guid>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230052.html</guid><wfw:comment>http://www.shnenglu.com/qinqing1984/comments/230052.html</wfw:comment><comments>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230052.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/qinqing1984/comments/commentRss/230052.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/qinqing1984/services/trackbacks/230052.html</trackback:ping><description><![CDATA[<div><strong>【输入?/strong></div> <div>根过E,及每个过E(含根q程Q的指o序列</div><br /> <div><strong>【输出?/strong></div> <div>调用图,pE点集和调用边(形如<p,i,q>Qp在位|i调用qQ集构成</div><br /> <div><strong>【全局l构?/strong></div> <div>PVVsQ过E值变量集?/div> <div>PVValsQ过E值变量到q程常数集合的映?/div> <div>PVBindsQ过E值变量到q程值变量集合的映射</div> <div>PVCallsQ调用边的集?/div><br /> <div><strong>【流E核心?/strong></div> <div>1. 分析q程p内指令,要处理调用指令和赋值指令两U类型。对于调用指令,若被调过Eq是过E常敎ͼ则将q?lt;p,i,q>加入调用图,先解析q的过E值Ş参与传入实参的关p,?U情?/div> <div>aQ过E常数cp传入q程值Ş参fpQ将偶对<fp,cp>加入PVValsQfp加入PVVs</div> <div>bQ过E值变量vp传入q程值Ş参fpQ将<fp,vp>加入PVBindsQfp和vp加入PVVs</div> <div>cQ过E值Ş参fp传出q程值变量vpQ将<vp,fp>加入PVBindsQvp和fp加入PVVs</div> <div>dQ过E值Ş参fp传出q程常数cpQ将<fp,cp>加入PVValsQfp加入PVVs</div> <div>若q不是常数而是q程值变量,则将q加入PVVsQ?lt;p,i,q>加入PVCalls。再解析q的返回与p的关p,?U情?/div> <div>eQ返回一个过E值变量vp1赋给另一q程值变量vp2Q将<vp2,vp1>加入PVBindsQvp2和vp1加入PVVs</div> <div>fQ返回一个过E常数cp赋给一个过E值变量vpQ将<vp,cp>加入PVValsQvp加入PVVs</div> <div>对于赋值指令,其实情况和上q返回赋g?/div> <div>----------------------------------------------------------------</div> <div>2. 遍历PVVsQ传播各q程值变量的PVBindsQ直至不再改变(q代求不动解Q,本质是计过E值变量的传递闭?/div> <div>3. 遍历PVCallsQ对每个<p,i,q>Q先遍历它的每个PVVals uQ将u?lt;p,i,u>加入调用图;再遍历它的每个PVBinds u及u的每个PVVals vQ将v?lt;p,i,v>加入调用?/div> <div>----------------------------------------------------------------</div> <div>以上三环节可使用工作表w来驱动,w初始只有根过E,不断从wUd一个过Ep、分析pQ每当在环节1或环?发现一个新q程Q过E常敎ͼ加入wQ直至w为空Q这时所有过E都已分析,调用图构建完?/div><img src ="http://www.shnenglu.com/qinqing1984/aggbug/230052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/qinqing1984/" target="_blank">春秋十二?/a> 2023-09-06 23:04 <a href="http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>q程间分析之帔R传播法http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230051.html春秋十二?/dc:creator>春秋十二?/author>Wed, 06 Sep 2023 15:02:00 GMThttp://www.shnenglu.com/qinqing1984/archive/2023/09/06/230051.htmlhttp://www.shnenglu.com/qinqing1984/comments/230051.htmlhttp://www.shnenglu.com/qinqing1984/archive/2023/09/06/230051.html#Feedback0http://www.shnenglu.com/qinqing1984/comments/commentRss/230051.htmlhttp://www.shnenglu.com/qinqing1984/services/trackbacks/230051.html【输入?/strong>
调用图,光端是根过E?/div>
【输出?/strong>
每个q程每个参数的icp?/div>
【算法步骤?/strong>
1. 根q程加入工作表,遍历调用图,构徏每个q程的Ş参集合,初始化每个Ş参的icpgؓ未知Qicp格的元素)
2. 从工作表Ud一个过EpQ若工作表ؓI则l止
3. 遍历p的指令序列,Ҏ(gu)个调用点遍历被调q程q的Ş参,Ҏ(gu)个Ş参xQ若对应的传入实参是p的一个Ş参,则计x的icp|{于x旧值和传入实参的icpg交)
4. 若x的icp值比旧值小Q则q加入工作表,转到步骤2l箋

【算法分析?/strong>
数学基础是icp半格Q高度ؓ3Q所以必定收敛(因ؓ半格是单调偏序的Qicp最多变?ơ:未知->帔RQ常?>非常量)。步?复杂度取决于q程数及其参数数量,步骤2?之外循环ơ数取决于调用图的深度,内@环取决于调用Ҏ(gu)、被调过E的参数数量。该法是位|无关的Q不能处理特定调用点的特定过E之帔R传播Q另外过E的形参集合不能有交?/div>
【应用?/strong>
可以计算出每个过E入口Ş参对应的帔R实参集合Q进而可以运用全局常数传播使结果更_。如果确定了一个过E的哪些参数是常量,那么可以克隆Z个副本,对副本进行优化,比如裁剪调用和v始代码序列,使之不传递常数参敎ͼ再运用过E内优化


]]>自然循环构徏http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230050.html春秋十二?/dc:creator>春秋十二?/author>Wed, 06 Sep 2023 14:59:00 GMThttp://www.shnenglu.com/qinqing1984/archive/2023/09/06/230050.htmlhttp://www.shnenglu.com/qinqing1984/comments/230050.htmlhttp://www.shnenglu.com/qinqing1984/archive/2023/09/06/230050.html#Feedback0http://www.shnenglu.com/qinqing1984/comments/commentRss/230050.htmlhttp://www.shnenglu.com/qinqing1984/services/trackbacks/230050.html【输入?/strong>控制图<N, E> GQ回边m—>n
【输出?/strong>循环子图<N, E> loop

【流E?/strong>
1. m、n加入loop的结炚w合,及m—>n加入loop的边集合Q若m不等于n即不环,则加入m到queueQ先q先出队列)
2. 若queue非空Q则其从头出队得l点qQ否则结?/div>
3. 在G中遍历q的每一个前q点pQ将p加入queue,若p不在loopl点集合中,则加入到l(f)oopl点集合Q及边p—>q加入loop的边集合。{到步?l箋

【分析?/strong>
正确性:验最lloop中的l点集合是否满自然循环的定义,注意到输入指定了回边Q这说明n是m的支配结点,当ؓ自环时只有一个结点而满x配自反性,当不环时Q加入的l点是m的所有直接与间接前驱Q所以n也是它们的支配结点(假设不是Q则必有m的一个前驱pQ从入口l点l过p到m但不l过nQ这与n是m的支配结点矛盾)Q且回边已在W?步加入loopQ故满了自然@环的定义。由于m在loop中的前驱数量是有限的Q因此算法必然终?/div>
复杂度:W?步判断p是否在loopl点集合中,取决于图的具体结构,设n为@环子囄l点敎ͼ若是L矩阵Q则只需O(1)旉边是否存在Q因此总耗时为O(n)。若为邻接表Q检边是否存在与结Ҏ(gu)成正比,则总耗时为O(n^2)
其它法Q从m开始,标记n为visitedQ在G的反向流图中深度优先搜烦Q将讉K到的l点及边加入loopQ遇到n回?/div>

]]>ȝ支配l点相关l论的证?/title><link>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230049.html</link><dc:creator>春秋十二?/dc:creator><author>春秋十二?/author><pubDate>Wed, 06 Sep 2023 14:57:00 GMT</pubDate><guid>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230049.html</guid><wfw:comment>http://www.shnenglu.com/qinqing1984/comments/230049.html</wfw:comment><comments>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230049.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/qinqing1984/comments/commentRss/230049.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/qinqing1984/services/trackbacks/230049.html</trackback:ping><description><![CDATA[<div><strong>【命??/strong>控制图G中若a dom nQ且b dom nQ则a dom b 或b dom a</div> <div><strong>【证明?/strong>设G入口为sQ假讄Z成立Q即a 不dom b且b 不dom aQ或a dom b且b dom a。根据支配结点定义,如果是前者,则从s有全部\径经aQ或bQ到n但不l过bQ或aQ,q与题设bQ或aQdom n矛盾Q如果是后者,则从s有全部\径经aQ然后经bQ再laQ构成了无限循环a->b->a->•••Q永q到不了nQ这也与题设矛盾。故l论成立</div> <div></div><br /> <div><strong>【命??/strong>控制图G中若m idom nQ则m是唯一的,若d ≠ n 且d dom n Q则d dom m</div> <div><strong>【证明?/strong>设G入口为sQ假设不唯一QG中有另一个结点m'且m' idom nQ根据支配结点定义,从slm到n的\径上必有m' dom mQ从slm'到n的\径上必有m dom m'Q根据支配关pȝ反对U性,有m'=mQ故唯一。假设d 不dom mQ则从s到m的\径上不必然经qdQ又m是n的唯一直接支配l点Q则从s到n的\径上不必然经qdQ即d 不dom nQ这与题讄盾,故d dom m。可以看到用反证法证明后一个结论时Q直接支配结点的唯一性很关键</div><img src ="http://www.shnenglu.com/qinqing1984/aggbug/230049.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/qinqing1984/" target="_blank">春秋十二?/a> 2023-09-06 22:57 <a href="http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230049.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ȝ数据分析的几个问题http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230048.html春秋十二?/dc:creator>春秋十二?/author>Wed, 06 Sep 2023 14:53:00 GMThttp://www.shnenglu.com/qinqing1984/archive/2023/09/06/230048.htmlhttp://www.shnenglu.com/qinqing1984/comments/230048.htmlhttp://www.shnenglu.com/qinqing1984/archive/2023/09/06/230048.html#Feedback0http://www.shnenglu.com/qinqing1984/comments/commentRss/230048.htmlhttp://www.shnenglu.com/qinqing1984/services/trackbacks/230048.html1. q代法在什么情况下是正的
数据值满_格的定义Q以及数据流方程中的传递函数满_调?/div>
2. q代法在什么情况下必定收敛
在满x性的前提下,当数据流值对应的半格高度有限Ӟ必定收敛。以最元为初值的q代收敛于最不动点Q以最大元为初值的q代收敛于最大不动点

3. IDEAL、MOP、MFP三种解的意义与关p?/strong>
IDEAL是理惌x_的解Q它?yu)程序入口entry到某点p所有可达\径(可执行\径)的尾端的数据值做聚合操作Q区分来自不同\径的数据|若聚合操作是交运,则最大下界ؓ其|M大于IDEAL的解都是错误的,而小于IDEAL的解是保守的Q若聚合操作是ƈq算Q则最上界ؓ其|M于IDEAL的解都是错误的,而大于IDEAL的解是保守的。MOP是全路径聚合解,它将entry到p所有流图\径(不一定可执行Q的的数据流值做聚合操作Q区分来自不同\径的数据|若包含了不可执行路径Q则会丢q性,否则{于IDEALQMFP是基于数据流方程与P代算法求得的最大或最不动点解,它在每个控制图的汇合节点做聚合操作而非路径Q不区分来自不同路径的数据流|若传递函C满分配律,则会丢失_性,否则{于MOP。故_性关pMؓMFP<=MOP<=IDEALQ可知MFP解是安全的,ZMFP作的优化是正的

4. Z么不采用IDEAL和MOP?/strong>
因ؓ一般程序\径数可能无限Q所以没有求MOP的有效算法,且不可达路径是一个不可判定问题,所以没有求IDEAL的有效算?/div>

]]>加宽子和变H算子的用?/title><link>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230047.html</link><dc:creator>春秋十二?/dc:creator><author>春秋十二?/author><pubDate>Wed, 06 Sep 2023 14:45:00 GMT</pubDate><guid>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230047.html</guid><wfw:comment>http://www.shnenglu.com/qinqing1984/comments/230047.html</wfw:comment><comments>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230047.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/qinqing1984/comments/commentRss/230047.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/qinqing1984/services/trackbacks/230047.html</trackback:ping><description><![CDATA[<div><span style="color: #ff6600;"><strong>Z么要加宽子Q?/strong></span><br />因ؓ当格的偏序集合L不满_链条Ӟ从最元q代计算最不动点的过E是不收敛的Q即q代序列(fⁿ(⊥))ₙ不保证最l稳定,且其最上界不保证{于最不动点Q因此需要一U近似lfp(f)的方法。引入加宽算子fw:L×L—>L, fw(x)=x▽f(x)Q可以将L上的一个序列{为收敛的升链Q从L的最元开始P代不断上升,直至lfp(f)的一个上q似即fw的最不动点lfp(fw)Q关pd为lfp(f)<=f(lfp(fw))<=fw(lfp(fw))=lfp(fw)。对上式反复应用f单调得到Qlfp(f)<=fⁿ⁺¹(lfp(fw))<=fⁿ(lfp(fw))<=…<=f(lfp(fw))<=lfp(fw)Q这表明对lfp(fw)使用fq代可获得更_的上q似Q其q程可看成沿一个递降链进一步Dlfp(f)Q但L不一定满降链条件而导致上q过E不收敛Q故需要引入变H算子fn:L×L—>L, fn(x)=x△f(x)Q将L的一个序列{为收敛的降链Q从lfp(fw)开始P代,不断下降直至fn的一个不动点fp(fn)Q则有关pdQlfp(f)<=fp(fn)<=lfp(fw)。注意,q里Ҏ(gu)加宽子的定义可知fw是单调的Q但Ҏ(gu)变窄子的定义不定fn是否单调Q故从lfp(fw)q代求得的fp(fn)Q不定是最还是最大不动点Q只能说是一个不动点Q这也反映了变窄子不需要满_调性,可以更加Dlfp(f)</div><img src ="http://www.shnenglu.com/qinqing1984/aggbug/230047.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/qinqing1984/" target="_blank">春秋十二?/a> 2023-09-06 22:45 <a href="http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230047.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>伽罗瓦连?/title><link>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230046.html</link><dc:creator>春秋十二?/dc:creator><author>春秋十二?/author><pubDate>Wed, 06 Sep 2023 14:42:00 GMT</pubDate><guid>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230046.html</guid><wfw:comment>http://www.shnenglu.com/qinqing1984/comments/230046.html</wfw:comment><comments>http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230046.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/qinqing1984/comments/commentRss/230046.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/qinqing1984/services/trackbacks/230046.html</trackback:ping><description><![CDATA[<div><strong style="font-size: 12pt;">【性质?/strong></div> <div>1. 判定两个完全格L和M能否构成伽罗瓦连接,x象化函数α: L—>M是否完全加性的Q或具体化函?#947;: M—>L是否完全乘性的</div> <div>2. 构造抽象化函数和具体化函数Q即对于一个Galoisq接QL, α, γ, MQ,l定α可通过γ(m) = ⊔{l | α(l) ⊑ m}定γQ这对于所有m成立Q且׃α是确定的Q因?#947;是唯一定的。取最上界是Z保证m描述的L中元素对于所有安全地描述了M?#945;(l)的l是安全的Q给?#947;可通过 α(l) = ⊓ {m | l ⊑ γ(m) } 定αQ其唯一性和取最大下界的原因cM前面</div> <div>3. 帮助定义分析具体格源值到抽象格属性的正确性关pM表示函数。设有Galoisq接QL, α, γ, MQ,R: V×L —>{true, false}为正性关p,pC函?#946;:V—>L生成Q定义S: V×M —>{true, false}Q则有v S m ⇔ v R (γ(m)) ⇔ β(v ) ⊑ γ(m) ⇔ (α◦β)(v) ⊑ mQ即S为正性关p,pC函?#945;◦β: V—>M生成</div> <div>4. 抽象化上q代多次具体?抽象化,l果{于一ơ抽象化Q即α◦γ◦α = αQ具体化上P代多ơ抽象化+具体化,l果{于一ơ具体化Q即γ◦α◦ γ = γ。这个性质被用于基于约化算子构造的伽罗瓦插入(Ҏ(gu)的伽|瓦q接Q具体化为单,抽象化ؓ满射Q的证明</div> <div></div> <br /> <div><strong style="font-size: 12pt;">【组合?/strong></div> <div>分三大类Q即序l合、ƈ行组合和函数I间。ؓ化描qͼ下文UGalois为G</div> <div>1. 序l合Q取W一个Gq接的具体格Q最后一个Gq接的抽象格Q从W一个Gq接到最后一个Gq接l合各抽象化函数Q从最后一个Gq接到第一个Gq接l合各具体化函数。例如,设(L₀, α₁, γ₁, L₁Q和QL₁, α₂, γ₂, L₂Q都是Gq接Q则QL₀, α₂◦α₁, γ₂◦γ₁, L₂Q也是一个Gq接</div> <div>2. q行l合Q有六种Ҏ(gu)Q即独立特征、相x、直U、直张量U、约化积、约化张量积Q前两种用于l合分别针对不同l构多个分析的多个Gq接Z个Gq接。中间两U组合针对同一l构多个分析的多个Gq接Z个Gq接Q后两种l合针对同一l构多个分析的多个Gq接Z个G插入。独立特征、直U、约化积与其它方法的区别是两Ҏ(gu)象化函数与具体化函数之间没有怺作用Q会损失分析l果_ֺQ本质就是P(A)×P(B)和P(A×B)的差别(P为幂集,A、B为集合)Q独立特征与直积、约化积的区别是具体化函数定义不同(抽象化函数相同)Q前者是两个具体化函数的二元l即γ(m₁, m₂)=(γ₁(m₁), γ₂(m₂))Q后者则是最大下界即γ(m)=γ₁(m₁)∧γ₂(m₂)</div> <div>3. 函数I间Q分为d数空间和单调函数I间。对于前者,设(L, α, γ, MQؓ一个Gq接QSZ个集合,f为S到L的函敎ͼg为S到M的函敎ͼ因L和M为完全格Q故由f或g构成的函数集合ؓd数空_则得C个Gq接QS—>L, α', γ', S—>MQ,其中α'(f)=α◦f, γ'(g)=γ◦g。对于后者,设(L₁, α₁, γ₁, M₁Q和QL₂, α₂, γ₂, M₂QؓGq接Qf为L₁到L₂的函敎ͼg为M₁到M₂的函敎ͼ因每个L及M为完全格Q故由f或g构成的函数集合ؓ单调函数I间Q则得到一个Gq接QL₁—>L₂, α, γ, M₁—>M₂Q,其中α(f)=α₂ ◦f ◦γ₁Q?#947;(g)=γ₂◦ g◦ α₁</div><br /> <div><span style="font-size: 12pt;"><strong>【应用?/strong></span></div> <div>当要做数据流分析的一个完全格L不满_链条件时Q除了直接对Lq用加宽子及变H算子外Q还怎么去计近似它的最不动点Q这时伽|瓦q接派上用ZQ先L对应到另一个完全格MQ即构造一个Galoisq接或插入(L, α, γ, MQ,设A是L上的q义单调框架Q不要求L满升链条gQ指定传递函数集合F为L到L的单调函数空_即F本n也是完全|Q其中f是L到L的单调函敎ͼB是M上的q义单调框架Q其中g是M到M的单调函敎ͼ保证g是由f衍生的函数的上近似即α◦f◦γ ⊑ gQ及M满升链条g。到了这里可以证明两个结论:</div> <div>➀ lfp(f) ⊑ γ(lfp(g)) ?α(lfp(f)) ⊑  lfp(g)</div> <div>➁B的约束解(B₁, B₂)蕴含A的约束解(A₁, A₂)=(γ◦B₁, γ◦B₂)Q下??表示图l点的入口、出口。接下来有两U方法可以计近似L的最不动点</div> <div>1. 直接计算M上的最不动点Q然后应用上q结论➀Q取lfp(f) = γ(lfp(g))</div> <div>2. 构造M的上界算子(针对Galoisq接Q或加宽子Q针对Galois插入Q,满 l₁ ∇ₗ l₂ = γ(α(l₁) ∇ₘ α(l₂))Q可以证明左式ؓL上的一个加宽算子,取其lfp∇ₗ (f)。如果前面构造的是Galois插入Q那么可以证明L和M两者的加宽子_ֺ是一LQ即lfp∇ₗ (f) = γ(lfp∇ₘ(α◦f◦γ ))</div><img src ="http://www.shnenglu.com/qinqing1984/aggbug/230046.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/qinqing1984/" target="_blank">春秋十二?/a> 2023-09-06 22:42 <a href="http://www.shnenglu.com/qinqing1984/archive/2023/09/06/230046.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.ics-cert.com.cn" target="_blank">˾Ʒþ޸岻</a>| <a href="http://www.pbxdt.com.cn" target="_blank">þþþۺĻ</a>| <a href="http://www.xysrsks.cn" target="_blank">޺ݺۺϾþѿ</a>| <a href="http://www.onceday.cn" target="_blank">þþƷAvӰƬ</a>| <a href="http://www.zgyjj.cn" target="_blank">þ99Ʒþþþþþò</a>| <a href="http://www.ozwo.cn" target="_blank">ѾþþƷ99þ</a>| <a href="http://www.2blood.cn" target="_blank">þݺҹҹ2020һ</a>| <a href="http://www.5299.net.cn" target="_blank">Ʒþ޲</a>| <a href="http://www.hwumbrella.cn" target="_blank">þþþۺĻ</a>| <a href="http://www.bbs020.cn" target="_blank">97ȾþƵƷ99</a>| <a href="http://www.34lz.cn" target="_blank">߾þþƷĹ</a>| <a href="http://www.2cafe.cn" target="_blank">˾þۺߴý</a>| <a href="http://www.huangjiguang.cn" target="_blank">޾Ʒþò</a>| <a href="http://www.zpktv.cn" target="_blank">һþþþþþ</a>| <a href="http://www.qinyoyo.cn" target="_blank">þþwww˳ɾƷ</a>| <a href="http://www.huiju58.cn" target="_blank">ݺɫۺϾþȥ </a>| <a href="http://www.logeng.cn" target="_blank">þۺϾþۺϾþۺ</a>| <a href="http://www.ifim.cn" target="_blank">ɫۺϾþ </a>| <a href="http://www.yf-plastic.com.cn" target="_blank">þþƷh</a>| <a href="http://www.sosolishi.cn" target="_blank">AVһþ </a>| <a href="http://www.gvyf.cn" target="_blank">պƷþĻ</a>| <a href="http://www.ttpcom.com.cn" target="_blank">Ʒþþþþùţţapp </a>| <a href="http://www.clg8.cn" target="_blank">þþƷѿ޹AV</a>| <a href="http://www.201324.cn" target="_blank">þþþþһƷ</a>| <a href="http://www.m2fz.cn" target="_blank">һ㽶þֻ</a>| <a href="http://www.guer.org.cn" target="_blank">þwwƷw˳</a>| <a href="http://www.izakka.net.cn" target="_blank">͵þþþƷר</a>| <a href="http://www.lihengzhe.cn" target="_blank">Ƭѹۿþ</a>| <a href="http://www.vrfx.cn" target="_blank">þľƷĻ</a>| <a href="http://www.yutobe.cn" target="_blank">Ʒպҹþ</a>| <a href="http://www.rereyy.cn" target="_blank">ɫۺϾþ</a>| <a href="http://www.gwuq.cn" target="_blank">˾þƵ</a>| <a href="http://www.egpk.cn" target="_blank">պһþþþþ</a>| <a href="http://www.kexuncms.cn" target="_blank">þ96Ʒþþ</a>| <a href="http://www.fttyz.com.cn" target="_blank">avҹһƬѿþ</a>| <a href="http://www.printinginfo.com.cn" target="_blank">պƷþþþþ</a>| <a href="http://www.ofjf.cn" target="_blank">ɫۺϾþʮ·</a>| <a href="http://www.27cv.cn" target="_blank">þݺҹҹ96׽</a>| <a href="http://www.schoenhut.com.cn" target="_blank">þþþþþƷο </a>| <a href="http://www.ohos33.cn" target="_blank">þ޾Ʒavվ</a>| <a href="http://www.wlka6.cn" target="_blank">97þù¶Ʒ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>