CN103699363A - 一种用于在多核平台下优化关键临界区的方法 - Google Patents
一种用于在多核平台下优化关键临界区的方法 Download PDFInfo
- Publication number
- CN103699363A CN103699363A CN201310681619.9A CN201310681619A CN103699363A CN 103699363 A CN103699363 A CN 103699363A CN 201310681619 A CN201310681619 A CN 201310681619A CN 103699363 A CN103699363 A CN 103699363A
- Authority
- CN
- China
- Prior art keywords
- lock
- worker thread
- parallel
- task queue
- task
- 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
Links
Images
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种用于在多核平台下优化关键临界区的方法,包括:工作线程在主程序入口创建全局锁信息管理列表,用于存储锁和其对应的任务队列之间的关联关系,工作线程接收并执行并行任务,根据并行任务对锁发出加锁请求,并判断加锁是否成功,如果成功则工作线程在内存中为新的任务队列分配空间,以获取该任务队列的起始地址,工作线程将锁与获取的任务队列的起始地址之间的关联关系存储在全局锁信息管理列表中,工作线程在全局锁信息管理列表中存储该新的任务队列初始化完毕的信息,工作线程进入临界区执行并行任务,并判断执行并行任务期间是否有新的并行子任务生成。本发明能够解决现有多核平台下临界区过大导致程序性能降低的技术问题。
Description
技术领域
本发明属于计算机系统多核环境下的多线程编程技术领域,更具体地,涉及一种用于在多核平台下优化关键临界区的方法。
背景技术
受功耗、性能等诸多因素的影响,人们目前几乎已经不再具备建造更大更快的单核处理器的能力。现在处理器制造厂商纷纷采用片上多处理器(Chip multiprocessor,简称CMP)结构,并成功地推出了各自的多核(Multi-core)产品,有些厂商甚至还开发出了众核(Many-core)芯片的原型。商业上的成功不仅证明这种结构是完全可行的,也向人们展示了它的巨大发展潜力,即完全可以在单个芯片内集成数量更多的处理器内核,实现性能更加强大的众核处理器。为了适应核数更多的处理器,主流并行编程框架的运行时系统不会为每个新生成的子任务额外开启一个线程,而是由若干个工作线程来调度及执行子任务。
虽然众核多核体系结构能提供更多更丰富的计算资源,并且主流并行编程框架也愈发完善;但资源竞争会带来额外的开销(例如任务切换开销,CPU饥饿,串行化问题),这对众核计算带来了巨大的影响,让系统效率直线下降直至弱于串行执行的效率。特别当核数众多的时候,资源竞争会带来更大的性能损失。在众多资源竞争场景中,关键临界区过大是其中一个比较典型且危害巨大的问题,它会使大量CPU陷入空转,导致计算资源的浪费。
以下就一个典型的应用场景来详细说明关键临界区过大在现有的主流并行编程框架下对并行程序效率的危害:并行哈希表结构在众多场合下被广泛使用,如互联网中一些信息拥有较多读取次数和较少的修改次数(例:记录当前在线用户ID),那么这些数据需要在服务器上使用哈希表进行缓存。并行哈希表提供一系列指向哈希桶的并行指针;单个桶内由链表连接,单个链表内有对应互斥锁保护;整个并行哈希表需要随时扩容,所以有一个读写锁保护。当我们有多个任务同时向一个并行哈希表中插入数据时,需对相应桶上锁并获取整个哈希表的读锁。当插入导致桶溢出时,自动增加表的全局溢出计数器。当超过一定数量的桶溢出时,该插入操作将引起一次扩容(resize)操作。扩容操作获取整个哈希表的写锁,并申请扩大哈希表空间、增加Hash桶的数目,之后重新将旧数据映射到新的哈希表空间内,这个重新映射的过程可以并行化,会产生可并行子任务。而此时,其他的插入操作任务由于获取不到整个表的读锁已被暂停,这导致承载任务的相应工作线程被暂停,无法帮助执行重新映射过程中的可并行子任务。此时便产生了CPU饥饿问题,实验中使用OpenMP框架验证该CPU饥饿问题,如图1所示:有8个工作线程,8个并行任务同时往一个并行哈希表中插入随机数据,在25秒时刻左右及45秒时刻左右都产生了严重的CPU饥饿问题,即有可并行子任务,但却只有一个CPU在进行计算,其余CPU都空闲。发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种用于在多核平台下优化关键临界区的方法,其目的在于,解决现有多核平台下临界区过大导致程序性能降低的技术问题。
为实现上述目的,按照本发明的一个方面,提供了一种用于在多核平台下优化关键临界区的方法,包括以下步骤:
(1)工作线程在主程序入口创建全局锁信息管理列表,用于存储锁和其对应的任务队列之间的关联关系;
(2)工作线程接收并执行并行任务,根据并行任务对锁发出加锁请求,并判断加锁是否成功,如果成功则转入步骤(3),如果失败则转入步骤(10);
(3)工作线程在内存中为新的任务队列分配空间,以获取该任务队列的起始地址;
(4)工作线程将锁与步骤(3)中获取的任务队列的起始地址之间的关联关系存储在全局锁信息管理列表中;
(5)工作线程在全局锁信息管理列表中存储该新的任务队列初始化完毕的信息;
(6)工作线程进入临界区执行并行任务,并判断执行并行任务期间是否有新的并行子任务生成,如果有则转入步骤(7),否则过程结束;
(7)工作线程查询全局锁信息管理列表,并将新的并行子任务存储在锁关联的任务队列中;
(8)工作线程判断是否所有的并行子任务均已生成完毕,如果是则转入步骤(9),否则返回步骤(6);
(9)工作线程依次从锁关联的任务队列中获取并行子任务并执行该并行子任务,直至所有并行子任务都处理完毕为止,然后过程结束;
(10)工作线程查询全局锁信息管理列表,以判断锁是否与获取的任务队列的起始地址之间存在关联关系,若存储有,则转入步骤(11),否则工作线程暂停工作0.5秒至1秒后,重复步骤(10);
(11)工作线程查询锁关联的任务队列,并判断该任务队列是否不为空,若不为空则转入步骤(12),否则过程结束;
(12)工作线程依次从锁关联的任务队列中获取并行子任务并执行该并行子任务,直至所有并行子任务都处理完毕为止,然后过程结束。
优选地,步骤(2)具体为,如果加锁失败,则工作线程接收到非零的随机整数值,如果加锁成功,则工作线程接收到为零的整数。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
1、本发明提出了一种并行程序的调度流程,即当临界区过大时,工作线程不暂停等待,而是协助执行大型临界区,因此能够解决临界区过大导致并行程序性能降低的问题;
2、本发明由于增加额外的任务队列来对任务进行调度,不改变并行编程模型原有的队列,因此可适用于大部分的并行编程模型;
3、本发明由于将复杂的逻辑封装起来,应用时只需链接基于本发明的动态链接库,并简单修改自己的源代码就可以处理临界区过大导致并行程序效率降低这一类问题,因此对程序员负担较小。
附图说明
图1是现有技术中由于临界区过大引起的CPU饥饿的示意图。
图2是本发明用于在多核平台下优化关键临界区的方法的流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
以下首先对本发明的术语进行解释和说明:
锁:在多线程执行的并行程序中保护临界区的同步原语,即在锁的保护下,同时最多只有一个工作线程执行临界区内的代码段。
如图2所示,本发明用于在多核平台下优化关键临界区的方法包括以下步骤:
(1)工作线程在主程序入口创建全局锁信息管理列表,用于存储锁和其对应的任务队列之间的关联关系;
(2)工作线程接收并执行并行任务,根据并行任务对锁发出加锁请求,并判断加锁是否成功,如果成功则转入步骤(3),如果失败则转入步骤(10);具体而言,如果加锁失败,则工作线程接收到非零的随机整数值,如果加锁成功,则工作线程接收到为零的整数;需要注意的是,本发明的应用场景是在多个线程的情况下的并行处理过程,在当前的工作线程加锁成功时,其它的工作线程均加锁失败;
(3)工作线程在内存中为新的任务队列分配空间,以获取该任务队列的起始地址;
(4)工作线程将锁与步骤(3)中获取的任务队列的起始地址之间的关联关系存储在全局锁信息管理列表中;具体而言,使用哈希表数据结构存储关联关系。
本步骤的优点在于,将锁与关联任务队列全局统一管理,便于查询;使用哈希表存储关联关系能提高查询效率。
(5)工作线程在全局锁信息管理列表中存储该新的任务队列初始化完毕的信息;
本步骤的优点在于,存储初始化完毕信息,便于其他工作线程判断当前任务队列的状态。
(6)工作线程进入临界区执行并行任务,并判断执行并行任务期间是否有新的并行子任务生成,如果有则转入步骤(7),否则过程结束;
(7)工作线程查询全局锁信息管理列表,并将新的并行子任务存储在锁关联的任务队列中;
(8)工作线程判断是否所有的并行子任务均已生成完毕,如果是则转入步骤(9),否则返回步骤(6);
(9)工作线程依次从锁关联的任务队列中获取并行子任务并执行该并行子任务,直至所有并行子任务都处理完毕为止,然后过程结束;
(10)工作线程查询全局锁信息管理列表,以判断是否存储有新的任务队列初始化完毕的信息,即锁是否与获取的任务队列的起始地址之间存在关联关系,若存储有,则转入步骤(11),否则工作线程暂停工作0.5秒至1秒后,重复步骤(10);
(11)工作线程查询锁关联的任务队列,并判断该任务队列是否不为空,若不为空则转入步骤(12),否则过程结束;
(12)工作线程依次从锁关联的任务队列中获取并行子任务并执行该并行子任务,直至所有并行子任务都处理完毕为止,然后过程结束。
本步骤的优点在于,工作线程不等待,而是协助执行大型临界区内的并行子任务,因此可提高CPU使用率,充分发挥多核平台的计算能力。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (2)
1.一种用于在多核平台下优化关键临界区的方法,其特征在于,包括以下步骤:
(1)工作线程在主程序入口创建全局锁信息管理列表,用于存储锁和其对应的任务队列之间的关联关系;
(2)工作线程接收并执行并行任务,根据并行任务对锁发出加锁请求,并判断加锁是否成功,如果成功则转入步骤(3),如果失败则转入步骤(10);
(3)工作线程在内存中为新的任务队列分配空间,以获取该任务队列的起始地址;
(4)工作线程将锁与步骤(3)中获取的任务队列的起始地址之间的关联关系存储在全局锁信息管理列表中;
(5)工作线程在全局锁信息管理列表中存储该新的任务队列初始化完毕的信息;
(6)工作线程进入临界区执行并行任务,并判断执行并行任务期间是否有新的并行子任务生成,如果有则转入步骤(7),否则过程结束;
(7)工作线程查询全局锁信息管理列表,并将新的并行子任务存储在锁关联的任务队列中;
(8)工作线程判断是否所有的并行子任务均已生成完毕,如果是则转入步骤(9),否则返回步骤(6);
(9)工作线程依次从锁关联的任务队列中获取并行子任务并执行该并行子任务,直至所有并行子任务都处理完毕为止,然后过程结束;
(10)工作线程查询全局锁信息管理列表,以判断锁是否与获取的任务队列的起始地址之间存在关联关系,若存储有,则转入步骤(11),否则工作线程暂停工作0.5秒至1秒后,重复步骤(10);
(11)工作线程查询锁关联的任务队列,并判断该任务队列是否不为空,若不为空则转入步骤(12),否则过程结束;
(12)工作线程依次从锁关联的任务队列中获取并行子任务并执行该并行子任务,直至所有并行子任务都处理完毕为止,然后过程结束。
2.根据权利要求1所述的方法,其特征在于,步骤(2)具体为,如果加锁失败,则工作线程接收到非零的随机整数值,如果加锁成功,则工作线程接收到为零的整数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310681619.9A CN103699363A (zh) | 2013-12-13 | 2013-12-13 | 一种用于在多核平台下优化关键临界区的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310681619.9A CN103699363A (zh) | 2013-12-13 | 2013-12-13 | 一种用于在多核平台下优化关键临界区的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103699363A true CN103699363A (zh) | 2014-04-02 |
Family
ID=50360903
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310681619.9A Pending CN103699363A (zh) | 2013-12-13 | 2013-12-13 | 一种用于在多核平台下优化关键临界区的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103699363A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108762942A (zh) * | 2018-04-12 | 2018-11-06 | 武汉斗鱼网络科技有限公司 | 多线程访问方法及装置 |
CN110188110A (zh) * | 2019-05-30 | 2019-08-30 | 深圳前海微众银行股份有限公司 | 一种构建分布式锁的方法及装置 |
CN111158890A (zh) * | 2020-01-20 | 2020-05-15 | 北京一流科技有限公司 | 控制任务集中的任务并行的系统及其方法 |
CN112654092A (zh) * | 2019-10-09 | 2021-04-13 | 中盈优创资讯科技有限公司 | 资源调度方法、装置及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1670705A (zh) * | 2004-03-16 | 2005-09-21 | 联想(北京)有限公司 | 一种对机群实现集中并发管理的方法 |
US7302686B2 (en) * | 2001-07-04 | 2007-11-27 | Sony Corporation | Task management system |
CN103365726A (zh) * | 2013-07-08 | 2013-10-23 | 华中科技大学 | 一种面向gpu集群的资源管理方法和系统 |
-
2013
- 2013-12-13 CN CN201310681619.9A patent/CN103699363A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7302686B2 (en) * | 2001-07-04 | 2007-11-27 | Sony Corporation | Task management system |
CN1670705A (zh) * | 2004-03-16 | 2005-09-21 | 联想(北京)有限公司 | 一种对机群实现集中并发管理的方法 |
CN1315045C (zh) * | 2004-03-16 | 2007-05-09 | 联想(北京)有限公司 | 一种对机群实现集中并发管理的方法 |
CN103365726A (zh) * | 2013-07-08 | 2013-10-23 | 华中科技大学 | 一种面向gpu集群的资源管理方法和系统 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108762942A (zh) * | 2018-04-12 | 2018-11-06 | 武汉斗鱼网络科技有限公司 | 多线程访问方法及装置 |
CN108762942B (zh) * | 2018-04-12 | 2020-10-16 | 武汉斗鱼网络科技有限公司 | 多线程访问方法及装置 |
CN110188110A (zh) * | 2019-05-30 | 2019-08-30 | 深圳前海微众银行股份有限公司 | 一种构建分布式锁的方法及装置 |
CN110188110B (zh) * | 2019-05-30 | 2024-05-07 | 深圳前海微众银行股份有限公司 | 一种构建分布式锁的方法及装置 |
CN112654092A (zh) * | 2019-10-09 | 2021-04-13 | 中盈优创资讯科技有限公司 | 资源调度方法、装置及系统 |
CN112654092B (zh) * | 2019-10-09 | 2023-05-30 | 中盈优创资讯科技有限公司 | 资源调度方法、装置及系统 |
CN111158890A (zh) * | 2020-01-20 | 2020-05-15 | 北京一流科技有限公司 | 控制任务集中的任务并行的系统及其方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8954986B2 (en) | Systems and methods for data-parallel processing | |
Gupta et al. | A study of persistent threads style GPU programming for GPGPU workloads | |
Willhalm et al. | Putting intel® threading building blocks to work | |
McPeak et al. | Scalable and incremental software bug detection | |
Mukherjee et al. | A comprehensive performance analysis of HSA and OpenCL 2.0 | |
CN113205417B (zh) | 一种面向联盟链的交易并行处理方法及系统 | |
US10318261B2 (en) | Execution of complex recursive algorithms | |
KR20200014378A (ko) | 직무 관리 | |
Tagliavini et al. | Unleashing fine-grained parallelism on embedded many-core accelerators with lightweight OpenMP tasking | |
Pienaar et al. | Automatic generation of software pipelines for heterogeneous parallel systems | |
Wu et al. | GPU accelerated counterexample generation in LTL model checking | |
Barnat et al. | Scalable shared memory LTL model checking | |
CN103699363A (zh) | 一种用于在多核平台下优化关键临界区的方法 | |
Sbîrlea et al. | Bounded memory scheduling of dynamic task graphs | |
WO2018076979A1 (zh) | 一种指令间数据依赖的检测方法和装置 | |
Holey | Enhancing GPU programmability and correctness through transactional execution | |
Rubini et al. | Scheduling analysis from architectural models of embedded multi-processor systems | |
Du et al. | Feature-aware task scheduling on CPU-FPGA heterogeneous platforms | |
Zheng et al. | HiWayLib: A software framework for enabling high performance communications for heterogeneous pipeline computations | |
Vrba et al. | Kahn process networks are a flexible alternative to MapReduce | |
Dubrulle et al. | A low-overhead dedicated execution support for stream applications on shared-memory CMP | |
Lin et al. | VERTAF/Multi-Core: A SysML-based application framework for multi-core embedded software development | |
Anderson et al. | A dynamic execution model applied to distributed collision detection | |
Lázaro-Muñoz et al. | A tasks reordering model to reduce transfers overhead on GPUs | |
Dalmia et al. | Improving the Scalability of GPU Synchronization Primitives |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20140402 |