发明名称 一种多核环境下OpenMP任务并行的优化方法
摘要 本发明公开了一种多核环境下OpenMP任务并行的优化方法,主要是通过自适应任务粒度控制的方式帮助程序员控制好任务粒度,来优化任务并行,任务粒度是影响细粒度任务并行程序性能的一个重要因素。自适应任务粒度控制包括:1)帮助优先与串行化执行的自适应选取;2)限制细粒度任务的创建。在需要并行任务时采用帮助优先策略,任务数足够时采用串行化执行策略。设置了可以自动调节大小的阈值深度,用来限制细粒度任务的创建,若任务的深度大于阈值深度,则串行化执行。本发明能够自适应地控制好任务粒度,性能上和程序员手动控制的结果相接近,通过自适应的方式减轻了程序员的负担,并且还能节省内存。
申请公布号 CN103729241B 申请公布日期 2016.08.31
申请号 CN201310680110.2 申请日期 2013.12.12
申请人 华中科技大学 发明人 廖小飞;金海;毕建民
分类号 G06F9/46(2006.01)I;G06F9/45(2006.01)I 主分类号 G06F9/46(2006.01)I
代理机构 华中科技大学专利中心 42201 代理人 朱仁玲
主权项 一种多核环境下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);(10)当前线程判断其并行任务队列中的并行任务是否为空,或者所有线程的并行任务队列中的并行任务总数是否小于总线程数,如果是,则转入步骤(12),否则返回步骤(5);(11)当前线程设置threshold_depth=threshold_depth+cut_off_depth,flag=0;(12)当前线程采用帮助优先的执行策略执行并行任务编译指导语句,以生成新的并行任务;(13)当前线程在接收到并行任务编译指导语句时,判断其执行的并行任务的临时深度是否大于剪枝深度cut_off_depth,若是则返回步骤(5),否则返回步骤(12);其中任务的临时深度是指为任务添加的一个属性,当由串行化执行策略转换到帮助优先执行策略时便会设置为0,在循环采用帮助优先执行策略时会随着任务深度的增加而增加。
地址 430074 湖北省武汉市洪山区珞喻路1037号