下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、针对以下矩阵相乘的C循环语句,直接在其源程序基础上做出循环优化(代码外提、强度消弱等)设矩阵如下:int a2020,b2020,c2020;/width of an integer is 4/ a = b * c;for(i=0;i20;i+) for(j=0;j20;j+)for(k=0;k20;k+)aij = aij + bik*ckj;(1) 首先考虑代码外提。n 对于k循环而言,aij和bi为循环不变式,可以外提至k循环外(j循环内),程序变换如下:for(i=0;i20;i+) for(j=0;j20;j+) t1 = addr(aij);t2 = addr(bi);for(k=
2、0;k20;k+) *t1 = *t1 + t2k*ckj; / k-loop / j-loop / i-loopn 考虑ai和bi在中间层循环j-loop中仍然是循环不变式,可以进一步外提出j-loop(提到i-loop中),程序变换为:for(i=0;i20;i+) t3 = addr(ai);t4 = addr(bi);for(j=0;j20;j+) t1 = addr(t3j);t2 = t4;for(k=0;k20;k+) *t1 = *t1 + t2k*ckj; / k-loop / j-loop / i-loopn 考虑复写传播,可以删除变量t2。程序变换如下:for(i=0;i
3、20;i+) t3 = addr(ai);t4 = addr(bi);for(j=0;j20;j+) t1 = addr(t3j);for(k=0;k20;k+) *t1 = *t1 + t4k*ckj; / k-loop / j-loop / i-loop(2) 然后考虑数组下标的情况(设数组元素按行优先排列),即将其变换为指针形式,即地址计算的展开形式。t3 = addr(ai);其地址表述为:i*20*4+A-0 = i*80+A/A 为数组a的起始地址;/C语言数组下标从0开始。这是一个基本归纳变量i族的归纳表达式t4 = addr(bi);其地址表述为:i*20*4+B-0 = i*
4、80+B/B 为数组b的起始地址;/C语言数组下标从0开始。这是一个基本归纳变量i族的归纳表达式t1 = addr(t3j);其地址表述为:j*4+t3-0 = j*4+t3/C语言数组下标从0开始。这是一个基本归纳变量j族的归纳表达式t4k的地址表述为:k*4+t4-0 = k*4+t4/C语言数组下标从0开始。这是一个基本归纳变量k族的归纳表达式ckj的地址表述为:k*20*4+j*4+C-0=k*80+j*4+C/C 为数组c的起始地址;/C语言数组下标从0开始。这是一个基本归纳变量k族的归纳表达式/因为上面式子中的j*4+C在k-loop中不变(3) 现在进行强度消弱。注意每次的强度消
5、弱分三个步骤完成,即,a) 引入新的变量s,并将原归纳表达式替换为变量s;b) 在循环中基本归纳变量增值语句后,添加变量s的增值语句;c) 在循环外基本归纳变量的初值后(一般在前置块末尾)添加变量s的初值计算语句;t4k:针对上面的归纳表达式k*4+t4引入变量t5ckj:针对上面的归纳表达式k*80+j*4+C引入变量t6;addr(t3j):针对上面的归纳表达式j*4+t3引入变量t7;addr(bi):针对上面的归纳表达式i*80+B引入变量t8;addr(ai):针对上面的归纳表达式i*80+A引入变量t9;程序继续变换为:t8 = B;/ addr(bi)的初值t9 = A; / a
6、ddr(ai)的初值for(i=0;i20;i+) t3 = t9;t4 = t8;t7 = t3; / addr(t3j)的初值;for(j=0;j20;j+) t1 = t7;t5 = t4; /t4k的初值t6 = j * 4 + C /ckj的初值;它是j-loop中的归纳表达式for(k=0;k20;k+) *t1 = *t1 + (*t5)*(*t6);t5 = t5 + 4;t6 = t6 + 80; / k-loopt7 = t7 + 4; / j-loopt8 = t8 + 80;t9 = t9 + 80; / i-loop此时发现,j*4+C也是归纳表达式;引入新的变量t1
7、0;则程序变换为:注意看其中红色部分为强度消弱的三个步骤!t8 = B;/ addr(bi)的初值t9 = A; / addr(ai)的初值for(i=0;i20;i+) t3 = t9;t4 = t8;t7 = t3; / addr(t3j)的初值;t10 = C;/ j * 4 + C的初值for(j=0;j20;j+) t1 = t7;t5 = t4; /t4k的初值t6 = t10;/将j * 4 + C替换为变量t10for(k=0;k20;k+) *t1 = *t1 + (*t5)*(*t6);t5 = t5 + 4;t6 = t6 + 80; / k-loopt7 = t7 + 4;t10 = t10 + 4;/t10的增值语句 / j-loopt8 = t8 + 80;t9 = t9 + 80; / i-loop(4) 此时再次考虑复写传播,删除变量t3、t4和t1,分别由变量t9、t8和t7来代替! 程序最终变换为:t8 = B;/ addr(bi)的初值t9 = A; / addr(ai)的初值for(i=0;i20;i+) t7 = t9;t10 = C; for(j=0;j20;j+) t5 = t8; /t4k的初值t6 = t10;for(k=0;k20;k+) *t7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公园城市建设与生态空间优化-专题研究报告
- 加气混凝土大板拼装工岗前岗位实操考核试卷含答案
- 轧钢工岗前实操知识水平考核试卷含答案
- 溶剂精制装置操作工操作能力知识考核试卷含答案
- 化工热交换工操作规程强化考核试卷含答案
- 堆场机械维修工QC管理考核试卷含答案
- 系族企业多元化“度”之权衡:复星系内部资本市场效率的深度剖析
- 糖皮质激素联合低分子右旋糖酐对脂肪栓塞综合征预防效果的实验探究
- 糖尿病黄斑水肿临床诊断方法的多维度比较与分析
- 糖尿病胃轻瘫患者GLP - 1受体表达与胃排空关联之深度剖析
- 2026年麻醉学副高职称考试历年真题
- 2026届山西省吕梁市高三下学期第三次模拟考试历史试题(含答案)
- 2026安徽宣城市国有资本投资运营控股集团有限公司社会招聘13人备考题库含答案详解
- 2026年全国防灾减灾日安全教育主题
- 2026年事业单位结构化面试真题及答案解析
- 2025年云南八年级地生会考考试试题及答案
- (2026版)医疗保障基金使用监督管理条例实施细则(定点医疗机构学习与解读)课件
- 2026四川宜宾市天原集团招聘77人笔试历年典型考点题库附带答案详解
- 精神病学基本技能与临床思维
- 采购部处罚制度范本
- 构建原子坐标 确定原子位置-2026届高考化学一轮复习
评论
0/150
提交评论