本发明涉及处理器架构领域,更具体地,涉及一种基于mic架构处理器的并行度优化方法。
背景技术:
在计算机体系结构中,并行度是指指令并行执行的最大条数。在设计并行程序时,我们可以简单地把并行度认为是在多核/众核处理器上能同时执行的线程数/进程数。现有的并行设计方法在计算效率上任然没有较大的提升,这也造成了现有的并行度设计方法很难有效提升程序的性能。
技术实现要素:
本发明为克服上述现有技术所述的至少一种缺陷,提供一种基于mic架构处理器的并行度优化方法。
本发明旨在至少在一定程度上解决上述技术问题。
本发明的目的是指导软件开发人员已较短开发周期,较低开发成本,快速对应用程序的热点进行并行度优化,缩短了程序执行时间,提高了应用程序的整体计算效率。
为解决上述技术问题,本发明的技术方案如下:一种基于mic架构处理器的并行度优化方法,包括以下步骤:
s1:热点判断,确定函数占用的热点;
s2:根据函数占用的热点比例判断是否有移植的可行性;
s3:判断程序是否有并行化的空间;
s4:分析循环迭代体;
s5:选择并行方式。
优选地,所述s1热点判断,确定函数占用的热点是采用自顶向下的方法找到热点。
优选地,所述s2中根据函数占用的热点比例判断是否有移植的可行性的具体步骤为:
s21:查看主函数调用的子函数,确定该子函数的时间占用是否占总运行时间的比例;
s22:如果子函数的运行时间时间占总运行时间的比例高于40%,则该子函数可以并行;
s23:如果可以并行调用,则对其进行并行移植,如果不能并行,则查看该子函数调用的子函数能否被并行调用,直到最底层函数。
优选地,所述s3中判断函数并行化空间具体为:如果程序中有循环,则可并行化。
优选地,所述s4中分析循环迭代体包括:循环迭代次数、代体运行时间、迭代与迭代之间是否有数据依赖。
优选地,所述s5中选取并行方式具体为:如果迭代次数较低,每个迭代代码比较复杂,迭代之间没有或只有很少的数据交换,则选择粗粒度并行;如果并发度高,占用资源相对较少,单线程工作量相对较小,代码段比较独立,与其他部分数据交换少则选择细粒度并行。
优选的,本方法执行在mic架构的处理器上,并且使用的编译器是支持mic架构及其指令集的任意编译器。
与现有技术相比,本发明技术方案的有益效果是:本发明只对较大的热点进行分析,而放弃较小的热点,避免造成移植成本太高,造成的经济上的损失;并且对迭代次数较低,迭代代码比较复杂,迭代之间没有或只有很少的数据交换的代码选择粗粒度并行,对并发度高,占用资源相对较少,单线程工作量相对较小,代码段比较独立与其他部分数据交换少的代码选择细粒度并行,这样可以有效地分配计算资源,从而提高了应用程序的整体计算效率。
附图说明
图1为本发明流程图。
具体实施方式
附图仅用于示例性说明,不能理解为对本专利的限制;
下面结合附图和实施例对本发明的技术方案做进一步的说明。
实施例1
如图1所示本发明流程图,其主要步骤包括:
s1:热点判断,确定函数占用的热点;
s2:根据函数占用的热点比例判断是否有移植的可行性;
s3:判断程序是否有并行化的空间;
s4:分析循环迭代体;
s5:选择并行方式。
在具体实施过程中,首先进行热点判断,用自顶向下的方法找到函数占用的热点;查看主函数调用的子函数,分析该子函数的时间占用是否占总运行时间的比例,如果子函数的运行时间时间占总运行时间的比例高于40%,则该子函数可以并行;如果能够并行调用,则对其进行并行移植,如果不能并行,则查看该子函数调用的子函数能否被并行调用,直到最底层函数;实际过程中,只对热点较高的函数进行分析。其次查看代码中是否有循环或者有用pthread的多线程并行,如果有则该程序可以进行并行化,分析循环迭代次数,以及迭代体运行时间是否过长,分析迭代与迭代之间是否有数据依赖。如果迭代次数较低,每个迭代代码比较复杂,迭代之间没有或只有很少的数据交换,则选择粗粒度并行。移植到mic上的程序,其并发度高,占用资源相对较少,单线程工作量相对较小,代码段比较独立,与其他部分数据交换少,则选择细粒度并行。
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。