[发明专利]一种多核环境下OpenMP任务并行的优化方法有效
申请号: | 201310680110.2 | 申请日: | 2013-12-12 |
公开(公告)号: | CN103729241A | 公开(公告)日: | 2014-04-16 |
发明(设计)人: | 廖小飞;金海;毕建民 | 申请(专利权)人: | 华中科技大学 |
主分类号: | G06F9/46 | 分类号: | G06F9/46;G06F9/45 |
代理公司: | 华中科技大学专利中心 42201 | 代理人: | 朱仁玲 |
地址: | 430074 湖北*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 多核 环境 openmp 任务 并行 优化 方法 | ||
技术领域
本发明属于计算机并行编程模型领域,更具体地,涉及一种多核环境下OpenMP任务并行的优化方法。
背景技术
由于功耗等方面的限制,仅仅通过提高主频来获取免费午餐的时代已经过去,多核技术已经成为时代的主流,但同时也提高了编写程序的难度,于是一些并行编程模型被广泛使用,OpenMP便是其中重要一员。
OpenMP原先主要用于处理以大数组为基础的比较规则的并行应用,但随着实际中应用的越来越复杂,非规则并行应用越来越多,如链表、树及图方面的一些应用以及一些递归应用,为此OpenMP3.0引入了“任务并行”,这是一种以任务为中心而非以线程为中心的并行程序编程方式,程序员可以使用并行任务编译指导语句“#pragma omp task”来表示这是一个可并行任务。任务并行已经广泛使用于Cilk,Cilk++,Intel TBB,Intel Cilk Plus,X10,Microsoft TPL等之中。任务并行编程模型属于细粒度并行,用户只需把应用程序划分出大量细粒度任务,以后如何执行则交给运行时决定。
对于细粒度任务并行程序,控制好任务粒度至关重要。任务粒度问题简而言之就是决定程序员描述的一个可并行任务在运行时具体应该并行地执行还是应该串行地执行。因为若都并行地执行会创建过多的细粒度并行任务,产生大量的任务创建开销;但如果只创建少量的粒度并行任务,容易导致造成负载不平衡。合适的任务粒度是在保持并行度的情况下尽量降低任务创建的开销。
控制好任务粒度虽然十分重要,但却是一件是十分困难的事情。一些程序在输入不同的情况下其合适的粒度便不同,另外对于一些不规则的程序,它在何时会产生并行任务、产生多少并行任务以及并行任务的计算量等都是很难预测的,因此很难决定一个任务是否应该被创建为并行任务。目前GCC并没有在OpenMP运行时库中帮助程序员自动地控制任务粒度,这便加重了程序员的负担,对于非规则的程序,程序员手动控制的难度很大,过大或过小都会严重降低程序的性能。目前在其他任务并行编程模型上有一些控制任务粒度的研究,一些研究采用手动剪枝(cut-off)的策略,但只可以由并行任务转串行执行,却不能由串行执行转并行任务。也有自适应的方法,但各自存在一些问题,如只适合于二叉树的应用,不适合于多叉树;并未达到完全的自适应,并行和串行最多只能切换两次,容易出现负载不均衡;不适合于OpenMP等问题。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种多核环境下OpenMP任务并行的优化方法,其目的在于,帮助程序员自适应的控制好任务粒度,实时创建合适数量的并行任务,保持负载平衡的同时降低系统开销,限制了细粒度任务的创建,节省不必要的内存分配,并且适合OpenMP的特性,减轻了程序员的负担。
为实现上述目的,按照本发明的一个方面,提供了一种多核环境下OpenMP任务并行的优化方法,包括以下步骤:
(1)初始化总线程数等于CPU核的数量,剪枝深度cut_off_depth和阈值深度threshold_depth为0,并将用于标识所有线程的状态位flag设置为0;
(2)主线程接收并行任务编译指导语句,以帮助优先的执行策略执行该并行任务编译指导语句,以生成并行任务,并将该并行任务放入该线程的并行任务队列的尾部;
(3)主线程判断任务队列中的并行任务总和是否达到总线程数的N倍,其中N为正整数,若达到则进入步骤(4),否则返回步骤(2);
(4)主线程将剪枝深度cut_off_depth设置为当前线程执行的并行任务的深度,并设置阈值深度threshold_depth=2*cut_off_depth;
(5)当前线程采用串行化执行策略执行并行任务编译指导语句,此时不生成并行任务;
(6)判断是否所有任务都已完成,若是则过程结束,否则转入步骤(7);
(7)当前线程判断是否接收到并行任务编译指导语句,若接收到则转入步骤(8),否则返回步骤(5);
(8)当前线程判断状态位flag是否为0,若是则转入步骤(9),否则表示存在有线程处于空闲状态且窃取不到并行任务,然后转入步骤(11);
(9)当前线程判断其执行的并行任务的深度total_depth是否大于阈值深度threshold_depth,若大于则返回步骤(5),否则进入步骤(10);
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华中科技大学,未经华中科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310680110.2/2.html,转载请声明来源钻瓜专利网。
- 上一篇:具有去偶焦化区和汽提区的流化床焦化方法
- 下一篇:紧凑型摄像模组