CN110764780A - 一种缺省的OpenMP调度策略 - Google Patents

一种缺省的OpenMP调度策略 Download PDF

Info

Publication number
CN110764780A
CN110764780A CN201911023516.7A CN201911023516A CN110764780A CN 110764780 A CN110764780 A CN 110764780A CN 201911023516 A CN201911023516 A CN 201911023516A CN 110764780 A CN110764780 A CN 110764780A
Authority
CN
China
Prior art keywords
iteration
scheduling
loop
divided
block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201911023516.7A
Other languages
English (en)
Inventor
庞建民
聂凯
徐金龙
何亚茹
许瑾晨
李雁冰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Information Engineering University of PLA Strategic Support Force
Original Assignee
Information Engineering University of PLA Strategic Support Force
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Information Engineering University of PLA Strategic Support Force filed Critical Information Engineering University of PLA Strategic Support Force
Priority to CN201911023516.7A priority Critical patent/CN110764780A/zh
Publication of CN110764780A publication Critical patent/CN110764780A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明提供一种缺省的OpenMP调度策略。该调度策略包括:将整个循环程序分为前半部分循环迭代和后半部分循环迭代;针对前半部分循环迭代,采用预设的静态调度策略执行迭代;针对后半部分循环迭代,采用预设的动态调度策略执行迭代。本发明通过前半部分循环迭代的静态调度策略,以获得相对于动态调度较小的调度开销的优势;通过后半部分循环迭代的动态调度策略,可以弥补静态调度策略不够灵活导致负载不均的缺点;因此,对于没有指定调度方式的OpenMP程序,本发明既能够在改善程序的负载均衡同时有效降低调度导致的其他开销,进一步改善OpenMP程序线程级并行性能,扩大了其适应性,对高性能计算程序自动并行领域的发展具有重要的现实意义。

Description

一种缺省的OpenMP调度策略
技术领域
本发明涉及多核处理器的OpenMP编程模型技术领域,尤其涉及一种缺省的OpenMP调度策略。
背景技术
OpenMP是适合于共享存储体系结构的多处理器线程级并行编程规范,一般面向循环结构的并行化。在并行处理的过程中,调度策略直接影响着系统资源的利用率和并行效率,而负载均衡和调度开销是对OpenMP的调度策略进行评测两个最重要的方面。为了实现较好的负载平衡而取得最优的性能,就必须对循环进行调度与分块,保证每个处理器尽可能地处于忙碌状态,同时将调度开销、上下文切换开销和同步开销降到最低。
OpenMP标准支持静态调度、动态调度、指数调度和运行时调度四种调度方式。静态调度是指将循环迭代空间划分成相等大小的子块。当循环迭代次数不能整除线程数与子块大小的乘积时,尽可能地划分成相等大小的子块。动态调度也是将循环迭代空间划分为相等大小的子块,与静态调度不同,动态调度不是按顺序将各个子块分配到相应的处理器上,而是在程序执行过程中,某个处理器完成一个子块后,动态申请下一个子块并执行。指数调度是指将循环迭代空间划分为子块,块的大小与剩余未执行的迭代次数除以处理器个数的商成比例,并按动态调度的调度方法调度各个子块的执行。运行时调度是指在程序运行时,通过环境变量指定其余3种调度中的一种。
3种调度方式中,静态调度具有最小的调度开销,而动态调度具有最大的灵活性。指数调度可以视作二者在平衡调度开销和负载均衡上的折中,但是对于递减型循环,随着调度进行,单次循环迭代的工作量逐渐减小,若使用指数调度,则线程分配到的调度块也逐渐减小,两者之间的这种正相关关系将导致后面的线程分担的计算量急剧下降,从而造成严重的负载不均。
刘胜飞等人在“一种改进的OpenMP指导调度策略研究[J].计算机研究与发展,2010,47(4):687-694”提出一种将静态调度和指数调度相结合的调度方法,解决了指数调度在递减循环结构中由于开始循环块过大而可能导致的负载不均衡的问题。但是,该调度策略很难做到负载均衡的同时保证所有开销降到最低。
发明内容
针对现有调度方案很难做到负载均衡的同时保证所有开销降到最低的问题,本发明提供一种缺省的OpenMP调度策略,将静态调度和动态调度相结合,对于没有指定调度方式的OpenMP程序,既能够在改善程序的负载均衡的同时有效降低调度导致的其他开销。
本发明提供一种缺省的OpenMP调度策略,包括:
将整个循环程序分为前半部分循环迭代和后半部分循环迭代;
针对前半部分循环迭代,采用预设的静态调度策略执行迭代;
针对后半部分循环迭代,采用预设的动态调度策略执行迭代。
进一步地,所述预设的静态调度策略具体为:
若省略调度参数k,则将迭代空间划分为基本相等的P个子块,令
Figure BDA0002247963690000021
m=N1/P,n=N1%P,则所有处理器中,前n个处理器需要处理的块大小为m+1,后P-n个处理器需要处理的块大小为m;若未省略调度参数k,则将迭代空间划分为
Figure BDA0002247963690000022
个块,当i<Nc–1时,
Figure BDA0002247963690000023
当i=Nc–1时,
按块的序号将每个块映射到相应的处理器上,处理器执行迭代;
其中,N表示整个循环程序中总的循环迭代次数;N1表示前半部分循环的迭代次数;P表示运行时的线程或者处理器数目;Nc表示迭代空间被划分的块数目;
Figure BDA0002247963690000025
表示迭代空间被划分的块大小,i表示块的序号。
进一步地,所述预设的动态调度策略为:
若未省略调度参数k,将迭代空间划分为
Figure BDA0002247963690000026
个子块,当i<Nc–1时,
Figure BDA0002247963690000027
当i=Nc–1时,
Figure BDA0002247963690000028
若省略调度参数k,则默认k=1,仍按照未省略调度参数k的迭代空间的划分方式进行划分;
处理器执行完当前子块后,动态申请执行下一个子块;
其中,N2表示后半部分循环的迭代次数;Nc表示迭代空间被划分的块数目;
Figure BDA0002247963690000031
表示迭代空间被划分的块大小,i表示块的序号。
本发明的有益效果:
本发明提供的一种缺省的OpenMP调度策略,依据静态调度策略的实现原理,静态调度有利于调度开销,能够尽可能地降低当多个处理器同时访问同一片存储区域时发生访存冲突的概率,提高Cache的使用效率;依据动态调度策略的实现原理,能够较好的将大小不同的循环体均衡的分配到各个线程上去,因此能够获得较好的负载均衡性,同时,动态调度具有最大的灵活性,而且动态调度单次调度开销相对指导调度小,这在一定程度上也减少了调度开销。本发明通过前半部分循环迭代的静态调度策略,以获得相对于动态调度较小的调度开销的优势;通过后半部分循环迭代的动态调度策略,可以弥补静态调度策略不够灵活导致负载不均的缺点;因此,对于没有指定调度方式的OpenMP程序,本发明既能够在改善程序的负载均衡同时有效降低调度导致的其他开销,进一步改善OpenMP程序线程级并行性能,扩大了其适应性,对高性能计算程序自动并行领域的发展具有重要的现实意义。
附图说明
图1为本发明实施例提供的一种缺省的OpenMP调度策略的实现框架示意图;
图2为本发明实施例提供的一种缺省的OpenMP调度策略的流程示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例提供的一种缺省的OpenMP调度策略的实现框架示意图。即在实施本发明提供的缺省的调度策略之前,需要对现有的编译器的数据结构和原有的动态调度策略的初始化函数进行修改,具体如下:
首先,预先在支持OpenMP规范提供的静态调度、动态调度、指数调度等调度策略的编译器(例如OMPi编译器)中重新定义或者修改原有保存循环执行时状态的数据结构,添加布尔变量part_one和整型变量one_chunksize。其中,part_one为true表示当前迭代块属于前半部分循环迭代,采用静态调度,反之属于后半部分循环迭代,采用动态调度;one_chunksize表示前半部分采用静态调度时每个线程执行的迭代块大小,可以通过前半部分循环的迭代次数N1除以线程数P得到。
然后,在支持OpenMP规范提供的静态调度、动态调度、指数调度等调度策略的编译器(例如OMPi编译器)中修改相应的动态调度策略的初始化函数,添加判断条件用来判断采用静态调度还是动态调度,初始化前半部分循环静态调度的迭代块大小(one_chunksize)等。
最后,在支持OpenMP规范提供的静态调度、动态调度、指数调度等调度策略的编译器(例如OMPi编译器)中定义或者修改了数据结构,同时修改了相关的初始化函数之后,重新编译调试生成新的编译器,该新的编译器可执行如图2所示的缺省的调度策略。
如图2所示,本发明实施例提供一种缺省的OpenMP调度策略,包括以下步骤:
S201:将整个循环程序分为前半部分循环迭代和后半部分循环迭代;
S202:针对前半部分循环迭代,采用预设的静态调度策略执行迭代;针对后半部分循环迭代,采用预设的动态调度策略执行迭代。
因为在实际的科学计算程序中,一个大的计算循环往往是前面计算的数据比较小,后面计算的数据越来越大,这样就导致负载不均衡往往出现在循环迭代的后面,因此本发明实施例中,前半部分循环迭代采用静态调度策略而后半部分迭代采用动态调度策略。
本发明实施例提供的一种缺省的OpenMP调度策略,依据静态调度策略的实现原理,静态调度有利于调度开销,能够尽可能地降低当多个处理器同时访问同一片存储区域时发生访存冲突的概率,提高Cache的使用效率;依据动态调度策略的实现原理,能够较好的将大小不同的循环体均衡的分配到各个线程上去,因此能够获得较好的负载均衡性,同时,动态调度具有最大的灵活性,而且动态调度单次调度开销相对指导调度小,这在一定程度上也减少了调度开销。本发明通过前半部分循环迭代的静态调度策略,以获得相对于动态调度较小的调度开销的优势;通过后半部分循环迭代的动态调度策略,可以弥补静态调度策略不够灵活导致负载不均的缺点;因此,对于没有指定调度方式的OpenMP程序,本发明既能够在改善程序的负载均衡同时有效降低调度导致的其他开销,进一步改善OpenMP程序线程级并行性能,扩大了其适应性,对高性能计算程序自动并行领域的发展具有重要的现实意义。
在上述实施例的基础上,本发明实施例提供一种具体的静态调度策略,具体为:
若省略调度参数k,则将循环空间划分为基本相等的P个块,令
Figure BDA0002247963690000051
m=N1/P,n=N1%P,则所有处理器中,前n个处理器需要处理的块大小为m+1,后P-n个处理器需要处理的块大小为m;
若未省略调度参数k,则将循环迭代空间划分为个块,当i<Nc–1时,
Figure BDA0002247963690000053
当i=Nc–1时,
Figure BDA0002247963690000054
其中,N表示整个循环程序中总的循环迭代次数;N1表示前半部分循环的迭代次数;P表示运行时的线程或者处理器数目;Nc表示迭代空间被划分的块数目;表示迭代空间被划分的块大小,i表示块的序号。
具体地,按照是否省略调度参数k,本发明实施例提供的静态调度策略包括两种迭代空间划分方式,即两种计算迭代上下界的方式。静态调度的调度规则是将迭代空间划分为k大小的子块,并按次序将每个块映射到相应的处理器上执行。由于调度顺序确定,每个处理器可以在初始化的时候根据N1和P的值确定所有需要自己执行的迭代,当N1能被P整除时,最后一轮调度时没有处理器空闲;当N1整除P余1时,最后一轮调度只有1个处理器参与;当N1不能被P整除且余数大于1时,最后一轮调度有多个处理器参与,且有处理器空闲。
在上述各实施例的基础上,本发明实施例提供一种具体动态调度策略,具体为:
若未省略调度参数k,将迭代空间划分为
Figure BDA0002247963690000056
个子块,当i<Nc–1时,
Figure BDA0002247963690000057
当i=Nc–1时,
Figure BDA0002247963690000058
若省略调度参数k,则默认k=1,仍按照未省略调度参数k的迭代空间的划分方式进行划分;
处理器执行完当前子块后,动态申请执行下一个子块;
其中,N2表示后半部分循环的迭代次数;Nc表示迭代空间被划分的块数目;
Figure BDA0002247963690000061
表示迭代空间被划分的块大小,i表示块的序号。
具体地,无论是否省略调度参数,本发明实施例提供的动态调度策略包括一种迭代空间的划分方式,只是在省略调度参数k时,默认k=1。
此外,动态调度过程中,最初可随机将子块分配到各处理器上;随后,各处理器执行完当前子块后动态申请下一子块。
需要说明的是,在最后一个子块执行完时,每个处理器还需要计算一次新的上下界并判断是否已经超出所需计算的迭代空间,若是,则表示此时调度过程完成。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (3)

1.一种缺省的OpenMP调度策略,其特征在于,包括:
将整个循环程序分为前半部分循环迭代和后半部分循环迭代;
针对前半部分循环迭代,采用预设的静态调度策略执行迭代;
针对后半部分循环迭代,采用预设的动态调度策略执行迭代。
2.根据权利要求1所述的方法,其特征在于,所述预设的静态调度策略具体为:
若省略调度参数k,则将迭代空间划分为基本相等的P个子块,令m=N1/P,n=N1%P,则所有处理器中,前n个处理器需要处理的块大小为m+1,后P-n个处理器需要处理的块大小为m;若未省略调度参数k,则将迭代空间划分为
Figure FDA0002247963680000012
个块,当i<Nc–1时,当i=Nc–1时,
Figure FDA0002247963680000014
按块的序号将每个块映射到相应的处理器上,处理器执行迭代;
其中,N表示整个循环程序中总的循环迭代次数;N1表示前半部分循环的迭代次数;P表示运行时的线程或者处理器数目;Nc表示迭代空间被划分的块数目;
Figure FDA0002247963680000015
表示迭代空间被划分的块大小,i表示块的序号。
3.根据权利要求1所述的方法,其特征在于,所述预设的动态调度策略为:
若未省略调度参数k,将迭代空间划分为
Figure FDA0002247963680000016
个子块,当i<Nc–1时,
Figure FDA0002247963680000017
当i=Nc–1时,
Figure FDA0002247963680000018
若省略调度参数k,则默认k=1,仍按照未省略调度参数k的迭代空间的划分方式进行划分;
处理器执行完当前子块后,动态申请执行下一个子块;
其中,N2表示后半部分循环的迭代次数;Nc表示迭代空间被划分的块数目;
Figure FDA0002247963680000019
表示迭代空间被划分的块大小,i表示块的序号。
CN201911023516.7A 2019-10-25 2019-10-25 一种缺省的OpenMP调度策略 Pending CN110764780A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911023516.7A CN110764780A (zh) 2019-10-25 2019-10-25 一种缺省的OpenMP调度策略

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911023516.7A CN110764780A (zh) 2019-10-25 2019-10-25 一种缺省的OpenMP调度策略

Publications (1)

Publication Number Publication Date
CN110764780A true CN110764780A (zh) 2020-02-07

Family

ID=69333687

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911023516.7A Pending CN110764780A (zh) 2019-10-25 2019-10-25 一种缺省的OpenMP调度策略

Country Status (1)

Country Link
CN (1) CN110764780A (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070094652A1 (en) * 2005-10-21 2007-04-26 Chia Joshua J Lockless scheduling of decreasing chunks of a loop in a parallel program
US20120089970A1 (en) * 2010-10-12 2012-04-12 Cha Byung-Chang Apparatus and method for controlling loop schedule of a parallel program
CN104793922A (zh) * 2015-05-04 2015-07-22 中国科学院软件研究所 一种大整数乘法Comba算法基于OpenMP的并行实现方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070094652A1 (en) * 2005-10-21 2007-04-26 Chia Joshua J Lockless scheduling of decreasing chunks of a loop in a parallel program
US20120089970A1 (en) * 2010-10-12 2012-04-12 Cha Byung-Chang Apparatus and method for controlling loop schedule of a parallel program
CN104793922A (zh) * 2015-05-04 2015-07-22 中国科学院软件研究所 一种大整数乘法Comba算法基于OpenMP的并行实现方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
刘京: "面向Open64的OpenMP相关编译优化技术研究", 《中国优秀硕士学位论文全文数据库信息科技辑》 *
刘胜飞: "OpenMP循环调度算法及SpMV多核并行化研究", 《中国优秀硕士学位论文全文数据库信息科技辑》 *
李颖颖等: "一种面向众核处理器的嵌套循环多维并行识别方法", 《计算机应用研究》 *

Similar Documents

Publication Publication Date Title
US10748237B2 (en) Adaptive scheduling for task assignment among heterogeneous processor cores
Olmedo et al. Dissecting the CUDA scheduling hierarchy: a performance and predictability perspective
Wang et al. Simultaneous multikernel GPU: Multi-tasking throughput processors via fine-grained sharing
CN112306678B (zh) 一种基于异构众核处理器的算法并行处理方法及系统
Bhadauria et al. An approach to resource-aware co-scheduling for CMPs
Wang et al. Simultaneous multikernel: Fine-grained sharing of gpus
Jo et al. Accelerating LINPACK with MPI-OpenCL on clusters of multi-GPU nodes
Liu et al. Supporting soft real-time parallel applications on multicore processors
CN111459647B (zh) 基于嵌入式操作系统的dsp多核处理器并行运算方法及装置
Huzaifa et al. Inter-kernel reuse-aware thread block scheduling
Padoin et al. Managing power demand and load imbalance to save energy on systems with heterogeneous CPU speeds
US9223615B2 (en) Apparatus and method for thread progress tracking
Zhao et al. Insight and reduction of MapReduce stragglers in heterogeneous environment
US8943503B2 (en) Apparatus and method for thread progress tracking using deterministic progress index
Geng et al. A task scheduling algorithm based on multi-core processors
CN110764780A (zh) 一种缺省的OpenMP调度策略
CN111221640B (zh) 一种gpu-cpu协同节能方法
Sandokji et al. A survey of techniques for warp scheduling in GPUs
Zhao et al. Improving mapreduce performance in a heterogeneous cloud: A measurement study
Wang et al. Knowledge-based adaptive self-scheduling
Ben-Itzhak et al. Performance and power aware cmp thread allocation modeling
Liang et al. Register and thread structure optimization for GPUs
Pandey et al. Improving GPGPU Performance Using Efficient Scheduling
CN112148361B (zh) 一种用于处理器加密算法移植的方法及系统
Zhang et al. Reducing inter-task interference delay by optimizing bank-to-core mapping

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20200207