[发明专利]一种基于CPU多核平台的软件性能优化方法有效
申请号: | 201210411973.5 | 申请日: | 2012-10-25 |
公开(公告)号: | CN103049245A | 公开(公告)日: | 2013-04-17 |
发明(设计)人: | 吴庆;张清 | 申请(专利权)人: | 浪潮电子信息产业股份有限公司 |
主分类号: | G06F9/38 | 分类号: | G06F9/38;G06F9/50 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 250014 山东*** | 国省代码: | 山东;37 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明提供一种基于CPU多核平台的软件性能优化方法,涉及软件运行特征分析、并行优化方案制定、并行优化方案实施与迭代调优三个步骤,具体内容包括:应用软件运行特征分析、串行算法分析、CPU多进/线程并行算法设计、多缓冲设计、线程间通信模式设计、访存优化、cache优化、处理器向量化优化、数学函数库优化等。本发明提供的方法广泛适用于具有多线程并行处理需求的应用场合,指导软件开发人员以较短的开发周期,较低的开发成本,快速高效地对现有软件进行多线程并行优化改造,实现软件对系统资源利用最优化,实现读数据,计算,写回数据的互相掩盖,最大限度地缩短软件运行时间,显著提高硬件资源利用率,提高软件的计算效率和软件整体性能。 | ||
搜索关键词: | 一种 基于 cpu 多核 平台 软件 性能 优化 方法 | ||
【主权项】:
一种基于CPU多核平台的软件性能优化方法, 其特征在于内容包括:1)软件运行特征分析;是对应用软件进行运行特征采样与分析,定位软件性能瓶颈,特征采集与分析,需要代码分析与实验测试结合,并且善于使用软件运行特征分析工具,软件运行特征分析工具主要有用户自有性能分析工具、商业性能分析软件或开源性能分析软件;2)性能优化方案制定;包含三个方面:并行模型方案设计、并行库的选择、进程/线程性能优化方案,其中:并行模型方案设计,主要涉及并行层次与并行粒度设计、核心计算并行算法设计、异步并行处理框架设计、多缓冲设计、负载均衡设计、线程/进程通信设计、线程/进程函数优化;并行库的选择,主要考滤并行模型、软件开发效率与项目周期、并行库的适用性、灵活性、性能及其开发效率;进程/线程性能优化方案,内容有:进程/线程调度优化、任务调度优化、热点算法模型优化、访存优化、cache优化、数学函数库优化、指令优化、编译器优化,性能优化方案实施与迭代调优,并重复调优——测试——调优过程,进行迭代优化;具体优化流程及其实施步骤、细则如下:1)软件运行特征分析:分析软件运行特征,定位软件性能瓶颈应用软件运行特征分析,精准定位软件的性能瓶颈,使优化工作有的放矢,大大提高优化的效率;应用软件运行特征分析的原则有:(1)系统与局部分析结合软件整体框架与软件局部模块分析都很重要,互为补充,综合全面地掌握应用软件的运行特征;(2)定性与定量分析并重在优化开发周期有限的条件下,定性分析为工程师指明工作方向,专注于软件的主要瓶颈,而定量分析界定了性能提升的理论极限;(3)工具采样与代码分析结合软件运行特征分析过程中,工具采样分析与代码分析两种手段互为补充、互为指导工具采样分析,可以帮助程序员快速定位程序热点,而代码分析,为程序热点找到理论依据,从而使热点与代码映射起来;软件运行特征分析工具,具有高效全面、数据完备直观特点,在整个性能优化过程中都能发挥极大作用;软件运行特征分析工具,可以采集应用软件运行过程中的CPU利用率、内存特征、磁盘特征、网络特征、指令CPI信息;软件热点分析工具,可以采集应用软件运行时各函数CPU使用率及其百分比、分析线程时序、分析程序并发度、检查软件内存和线程缺陷;(4)宏观与微观分析结合应用软件的运行特征分析,既有高层次的宏观分析,也有底层的微观分析,宏观呈现现象,微观揭示原理,宏观分析指明优化方向,微观分析指导优化的手段;2)性能优化方案制定:制定综合、全面的性能优化方案(1)优化方案的总体思想高效利用系统资源,包括多核计算资源、内存资源、磁盘资源、网络资源;(2)优化层次、效率、开发周期的关系;优化层次与优化效率的关系:物理模型>数学模型>算法模型;优化层次与优化周期的关系:物理模型<数学模型<算法模型;(3)并行模型设计;1.并行算法设计优异的并行算法,是性能优化的前提条件和基础;深入分析数据依赖关系,充分挖掘算法的并行性,必要时,对现有算法进行并行性改造,从而最大限度减少数据依赖和交换,提高算法的并行度,并行度越高,并行可扩展性越好;2.选择合适的并行粒度或层次定义:高层次或外层循环,并行为粗粒度并行,低层次或内层循环,并行为细粒度并行;并行粒度的选择非常关键,主要考虑以下因素:a)算法的并行性与并行的可扩展性:不同的并行粒度,数据依赖关系不同,导致并行度也不同,制定并行方案时,要充分挖掘算法的并行性,必要时,对现有算法进行并行性改造,从而最大限度减少数据依赖和交换,提高算法的并行度,并行度越高,并行可扩展性越好;b)并行效率——线程调度开销:并行粒度越小,线程调度越频繁,开销越大,兼顾负载均衡性,选择合适的并行粒度;c)线程通信开销:不同的并行粒度,用于线程通信的锁、队列开销不同,不同并行粒度,可能引入不同的线程间数据依赖关系,从而导致线程同步或等待;d)内存容量——空间换时间:并行化引入多缓冲,增加内存需求,不同并行粒度,引入不同缓存需求;e)负载均衡:并行粒度不同,可能负载均衡效果的差异;f)满足IO与计算异步并行的需求:并行层级必须达到一定高度,才方便实现读、写功能线程,进而与计算线程实现异步并行;g)平衡性能与开发周期的矛盾:优化层次越高,开发周期越长;h)并行粒度影响并行库的选择:并行库的选择,很大程度上取决于并行粒度;多节点分布式内存并行方案,需要多进程并行,这样就需要选择MPI并行;节点内共享式内存并行方案,多线程并行效率更高,如果并行粒度低且并行逻辑较简单,OpenMP基本满足要求,并且开发周期短,如果并行粒度较高或并行逻辑复杂,那么pthread是不错的选择;3.并行模型设计选择了合适的并行粒度之后,需要设计一个高效的并行模型,其主要内容有:a)IO与计算异步并行处理模型设计:为了实现读数据、计算、写数据的并行处理,设计异步并行模型,使得读、计算、写分别由相应的功能线程执行,三类线程具有异步时序,三者时间互相隐藏,从而使资源利用率达到最大化,大大提高应用软件性能,异步并行模型,需要多缓冲、任务分发机制、线程调度机制的支持;b)多缓冲设计设计多缓冲,用于数据预取、预输出,主要有源数据缓冲、中间数据缓冲、结果数据缓冲,各缓冲与相应进程/线程构成“生产者‑消费者”模型;c)任务调度机制设计任务分发机制,有共享互斥锁、消息队列模式;d)进程/线程通信机制设计进程/线程间需要通信,通信主要是同步、等待;进程间通信方式有管道、信号;线程间通信方式有信号量、消息队列、共享内存;e)负载均衡设计为提高并行处理效率,达到资源利用最大化,需要实现各进程/线程负责均衡最优化;负载均衡是软件设计目标,其实现载体是任务调度机制及进/线程通信机制;负载均衡分为节点间负载均衡和节点内负载均衡;负载均衡的原则是:能者多劳;负载均衡的实现方式有:i.静态负载均衡适用于数据并行,且运算量与数据规模呈稳定的关系,这种方式实现简单,但是系统适应性差;ii.动态负载均衡适用于任务并行或者运算量无法事先预测的情形,这种方式实现起来相对复杂,但是非常高效,系统适应性好,软件健壮性高;(4)进程/线程函数优化软件并行化后,软件的热点部分,即核心计算,都由相应的进程/线程函数执行,因此,进程/线程的优化,成为软件性能进一步提升的关键,进程/线程函数优化的主要内容有:a)核心算法逻辑优化i.与并行优化、IO优化、热点代码优化相结合,相辅相成;ii.微数学模型优化,化繁琐变换为直接计算;iii.计算过程精简,减少中间变量;b)IO优化i.宏观IO优化1)尽量实现读、计算、写异步并行,互相掩盖;2)化随机、零散小数据读写为连续、大块数据读写;ii.微观IO优化,体现于核心算法的优化;1)内存管理优化a)减小内存使用量b)使内存集中分配、释放,减小内存分配、释放次数;c)数据结构优化,提高访存效率,将矩阵行优先存储访问,以提高矩阵的访问效率;2.cache优化:充分利用数据局部性,平衡任务粒度与cache容量的矛盾;3.变量优化:常量复用,中间数据精简,最大限度减少冗余计算、冗余变量开销;4.寻址优化:使用临时指针,减少多级寻址次数;c)数据函数库优化i.选择不同的快速数学库:mkl/fftw;ii.数学函数的不同精度版本,包括:X(d),X函数的双精度版本、 cos/exp/log;Xf, X函数的单精度版本cosf/expf/logf;d)指令优化i.SIMD指令集优化,即向量指令优化;ii.预编译指令:#pragma ivdep/simd;iii.编译选项:‑xSSE3/4.1a/4.2a –vec‑report3;iv.控制向量化精度:‑fp‑model strict/precise/double/fast/source;v.为提高自动向量化率,对代码作必要调整;vi.循环拆分、循环融合、循环调序;1)复杂表达式拆解;2)统一操作数精度;3)查看编译日志,了解相应循环是否向量化或未能向量化原因;e)编译器优化;i.自动优化选项:‑O3, ‑fp‑model fast;ii.各种优化手段都依赖编译器支持,如自动向量化选项,向量化编译报告,高性能数学库链接选项;f)性能与精度的平衡;大部分时候,性能与精度是互相矛盾的,程序员根据实际需求,进行取舍;(5)并行库的选择方案制定的最后一项,是选择合适的并行库,目前,比较主流的并行库有MPI/OpenMP/pthread;a)不同并行库的开发周期比较:MPI/pthread>OpenMP;b)不同并行库的灵活性比较:MPI/pthread>OpenMP;c)不同并行库的系统适应性比较; i.MPI既适用于多节点间分布式内存并行,也适用于节点内共享内存并行,进行间通信开销较大;ii.OpenMP/pthread只能用于共享内存并行,线程间通信直接、高效;程序员综合并行方案,性能目标,软件开发周期因素,选择最合适的并行库;3)性能优化方案实施与迭代调优:实施既定的性能优化方案并迭代调优主要是实现第2阶段制定的性能优化方案,并重复调优——测试——调优过程,进行迭代优化;5、性能测试及分析将该方法应用于某个典型的石油行业应用软件模块多线程并行程序开发项目,并利用真实数据进行性能测试;本次性能测试将针对不同规模的作业,利用不同规模的任务进行多次测试,并搜集测试数据进行性能分析;1)测试环境及测试数据(1)测试环境包括硬件环境、软件环境;(2)软件环境;操作系统名称:RedHat Linux企业版,版本:5.3编译器名称:Intel编译器,版本:10.1数据库名称:Oracle数据库,版本:10g应用系统名称:某地震资料解释软件模块(3)测试数据及作业规模测试数据为真实生产的3D实际数据;2)性能测试结果分析利用该方法对该软件模块进行多线程并行化改造后,显著地提升了该软件模块的运行效率,以较短的开发周期,获得了较高的性能加速比。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浪潮电子信息产业股份有限公司,未经浪潮电子信息产业股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201210411973.5/,转载请声明来源钻瓜专利网。
- 上一篇:一种上梁装置
- 下一篇:一种多槽式油压缓冲器