- 1、本文档共46页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
优化程序性能USTC
优化程序性能 张 琦 (Qi Zhang) CS, USTC xiaoga@mail.ustc.edu.cn Dec. 2007 提纲 优化程序基本方法 优化编译器的能力和局限性 程序示例 消除循环的低效率 减少过程调用 消除不必要的存储器引用 降低循环开销 转换到指针代码 提高并行性 优化效果小结 确认和消除性能瓶颈 基本方法 编写高效的程序 选择一组最好的算法和数据结构 编写出编译器能够有效优化以转换成高效可执行程序的源代码 基本策略 在实现和维护的简单性与运行速度之间做出权衡折衷 只运行少数几次的程序 减少编程工作量 需要反复执行的程序 仔细的优化 提纲 优化程序基本方法 优化编译器的能力和局限性 程序示例 消除循环的低效率 减少过程调用 消除不必要的存储器引用 降低循环开销 转换到指针代码 提高并行性 优化效果小结 确认和消除性能瓶颈 优化编译器的能力和局限性 编译器会帮助我们做一些优化 命令行选项 –O –O2 –O3 编译器优化的局限性 不能改变正确的程序行为 对程序行为、环境的了解有限 需要很快完成编译工作 编译器优化的局限性 – 指针 void twiddle1(int *xp, int *yp) { *xp += *yp; *xp += *yp; } //访存6次 void twiddle2(int *xp, int *yp) { *xp += 2 * (*yp); } //访存3次 twiddle1与twiddle2是等价的么? 编译器优化的局限性 – 指针 考虑 xp==yp 的情况 *xp += *xp; *xp += *xp; = *xp增加为以前的4倍 *xp += 2 * (*xp); = *xp增加为以前的3倍 妨碍优化的因素 编译器必须假设不同的指针可能会指向存储器中的同一个位置(memory aliasing) 编译器优化的局限性 – 函数调用 int f ( int ); int func1( int x ) { return f(x) + f(x) + f(x) + f(x); } int func2( int x ) { return 4*f(x); } 编译器优化的局限性 – 函数调用 int counter = 0; int f(int x) { return counter++; } - 改变调用f的次数会改变程序的行为 - 通常编译器会保持所有的函数调用不变 提纲 优化程序基本方法 优化编译器的能力和局限性 程序示例 消除循环的低效率 减少过程调用 消除不必要的存储器引用 降低循环开销 转换到指针代码 提高并行性 优化效果小结 确认和消除性能瓶颈 程序示例 typedef struct { int len; data_t *data; } vec_rec, *vec_ptr; vec_ptr new_vec (int len); int get_vec_element(vec_ptr v, int index, data_t *dest); int vec_length(vec_ptr v); 程序示例 void combine1(vec_ptr v, data_t *dest) { *dest = 0; for(int i=0; i vec_length ( v ) ; i++) { data_t val; get_vec_element(v, i, val); *dest = *dest + val; } } 提纲 优化程序基本方法 优化编译器的能力和局限性 程序示例 消除循环的低效率 减少过程调用 消除不必要的存储器引用 降低循环开销 转换到指针代码 提高并行性 优化效果小结 确认和消除性能瓶颈 消除循环的低效率 for(int i=0; i vec_length(v); i++) Void combine2(vec_ptr v, data_t *dest) { int length = vec_length(v); *dest = 0; for(int i=0;ilength;i++) { data_t val; get_vec_element(v, i, val); *dest = *dest + val; } } 代码移动 (code motion) 识别出要执行多次但是计算结果不会改变的计算 把计算移动到代码前面的、不会被多次求值的部分 循环内部 - 循环外部 练习1 size_t strlen(const char *s); void lower1(char *s) { for(int i=0;istrlen(s);i++) if(s[i]=‘A’
您可能关注的文档
- 2009试题解析2010 8.ppt
- ch2wyf门电路.ppt
- GenerationGap英文版.ppt
- ch3wyf组合逻辑电路.ppt
- Holidays英文版.ppt
- ch5wyf时序逻辑电路.ppt
- iPad产品介绍.ppt
- lec10 操作系统.ppt
- Leisure time英文版.ppt
- LOVE英文版.ppt
- 中国行业标准 DB/T 100-2024区域性地震安全性评价.pdf
- 《GM/T 0138-2024C-V2X车联网证书策略与认证业务声明框架》.pdf
- GM/T 0138-2024C-V2X车联网证书策略与认证业务声明框架.pdf
- DB/T 100-2024区域性地震安全性评价.pdf
- 中国行业标准 GM/T 0138-2024C-V2X车联网证书策略与认证业务声明框架.pdf
- 校园周边书店阅读氛围对初中生阅读素养提升的影响研究教学研究课题报告.docx
- 初中校园餐饮卫生监管与食品安全教育创新模式研究教学研究课题报告.docx
- 《文化遗产保护与旅游开发平衡机制的法律法规完善研究》教学研究课题报告.docx
- 《农作物病虫害生物防治技术的经济效益与社会影响分析》教学研究课题报告.docx
- 1 剖宫产术后子宫瘢痕憩室治疗中的并发症预防与护理措施教学研究课题报告.docx
文档评论(0)