6.代码最优化.

Slides:



Advertisements
Similar presentations
2.8 函数的微分 1 微分的定义 2 微分的几何意义 3 微分公式与微分运算法则 4 微分在近似计算中的应用.
Advertisements

组长:倪运超 小组成员:徐悦、曹吕卿、孙浩、徐圣尧.  上海的历史 上海的历史  上海的历史 上海的历史  上海的文化 —— 建筑 上海的文化 —— 建筑  上海的文化 —— 美食 上海的文化 —— 美食  香港的历史 香港的历史  香港的历史 香港的历史  香港的文化 —— 建筑 香港的文化.
一、 突出解析几何复习中的重点问题的通法通解 解析几何中的重点问题 一、 突出解析几何复习中的重点问题的通法通解 直线与圆锥曲线的位置关系 重点一.
平面构成 第六章 平面构成形式与法则 — 破规与变异. 第七章 平面构成形式与法则 — 破规与变异 破规与变异构成的形式、有下列四类: 一、特异构成 特异构成。其表现特征是,在普遍相同性质的事物 当中,有个别异质性的事物,便会立即显现出来。
诚信为本、操守为重、坚持准则、不做假账 第 九 章 会 计 报 表.
第十三章 中国的传统科学技术 中国古代的科技曾经长期处于世界领先地位,对人类文明的进步作出过重要贡献,并形成了富有特色的科技文化。在今天,源自中国古代科技文化的中医学仍然在现实生活中发挥着积极的作用。
一、算法的基本概念 二、数据结构 三、栈和队列 四、排序方法 五、二叉树
2013年初级会计实务 主讲: 冯毅 教授.
通州国税纳税信用等级A类纳税人 取消发票认证操作培训 2016 通州国税.
财经法规与会计职业道德 (7) 四川财经职业学院.
雄伟的金字塔.
问题解决与创造思维 刘 国 权 吉林省高等学校师资培训中心.
第四单元 自觉依法律己 避免违法犯罪.
我国的宗教政策 第七课第三框.
第6章 树和二叉树 树型结构是一类非常重要的非线性结构。直观地,树型结构是以分支关系定义的层次结构。
第四章 函数的积分学 第六节 微积分的基本公式 一、变上限定积分 二、微积分的基本公式.
第三节 函数的求导法则 一 函数的四则运算的微分法则 二 反函数的微分法则 三 复合函数的微分法则及微分 形式不变性 四 微分法小结.
不确定度的传递与合成 间接测量结果不确定度的评估
第三节 格林公式及其应用(2) 一、曲线积分与路径无关的定义 二、曲线积分与路径无关的条件 三、二元函数的全微分的求积 四、小结.
第二章 导数与微分 第二节 函数的微分法 一、导数的四则运算 二、复合函数的微分法.
开 学 第 一 课 六年级3班.
树(三) 2012初赛知识点梳理.
Copyright © 《离散数学》精品课程小组
旅游服务与管理专业 知识点7 道教教主老子圣迹 任务三 道 教 主题二 中国四大宗教 辉县市职业中等专业学校 辉县市职业中等专业学校
树和二叉树(四).
《中级经济法》模考点评 主讲老师:武劲松.
代码生成.
第二章 矩阵(matrix) 第8次课.
强连通分量 无向图 1、任意两顶点连通称该图为连通图 2、否则将其中的极大连通子图称为连通分量 A D C B E 有向图
走进编程 程序的顺序结构(二).
元素替换法 ——行列式按行(列)展开(推论)
计算机数学基础 主讲老师: 邓辉文.
第11讲 树和二叉树(二).
第二章 Java语言基础.
第一单元:小数乘法 整数乘法运算定律 推广到小数 湖北省武汉市江汉区北湖小学 宋 俊.
28.1 锐角三角函数(2) ——余弦、正切.
无向树和根树.
C语言程序设计 主讲教师:陆幼利.
实数与向量的积.
知识点二 国际环境法的实施.
顺序表的删除.
3.8.1 代数法计算终点误差 终点误差公式和终点误差图及其应用 3.8 酸碱滴定的终点误差
⑴当∠MBN绕点B旋转到AE=CF时(如图1),比较AE+CF与EF的大小关系,并证明你的结论。
1. 求真空中一长为L、总电量为q的均匀带电细直线杆延长线上的电场强度。
美麗的西子湖.
复习: 若A(x1,y1,z1) , B(x2,y2,z2), 则 AB = OB - OA=(x2-x1 , y2-y1 , z2-z1)
第九节 赋值运算符和赋值表达式.
用穷举法设计程序 南京师范大学 教育技术系 倪佳慧
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
3.16 枚举算法及其程序实现 ——数组的作用.
第六章 二叉树和树 6.1二叉树 6.2二叉树遍历 6.3树和森林 6.4树的应用.
辅助线巧添加 八年级数学专项特训: ——倍长中线法.
1.设A和B是集合,证明:A=B当且仅当A∩B=A∪B
第三章 函数的微分学 第二节 导数的四则运算法则 一、导数的四则运算 二、偏导数的求法.
College of Computer Science & Technology
2.2矩阵的代数运算.
第15讲 特征值与特征向量的性质 主要内容:特征值与特征向量的性质.
轴对称在几何证明及计算中的应用(1) ———角平分线中的轴对称.
《离散结构》 二元运算性质的判断 西安工程大学计算机科学学院 王爱丽.
§2 方阵的特征值与特征向量.
欢迎大家来到我们的课堂 §3.1.1两角差的余弦公式 广州市西关外国语学校 高一(5)班 教师:王琦.
第四节 向量的乘积 一、两向量的数量积 二、两向量的向量积.
第三节 数量积 向量积 混合积 一、向量的数量积 二、向量的向量积 三、向量的混合积 四、小结 思考题.
鸡兔同笼(续) ——选择结构.
顺序结构程序设计 ——关于“字符串”和数值.
本节内容 1. 平衡二叉树的定义 2.平衡化旋转 3.平衡二叉排序树的插入操作 昆山爱达人信息技术有限公司
最小生成树 最优二叉树.
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
3.3.2 两点间的距离 山东省临沂第一中学.
9.3多项式乘多项式.
Presentation transcript:

6.代码最优化

背景知识 二叉树遍历算法的应用 递归遍历算法 先序遍历(根左右) 中序遍历(左根右) 后序遍历(左右根) 类后序遍历解决问题 根右左 右左根 二叉树遍历算法的应用 递归遍历算法 先序遍历(根左右) 中序遍历(左根右) 后序遍历(左右根) 类后序遍历解决问题 根右左 右左根 左右根

一、代码最优化问题描述 将给定算术表达式翻译成汇编语言代码,如何翻译得到最优编码? 汇编语言特点:面向机器的低级语言,机器不同,汇编语言指令系统不同, 因此针对不同的机器研究算术表达式的最优化编码问题

模型机A下的最优化代码 模型机A结构如下: 一个累加寄存器R 指令系统包括: 存入指令:store M;将寄存器R的值存入存储单元M 装入指令:load M;将存储单元M的值存入寄存器R 算术运算指令:op M;R⊙M→R 其中,⊙可以是:add (+),sub(-),mul(*),div(/)

例1 (a+b)/(c+d)的两段代码 LOAD a ADD b STORE T1 LOAD c ADD d STORE T2 LOAD T1 DIV T2 LOAD c ADD d STORE T1 LOAD a ADD b DIV T1

定义6.1表达式E翻译成某给定机器语言或汇编语言是最优的,当且仅当这一翻译有最少的指令条数。 对于(a+b)/(c+d)显然第二段代码更优。 影响表达式指令长度的因素?

例2 a+b*c的两段代码 LOAD b MPY c STORE T1 LOAD a ADD T1 LOAD b MPY c ADD a 利用了加法的交换律 b*c+a

例3 a*b+c*b的两段代码 LOAD c MPY b STORE T1 LOAD a ADD T1 LOAD a ADD c MPY b 2 LOAD c MPY b STORE T1 LOAD a ADD T1 LOAD a ADD c MPY b 利用了运算的分配律(a+c)*b=a*b+c*b

例4 a*(b*c)+d*c的两段代码 LOAD b MPY c STORE T1 LOAD a MPY T1 LOAD d 2 LOAD b MPY c STORE T1 LOAD a MPY T1 LOAD d STORE T2 LOAD T1 ADD T2 LOAD a MPY b ADD d MPY c 利用了运算的结合律和分配律 a*(b*c)+d*c =(a*b)*c+d*c =(a*b+d)*c

影响表达式代码长度的因素 表达式本身的长度 表达式中运算的可交换-----交换律 表达式中运算的可分配性-----分配律 表达式中运算的可结合性------结合律 其中:+ - * /,运算中,加法和乘法具有交换、分配和结合性

二、表达式的中缀形式和表达式树 运算符出现在运算量之间的表达式的形式称为中缀形式。 用二元树表示中缀表达式,形成表达式树 二元树的每个非叶结点(内部结点)表示一个运算符 内部结点的左子树表示它的左运算量,右子树表示其右运算量。 叶结点表示一个常数或一个变量。

a+b*c a*b+c*b + b c * a + c b a *

表达式树的构造 a*b+c*b 确定算术表达式中运算符的优先级 优先级最低的算符作为树根 左边的是左运算量,构造左子树 右边的是右运算量,构造右子树 + * * + a b b c

三、求解方案 一般约定: 下面的研究将限定于简单机器A 不对表达式进行化简 不使用交换律、分配律和结合律

2.只有装入和存入指令条数可变,且是有规律的:除第一条指令外,每一条装入指令都紧跟在一条存存入指令之后,即 在上述约定的前提下,得到: 1.表达式中算术运算指令是确定的,不能减少 2.只有装入和存入指令条数可变,且是有规律的:除第一条指令外,每一条装入指令都紧跟在一条存存入指令之后,即 装入指令数=存入指令数+1 3.最优代码中含有最少数目的装入指令 4.表达式树任意一内结点P, L是P的左子树,R是P的右子树, ⊙表示运算符,分析L⊙R的可能情况,得到最优方案。

表达式树基本结构 L叶子、R叶子 L叶子,R子树 L子树,R叶子 L子树,R子树 其中:结点用圆形表示、子树用三角形表示 OP L R

最优求解步骤 求解步骤 load a op b L叶子、R叶子 op a b

最优求解步骤 求解方案一:(先左后右) L叶子、R子树 求解方案二:(先右后左) 子树结果存在R中,CR store M1 load a op M1 OP a R

最优求解步骤 CL ;左子树求解,结果 ; 在R中 op b L子树,R叶子 OP L b

最优求解步骤 1先左后右: CL; store M1 CR; store M2 load M1 op M2 2先右后左: CR; L、R均为子树 OP L R

机器A下的最优代码方案 如果右子树不是叶子,先处理右子树再左子树 如果右子树是叶子,先处理左子树再右子树 对左右子树按同样规则进行处理 右左根 左右根

递归过程 procedure code1(T) if T是叶子then print(“load ”,data(T)); return endif f=0; if rchild(T)不是叶子 then call code1(rchild(T)); call temp(i); print (“store”,i); f=1; endif call code1(lchild(T)); if f=1 then print (data(T),i); call retemp(i); else print (data(T),data(rchild(T))); end code1 递归出口 递归过程

例 a+(b+(c+d)) load c add d store t1 load b add t1 load a + a b c d

四、机器B下的最优化代码 机器B结构如下: 有N个寄存器Ri N>=1 指令:load M,R ;M→R Store R,M ;R → M OP R1,M,R2 ;R1 ⊙ M → R2 OP R1,R2,R3 ;R1⊙R2 → R3 其中,op代表加减乘除算术运算,寄存器R1R2R3可以是同一个寄存器

机器B上,代码中算术运算指令与表达式中运算符数量一致,但load指令和store指令否则存在差一的关系呢?

(a+b)/(c*d) 无store指令 N=2 N=1 load c,r1 load c,r1 mpy r1,d,r1 store r1,t1 load a,r1 add r1,b,r1 div r1,t1,r1 N=2 load c,r1 mpy r1,d,r1 load a,r2 add r2,b,r2 div r2,r1,r1 无store指令

由例子可以看出:当寄存器数量足够时,可以不需要store指令。

定理1 设P是度至少为2的表达式树T的结点,函数MR(P)定义如下: MR(P)= 1 P是右叶子 max{L1,L2} P是内结点,且L1 ≠ L2 L1+1 L1=L2 其中,L1=MR(Lchild(P));L2=MR(Rchild(P)) 若结点P是树的根结点,则MR(P)是所需的最小寄存器数。

L1L2分别表示左子树和右子树所需的最小寄存器数,当L1≠L2 证明 OP b a 当只有一个内结点时: 左叶子需要存入R 右叶子不需要存入R 当有多个内结点时: L1L2分别表示左子树和右子树所需的最小寄存器数,当L1≠L2 不妨设L1>L2,先计算左子树,用一个寄存器存储左子树的值,L1-1≥L2,可以计算右子树 ∴MR(P)=L1 若L2>L1,先计算右子树,再左子树,同理MR(P)=L2 ∴MR(P)=max{L1,L2} load a,r1 op r1,b,r1

不管先计算左子树还是右子树,一个寄存器用来保存中间结果,剩下的L-1﹤L1或L2,应最少增加1个寄存器。 ∴ MR(P)=L+1

对于任意一颗表达式树T,都可以用后根次序计算各节点的MR值,树根T的MR值表示表达式不用store指令时,需要最少的寄存器数。 当N≥MR(T),不需要store指令 当N﹤MR(T),需要store+load指令数最少

例 a+(b+(c+d)) 2 MR(T)=2 + a b c d 1 2 1 1 1

解决方案 MR(R)=0:处理左子树,结果存入Ri 中 输出op Ri,R,Ri MR(L) ≥N且MR(R) ≥N: 先处理右子树,存入Ti中,然后处理左子树,并输出op Ri, Ti ,Ri MR(L) <MR(R)且至少有一个小于N: 先处理右子树再处理左子树 MR(L) ≥ MR(R)且至少有一个小于N 先处理左子树再处理右子树

procedure code2(T) if T是叶子then Print(load data(T),R,i);return ;endif L=Lchild(T);R=Rchild(T); case :MR(R)=0:call code2(L,i);print(data(T),Ri,data(R),Ri); :MR(L) ≥N and MR(R) ≥N:call code2(R,i);call temp(s); print(“store”,Ri,s);call code2(L,i); print(data(T),Ri,s,Ri); :MR(L) <MR(R):call code2(R,i);call code2(L,i+1); print(data(T),Ri+1,Ri,Ri); :else:call code2(L,i);call code2(R, i+1); print(data(T),Ri,Ri+1,Ri); endcase end code2

例 a+(b+(c+d)) MR(T)=2 若N=2不需要store指令 load b,r1 load c,r2 add r2,d,r2 add r1,r2,r1 load a,r2 add r2,r1,r1 2 + a b c d 1 2 1 1 1

例 a+(b+(c+d)) MR(T)=2 若N=1需要store指令 load c,r1 add r1,d,r1 store r1,s1 load b,r1 add r1,s1,r1 load a,r1 2 + a b c d 1 2 1 1 1

总结 在机器A下的最优编码方案 在机器B下的最优编码方案 充分利用了二元树结构分析和求解问题 算法充分应用了递归思想