【课程笔记】南大软件分析课程4——数据流分析基础(课时56)

【课程笔记】南大软件分析课程4——数据流分析基础(课时56),第1张

关于这一节 zcc 的笔记已经够完美了,我就直接在他基础上记录了。

上节课是介绍了3种数据流分析迭代算法,本节课将从数学理论的角度来讨论数据流分析,加深对数据流分析算法的理解。

本质 :常见的数据流迭代算法,目的是通过迭代计算,最终得到一个稳定的不变的解。

定义1 :给定有k个节点(基本块)的CFG,迭代算法就是在每次迭代时,更新每个节点n的OUT[n]。

定义2 :设数据流分析的值域是V,可定义一个 k-元组 : (OUT[n 1 ], OUT[n 2 ], , OUT[n k ])。是集合 (V 1 V 2 V k ) (幂集,记为V k )的一个元素,表示每次迭代后k个节点整体的值。

定义3 :每一次迭代可看作是V k 映射到新的V k ,通过转换规则和控制流来映射,记作函数F:V k V k 。

迭代算法本质 :通过不断迭代,直到相邻两次迭代的 k-元组 值一样,算法结束。

不动点 :当X i = F(X i )时,就是不动点。

问题

定义 :给定偏序集(P, ), 是集合P上的二元关系,若满足以下性质则为偏序集:

例子

定义 :给定偏序集(P, ),且有P的子集S⊆P:

最小上界 :least upper bound(lub 或者称为join),用⊔S表示。上确界?

定义:对于子集S的任何一个上界u,均有⊔S⊑u。

最大下界 :greatest lower bound(glb 或者称为meet),用⊓S表示。下确界?

定义:对于子集S的任何一个下界l,均有l⊑⊓S。

若S只包含两个元素,a、b(S = {a, b})那么上界可以表示为a⊔b,下界可以表示为a⊓b。

都是基于上下确界来定义的。

定义 :给定一个偏序集(P,⊑),∀a,b∈P,如果存在a⊔b和a⊓b,那么就称该偏序集为格。偏序集中的 任意两个元素 构成的集合均 存在最小上界和最大下界 ,那么该偏序集就是格。

例子

定义 :给定一个偏序集(P,⊑),∀a,b∈P:

当且仅当a⊔b存在(上确界),该偏序集叫做 join semilatice;

当且仅当a⊓b存在(下确界),该偏序集叫做 meet semilatice

定义 :对于格点 (S, ) (前提是格点)的任意子集S,⊔ S 上确界和⊓S下确界都存在,则为全格complete lattice。

例子

符号 : = P ,叫做top; = P,叫做bottom。

性质 :有穷的格点必然是complete lattice。全格一定有穷吗? 不一定,如实数界[0, 1]。

定义 :给定一组格,L 1 =(P 1 , 1 ),L 2 =(P 2 , 2 ), ,L n =(P n , n ),都有上确界 i 和下确界 i ,则定义格点积 L n = (P, ):

性质 :格点积也是格点;格点都是全格,则格点积也是全格。

数据流分析框架(D, L, F) :

数据流分析可以看做是 迭代算法 格点 利用 转换规则 meet/join *** 作

目标问题:迭代算法一定会停止(到达不动点)吗?

(1)单调性

定义 :函数f: L L,满足∀x,y∈L,x⊑y⇒f(x)⊑f(y),则为单调的。

(2)不动点理论

定义 :给定一个 完全lattice(L,⊑) ,如果f:L→L是 单调 的,并且 L有限

那么我们能得到最小不动点,通过迭代:f(⊥),f(f(⊥)),,f k (⊥)直到找到最小的一个不动点。

同理 我们能得到最大不动点,通过迭代:f(⊤),f(f(⊤)),,fk(⊤)直到找到最大的一个不动点。

(3)证明

不动点的存在性;

最小不动点证明。

问题 :我们如何在理论上证明 迭代算法有解 有最优解 何时到达不动点 ?那就是将迭代算法转化为 不动点理论 。因为不动点理论已经证明了,单调、有限的完全lattice,存在不动点,且从⊤开始能找到最大不动点,从⊥开始能找到最小不动点。

目标 :证明迭代算法是一个 完全lattice(L, ) ,是 有限 的, 单调 的。

根据第5小节,迭代算法每个 节点(基本块)的值域 相当于一个 lattice ,每次迭代的 k个基本块的值域 就是一个 k-元组 。k-元组可看作 lattice积 ,根据格点积性质:若L k 中每一个lattice都是完全的,则L k 也是 完全 的。

迭代算法中,值域是0/1,是有限的,则lattice有限,则L k 也有限。

函数F:BB中转换函数f i :L → L + BB分支之间的控制流影响(汇聚是join / meet *** 作,分叉是拷贝 *** 作)。

总结 :迭代算法是完全lattice,且是有限、单调的,所以一定有解、有最优解。

定义 lattice高度 —从lattice的top到bottom之间最长的路径。

最坏情况迭代次数 :设有n个块,每次迭代只有1个BB的OUT/IN值的其中1位发生变化(则从top→bottom这1位都变化),则最多迭 ( n × h ) 次。

说明 :may 和 must 分析算法都是从不安全到安全(是否安全取决于safe-aprroximate过程),从准确到不准确。

以 Reaching Definitions分析为例:

以available expressions分析为例:

迭代算法转化到lattice上,may/must分析分别初始化为最小值 和最大值 ,最后求最小上界/最大下界。

目的 :MOP(meet-over-all-paths)衡量迭代算法的精度。

定义 :最终将所有的路径一起来进行join/meet *** 作。

路径P = 在cfg图上从entry到基本块s i 的一条路径(P = Entry → s 1 → s 2 → → s~i )。

路径P上的转移函数F p :该路径上所有语句的转移函数的组合f s1 ,f s2 , ,f si-1 ,从而构成F P 。

MOP :从entry到s i 所有路径的F P 的meet *** 作。本质—求这些值的最小上界/最大下界。

MOP准确性 :有些路径不会被执行,所以不准确;若路径包含循环,或者路径爆炸,所以实 *** 性不高,只能作为理论的一种衡量方式。

对于以上的CFG,抽象出itter和MOP公式。

证明

结论 :所以,MOP更准确。若F满足分配律,则迭代算法和MOP精确度一样 F ( x ⊔ y )= F ( x )⊔ F ( y )。一般,对于控制流的join/meet,是进行集合的交或并 *** 作,则满足分配律。

问题描述 :在程序点p处的变量x,判断x是否一定指向常量值。

类别 must分析 ,因为要考虑经过p点所有路径上,x的值必须都一样,才算作一定指向常量。

表示 :CFG每个节点的OUT是pair(x, v)的集合,表示变量x是否指向常数v。

(1)D:forward更直观

(2)L:lattice

变量值域 :所有实数。must分析,所以 是UNDEF未定义(unsafe), 是NAC非常量(safe)。

meet *** 作 :must分析, 。在每个路径汇聚点PC,对流入的所有变量进行meet *** 作,但并非常见的交和并,所以 不满足分配律

(3) F转换函数

OUT[s] = gen U (IN[s] - {(x, _})

输出 = BB中新被赋值的 U 输入 - BB中相关变量值已经不是f常量的部分。

对所有的赋值语句进行分析(不是赋值语句则不管,用val(x)表示x指向的值):

(4) 性质 :不满足分配律

可以发现,MOP更准确。F(X Y) F(X) F(Y),但是是单调的。

本质 :对迭代算法进行优化,采用队列来存储需要处理的基本块,减少大量的冗余的计算。

软件分析——数据流分析2

我看着好像意思是有一个同步的置位。

一般的reset信号都是异步的。很少用同步的复位。如果你确实是想要同步复位,那不用管这个warn。可能你的原本意思也是异步复位,但是你的代码中写错了。

一般的同步复位就是process的敏感变量中没有reset。

这是硬件问题,确认该FPGA是否正确焊接,以及FPGA是否正确供电。在所有FPGA下载之前,开发系统都会跟FPGA有一个通讯,读出FPGA内部的ID号,判断器件的型号跟软件编译时选择的型号是否一致。现在读出来是全高电平,说明FPGA损坏或者没有正确供电。仔细检查硬件电路吧。

3D动画制作的过程

三维动画又称3D动画,是近年来随着计算机软硬件技术的发展而产生的一项新兴影视艺术。下面是我分享的3D动画制作的过程,一起来看一下吧。

1 建模部分

① 建模前要确定模型的比例,方法就是数正视图的格数。要将单位设为默认的centimeter,即一个格子就是一厘米。

② 模型创建完成后要在世界坐标中心,并且物体的底部要和以X轴与Z轴构成的平面贴紧,如果是角色的话,就是要让他踩在地面上。

③ 关于场景模型,一定要将确定的地面的Y轴设为0,也就是要让做好的角色可以踩在地面上。

④ polygon物体不能有五条边或五条以上边构成的面。

⑤ 角色模型创建时要保证角色正面朝向Z轴。

⑥ 角色应是直立姿态,双臂伸直抬起与肩平,手心向前或向下。

⑦ 模型创建完成要及时删除历史,有必要时作Freeze Transformations和Center Pivot *** 作。

⑧ 注意物体的成组与命名。(参考命名方法)清理垃圾节点。

⑨ 存文件时要关闭其他窗口,4个视图窗口显示。

⑩ 拿到设置完的角色文件先检查有无问题,如发现有错误或问题要与该文件制作者沟通,不得自行解决。制作过程中发现也一样。

创建角色的粗模要根据骨节的位置,用最少的面将模型分成一节节的,创建好后将每一部分作为相对应的骨节的子物体。

创建好高质量的模型层和低质量的模型层及一些必要的层。如:Mike_hi_layer、Mike_lo_layer、Mike_hat_layer。

制作过程中遇到需要以后的工作组要了解的问题时要及时作记录,并在工作完成时将文件与文档一起交给下一步工作的人员。

2 材质部分

① 先检查拿到的场景文件有无问题,如发现有错误或问题要与该文件制作者沟通,不得自行解决。制作过程中发现也一样。

② 禁用默认材质球作材质。

③ 在角色材质制作过程中尽量避免使用投射贴图坐标或三维程序纹理。如果必须使用投射贴图坐标或三维程序纹理,在最后要记得给这个物体创建Texture Reference Object。

④ 创建uv时尽量使uv占满贴图空间。

⑤ 创建完uv后一定要删除物体历史。

⑥ 贴图一定是正方形的,而且要按256256、512512、10241024、20482048的比例定制贴图大小。

⑦ 贴图要转成iff格式,实在无法转时用tiff的格式。

⑧ 贴图不要有RGB以外的通道,如果贴图属性是Bump、Displacement之类只需要8位灰度图时,要将贴图转成灰度模式。

⑨ 制作材质时使用默认灯光。

⑩ 有可以公用的节点一定要公用。例如了解的问题时要及时作记录,并在工作完成时将文件与文档一起交给下一步工作的人员。

3 设置部分

① 先检查拿到的场景文件有无问题,如发现有错误或问题要与该文件制作者沟通,不得自行解决。制作过程中发现也一样。

② 设置好骨节的轴方向,大原则是骨节的轴向要和世界坐标的方向相同,而且要根据骨节需要旋转的轴向进行修正。

③ 根部控制器和腰部控制器的Transformations数值必须是初始数值。(具体控制器设置方法参看角色设置方法)

④ 尽量将不容易选取的动画属性用控制器的方式连接好,便于选取。

⑤ 注意命名。(参考命名方法)

⑥ 完成设置后,要隐藏辅助工具,如:Lattice、ikHandle等。

⑦ 存文件时要关闭其他窗口,4个视图窗口显示。

⑧ 制作过程中遇到需要以后的工作组要了解的问题时要及时作记录,并在工作完成时将文件与文档一起交给下一步工作的人员。

4 动画故事板部分

① 先检查拿到的场景文件有无问题,如发现有错误或问题要与该文件制作者沟通,不得自行解决。制作过程中发现也一样。

② 调动画前先设置好帧速率和Render Global中的Resolution大小。

③ Camera视窗要打开Resolution Gate和Safe Action。

④ Camera动画设置完成后要锁定这个Camera的动画属性。

⑤ 如果在一个场景文件里有两个或更多的Camera时,必须给每一个Camera命名,标明其境头号以及在何时间段有效。如:sc01_1_100、sc02_100_200。

⑥ 完成动画调节保存文件前要删除没用的物体和层,关掉所有视窗3视窗显示。参考:左上是Camera视窗,右上是透视视窗,下面是Graph Editor视窗。 ⑦ 制作过程中遇到需要以后的工作组要了解的问题时要及时作记录,并在工作完成时将文件与文档一起交给下一步工作的人员。

5 动画部分

① 先检查拿到的场景文件有无问题,如发现有错误或问题要与该文件制作者沟通,不得自行解决。制作过程中发现也一样。

② 完成动画调节保存文件前要删除没用的物体和层,关掉所有视窗3视窗显示。参考:左上是Camera视窗,右上是透视视窗,下面是Graph Editor视窗。

③ 制作过程中遇到需要以后的工作组要了解的问题时要及时作记录,并在工作完成时将文件与文档一起交给下一步工作的人员。

6 灯光部分

① 先检查拿到的场景文件有无问题,如发现有错误或问题要与该文件制作者沟通,不得自行解决。制作过程中发现也一样。

② 灯光成组后不要缩放。

③ 使用Depth Map Shadows时要注意Dmap Resolution值不可以超过4096。

④ 注意灯的命名。(参考命名方法)

⑤ 制作过程中遇到需要以后的工作组要了解的问题时要及时作记录,并在工作完成时将文件与文档一起交给下一步工作的人员。

7 特效部分

① 先检查拿到的场景文件有无问题,如发现有错误或问题要与该文件制作者沟通,不得自行解决。制作过程中发现也一样。

② 制作过程中遇到需要以后的工作组要了解的问题时要及时作记录,并在工作完成时将文件与文档一起交给下一步工作的人员。

8 渲染部分

① 先检查拿到的场景文件有无问题,如发现有错误或问题要与该文件制作者沟通,不得自行解决。制作过程中发现也一样。 制作过程中遇到需要以后的工作组要了解的问题时要及时作记录,并在工作完成时将文件与文档一起交给下一步工作的人员。

;

FPGA 生成的bit文件,就是一个Hex文件,你只需要按照器件推荐的时序要求写入FPGA即可。这部分的详细说明见使用器件配置说明哪个章节。

其实,以Altera器件的PS模式为例,在datasheet上可以看到,将Program管脚拉低,然后等待FPGA的nStatus信号从低到高后,等待一段时间后开始送CLK和DATA0,待bit文件中数据送完,在保持一段时间CLK,等待DONE信号变高即可完成配置。 具体时序要求见文档,这里不再详细说明。

由于你的问题很模糊,我的理解,就是你想自己做一个下载FPGA的程序(如CPU配置FPGA),给出的这一个例子可以参考,如果使用Xilinx或Lattice的器件,配置方式略有差异,主要还是HEX文件的问题,datasheet上对于这部分的描述相对详细,建议你看看。

以上就是关于【课程笔记】南大软件分析课程4——数据流分析基础(课时5/6)全部的内容,包括:【课程笔记】南大软件分析课程4——数据流分析基础(课时5/6)、关于 赛灵思 软件仿真VHDL语言的一个问题、FPGA开发板程序下载失败,找不到目标板等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9757924.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存