原帖地址:http://www.cnblogs.com/MuyouSome/archive/2013/06/01/3112557.html
一、软件效率
软件性能剖析工具分析每个函数(有的工具能分析到每个循环)的执行时间。性能剖析软件:IBM(Rational Quantify)、Intel(VTune)、AMD(CodeAnalyst),DSP集成环境自带。
二、减少指令数
1. 使用更快的算法
快排,FFT算法
2. 选用合适的指令
3. 降低数据精度
4. 减少函数调用
a. 将小函数直接写成语句;
b. 将小函数写成宏;
c. 将函数声明为内联函数;
5. 空间交换时间
将中间结果保存(Google等搜索引擎算法)
6. 减少过保护
性能实在吃紧时,可以去掉冗余功能(函数参数检查、异常检测)
三、减少处理器不擅长的操作
1. 少用乘法(移位)
2. 少用除法、求余(转为乘法)
3. 在精度允许的条件下,将浮点数定点化
4. 尽量减少分支(跳转语句会打乱流水线正常执行,影响效率)
5. 将最有可能进入的分支放在if中,而不是else中(对应于CPU的分支预测单元 -- 静态预测器)
四、优化内存访问
1. 少使用数组,少使用指针(大块数据会被放在存储器中,简单局部变量才会放在寄存器中。)
2. 少使用全局变量(全局变量因为要被多个模块使用,不会放在寄存器中。)
3. 一次多访问一些数据
4. 数据对齐访问(对于n字节的变量,它的起始地址应该为n的整数倍)
5. 大数据结构时的Cacheline对齐
Intel处理器的Cache Line大多为64 byte,在对大数据结构分配内存时,起始地址最好为64 byte的整数倍,这样Cache Miss的次数最少。
6. 程序、数据访问符合Cache的时间、空间局部性
将在一起使用的的数据放在一起能减少Cache Miss,经常执行的代码放在一起也能减少Cache Miss。
7. 多线程编程时,避免False Sharing(假共享)
False Sharing:线程间从算法上并不需要共享变量,但实际执行时,它们所用的数据处于同一个Cache Line中,就会引起Cache冲突。
多线程编程不可避免的要遇到数据共享,编程时应该注意:尽量少共享数据,尽量少修改数据,尽量少频繁地修改数据。
8. 自己管理内存的动态分配(频繁的动态分配和释放内存所带来的危害,链表的例子(free list 结构))
9. 隐藏数据搬移时间(如果处理器支持可寻址的SRAM,用DMA将SRAM中数据搬移到处理器。Cache预取机制)
五、充分利用编译期进行优化
1. 编译器的结构(编译原理与编译器构造,前端与后端)
2. 编译器提供的优化选项(根据具体情况适度优化,优化会增加程序空间)
3. 编译器能计算常量
4. 简单的表达式化简(消除重复的计算)
5. 提取公共代码(把两个分支中的公共代码提到外面)
6. 循环展开、软件流水(在循环代码前通过预编译指令告诉编译器一些信息)
7. 自动向量化(优化为SIMD指令,也需要预编译指令)
8. 高效的数据组织(为程序中对变量、函数分配合适的存储空间,减少Cache miss)
9. 指令并行化
通过分析指令的相关性,实现乱序调度,将指令并行化。为了更好地并行化,编写高级代码时要减少数据依赖。
10. 编译器更懂处理器
六、 利用多核来加速程序
1. 并行计算
分工(任务划分:各个核执行的代码一样。数据划分:代码一样,处理的数据不同。数据流划分:流水线思想。
Amdahl’s Law(阿姆达尔定律) 并行的效率:可并行部分占总过程的比例;并行的程度。
2. 多线程编程
注意:线程间的同步、负载均衡、可扩展性。
3. OpenMP(并行编程架构,专为共享内存系统而设计,适用于多核处理器)
本文链接
分享到:
相关推荐
【读书笔记】英语教师读书笔记:英语教师的专业化.pdf
总的来说,《秋叶:如何高效读懂一本书》及其配套的读书笔记PPT模板,是提升阅读效率和质量的有力工具。它教导我们如何避免阅读陷阱,采取科学的阅读方法,以及如何通过笔记来巩固和应用所学,是每一个渴望从书中...
在深入浅出探索计算机处理器世界的旅程中,《大话处理器》这本科普读物就像一位亲切的导游,以图文并茂的方式带领我们领略计算机科技的奥秘。开篇即立足于“漫游计算机世界”,讲述了计算机自诞生以来的历史演进和...
第六章:Enhanced IGRP(EIGRP) and Open Shortest Path First(OSPF) 第七章:Layer 2 Switching 第八章:Virtual LANs(VLANs) 第九章:Managing a Cisco Interwork 第十章:Managing Traffic with Access Lists 第十...
学生读书笔记共享-学生读书笔记共享系统-学生读书笔记共享系统源码-学生读书笔记共享管理系统-学生读书笔记共享管理系统java代码-学生读书笔记共享系统设计与实现-基于springboot的学生读书笔记共享系统-基于Web的...
读书笔记 |《大话移动通信》书籍信息书名:《大话移动通信》作者:丁奇 阳桢出版社:人民邮电出版社本书解决的问题初识移动通信构建移动通信学习基本脉络框架书籍内容结构第一章:点对点的无线通信——从贝尔到...
读书笔记:微服务实践代码
读书笔记:redis实战代码
读书笔记:netty实战代码
读书笔记:netty 实战 代码
读书笔记:算法导论代码合集
读书笔记:算法导论代码实现
读书笔记:Netty实战代码2019
读书笔记:netty实战代码学习
笔记(54) 五章:5-9,收包解包实战,代码整理,服务器端、 MFC 客户端 与 MFC 测试客户端的源代码压缩包
读书笔记:scala 编程代码实际例子
读书笔记:设计模式初学代码大话设计模式初学练习
本资源为《【单元测试的艺术_自学笔记01】第一章:单元测试基础》的同步实测代码。解压后进入 ch1 文件夹,使用 VSCode 打开项目即可。项目运行方法:运行 npm test 命令即可看到手写版单元测试的输出内容。同时,...