CN101916185B - 多核平台下串行程序运行时的自动并行化加速方法 - Google Patents

多核平台下串行程序运行时的自动并行化加速方法 Download PDF

Info

Publication number
CN101916185B
CN101916185B CN 201010264074 CN201010264074A CN101916185B CN 101916185 B CN101916185 B CN 101916185B CN 201010264074 CN201010264074 CN 201010264074 CN 201010264074 A CN201010264074 A CN 201010264074A CN 101916185 B CN101916185 B CN 101916185B
Authority
CN
China
Prior art keywords
thread
instruction
circulation
acceleration
code
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.)
Active
Application number
CN 201010264074
Other languages
English (en)
Other versions
CN101916185A (zh
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.)
Chongqing Jiaohui Excavation Technology Co.,Ltd.
Original Assignee
Shanghai Jiaotong University
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 Shanghai Jiaotong University filed Critical Shanghai Jiaotong University
Priority to CN 201010264074 priority Critical patent/CN101916185B/zh
Publication of CN101916185A publication Critical patent/CN101916185A/zh
Application granted granted Critical
Publication of CN101916185B publication Critical patent/CN101916185B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

一种计算机技术领域的多核平台下串行程序运行时的自动并行化加速方法,新增可共享读取的程序计数器寄存器组,并在操作系统中建立自动并行加速线程,选择一个线程作为加速的对象,然后实时地分析此线程将要执行到的指令代码,并对其中执行循环的指令代码进行修改,达到使被加速线程自动并行执行的目的。本发明在运行时对程序进行自动并行,不用对现有程序进行预先的处理,整个过程由操作系统完成,对于用户完全透明。本发明能够在有空闲的CPU核时自动利用空闲资源对程序进行并行加速,免去等待预先处理程序的时间,也省去用户手动转换程序的麻烦。

Description

多核平台下串行程序运行时的自动并行化加速方法
技术领域
本发明涉及的是一种计算机技术领域的方法,具体是一种多核平台下串行程序运行时的自动并行化加速方法。
背景技术
二十一世纪以来,随着芯片功耗的不断提升和芯片复杂度的不断提升,通过提升频率等方法来提高单核处理器的性能变得非常困难。单芯片多处理器(Chip Multiprocessor,即CMP)技术成为了新的发展热点。最近几年,使用CMP技术的处理器已经占据了大部分市场,从大型商用机型,到普通桌面机,再到嵌入式系统,无论高端低端,CMP都成为了各领域处理器结构的必然选择。
然而CMP的使用并不是应用驱动的,它的出现主要是为了有效地利用新制造工艺带来的更多的晶体管。由于功耗和验证难度的限制,已经难以通过设计更复杂的单核来提升处理器的性能。与此同时传统的图灵机串行程序模型和串行地址空间结构并没有发生本质改变,原有的大量程序和许多新增的程序依然遵循传统的设计方法,导致串行化的程序并不能很好的利用现在可并行执行的物理结构以提高性能。
现有技术中采用传统的并行程序设计方法重写现有的程序,该方法好像非常简单,但是事实上并不可行。常用的并行化库和编译指令主要有OpenMP(共享存储并行设计的库)和MPI(消息传递并行编程环境)。它们一方面难于掌握:并行程序的设计与调试都比串行程序要困难很多;另一方面也不是特别适用于多核环境。由于编写单个并行程序代价就很高,要想把现有的各种应用程序都重写,实际上是不可能的。
经对现有文献检索发现,中国专利申请号为:200510026587.4,名称为:用户指导的程序半自动并行化方法,该技术提出了一种使用较为简单的模型开发并行化程序,能减小开发并行程序的复杂度。但是,其使用范围有限而且仍然需要大量精力进行重新开发,不能很好地解决大量现有的串行程序的问题。
另外一种方法是对串行程序进行自动分析翻译,生成并行化程序,即线程级推测(ThreadLevel Speculation,即TLS)技术。使用该技术可以使用相应的自动并行化工具,通过对原有串行程序的源代码、中间代码或者二进制代码的分析,自动划分线程,并生成并行化代码。该方法虽然可以不用重写程序,但还是需要对原有的代码进行重新编译,这就要求用户有能力进行代码重新编译或者要求用户更换为已经重新编译的程序,这一要求在一般情况下是不成立的。同时,使用推测技术,虽然在一定程度上提高了并行度,但同时也增加了硬件设计的复杂度,并且在推测级数较多时推测成功率很低。
发明内容
本发明的目的在于克服现有技术的上述不足,提供一种多核平台下串行程序运行时的自动并行化加速方法。本发明新增可共享读取的程序计数器寄存器组,并在操作系统中建立自动并行加速线程,选择一个线程作为加速的对象,然后实时地分析此线程将要执行到的指令代码,并对其中执行循环的指令代码进行修改,达到使被加速线程自动并行执行的目的。
本发明是通过以下技术方案实现的,本发明包括以下步骤:
第一步,建立一个共享读取的程序计数寄存器组SPC,该寄存器组中寄存器的个数与CPU核的数目相同,每个寄存器分别与对应的CPU核相连以实时地储存该CPU核的程序计数器值。
所述的共享读取是:每个CPU核实时读取寄存器组中每个寄存器存储的其它CPU核的程序计数器值。
第二步,当存在空闲的CPU核时,进行加速对象选择处理,得到自动并行加速线程的加速对象为线程P。
所述的加速对象选择处理,是:当正在运行且未被加速的用户线程中存在CPU占用率最高的线程时,则选择该线程作为自动并行加速线程的加速对象;否则,时间t后,再次选择正在运行且未被加速的用户线程中CPU占用率最高的线程作为自动并行加速线程的加速对象,直至得到自动并行加速线程的加速对象。
第三步,当线程P存在已分析指令集合Sp时,载入该集合Sp;否则,为线程P新建一个集合Sp,对线程P所在的CPU核进行读取处理,得到线程P所在的CPU核当前正在读取的指令Ic,并由Ic追踪线程P下一条将要执行指令的地址,将追踪分析的指令代码和跳转关系加入集合Sp中。
所述的读取处理,是:读取线程P所在的CPU核的程序计数寄存器的值,将得到的虚拟地址转换为物理地址,然后从该物理地址得到线程P所在的CPU核正在执行的指令Ic,当集合Sp中包括指令Ic时,删除集合Sp中Ic以前的指令记录,并根据集合Sp追踪线程P下一条将要执行的指令;否则,清空集合Sp
第四步,采用第三步的方法,得到线程P将要执行的所有指令,当集合Sp中每次加入条件转移指令后且集合Sp中存在循环代码时,进行进度校验和替换处理。
所述的进度校验,是:重新读取指令Ic,当指令Ic不在集合Sp中时,清空集合Sp,然后从指令Ic开始追踪;当指令Ic在集合Sp中、线程P走向该循环且线程P已经开始执行该循环,则选取循环结束后第一条语句作为待分析指令,并清空集合Sp;当指令Ic在集合Sp中、线程P走向该循环且线程P未执行该循环,则对该循环进行替换处理;当指令Ic在集合Sp中但线程P未走向该循环时,则删除集合Sp中Ic以前的指令记录,并继续追踪。
所述的替换处理,包括以下步骤:
1)当循环的总工作量大于阈值G时,生成并行化执行该循环的代码,执行该循环的代码出口语句跳转到原循环出口对应的语句,且将新生成的代码单独放在一个或若干个内存页中;否则,放弃替换该循环,并删除集合Sp中Ic以前的指令记录,继续追踪;
2)生成代码后,进行进度校验,当通过进度校验时则中断线程P,且中断线程P后再次进行校验,再次通过进度校验后,执行3);否则,线程P继续运行;
3)将1)生成的代码所在的内存页分配给线程P,并修改原循环起始地址的二进制代码为跳转到新生成代码的起始位置,在集合Sp中删除原循环对应指令,加入新生成的代码指令;
4)替换完成后通知线程P继续执行,继续分析后续代码。
所述的通过进度校验是指:指令Ic在集合Sp中、线程P走向该循环且线程P未执行该循环。
第五步,当线程P被调度出CPU核时,系统以中断方式将该事件连同当时的SPCp值发送给自动并行加速线程,当自动并行加速线程正在替换处理中时,则使用此时的SPCp值作为读取Ic的依据,继续执行替换处理直到退出该步骤;否则,自动并行加速线程根据当时的SPCp值读取Ic,清空或更新集合Sp,其结果等待线程P被调入时继续使用。
第六步,返回第二步,开始处理新的需要加速的线程。
与现有技术相比,本发明的有益效果是:现有技术使用不方便,需要重新开发程序或者重新编译原来的代码,而本发明在运行时对程序进行自动并行,不用对现有程序进行预先的处理,整个过程由操作系统完成,对于用户完全透明。本发明能够在有空闲的CPU核时自动利用空闲资源对程序进行并行加速,免去等待预先处理程序的时间,也省去用户手动转换程序的麻烦。
具体实施方式
以下对本发明的方法进一步描述:本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
实施例
本实施例包括以下步骤:
第一步,建立一个共享读取的程序计数寄存器组SPC,该寄存器组中寄存器的个数与CPU核的数目相同,每个寄存器分别与对应的CPU核相连以实时地储存该CPU核的程序计数器值。
所述的共享读取是:每个CPU核实时读取寄存器组中每个寄存器存储的其它CPU核的程序计数器值。
第二步,当存在空闲的CPU核时,进行加速对象选择处理,得到自动并行加速线程的加速对象为线程P。
所述的加速对象选择处理,是:当正在运行且未被加速的用户线程中存在CPU占用率最高的线程时,则选择该线程作为自动并行加速线程的加速对象;否则,时间t后,再次选择正在运行且未被加速的用户线程中CPU占用率最高的线程作为自动并行加速线程的加速对象,直至得到自动并行加速线程的加速对象。
所述的时间t是系统的调度时间片大小,本实施例为20毫秒。
第三步,当线程P存在已分析指令集合Sp时,载入该集合Sp;否则,为线程P新建一个集合Sp,对线程P所在的CPU核进行读取处理,得到线程P所在的CPU核当前正在读取的指令Ic,并由Ic追踪线程P下一条将要执行指令的地址,将追踪分析的指令代码和跳转关系加入集合Sp中。
所述的读取处理,是:读取线程P所在的CPU核的程序计数寄存器的值,将得到的虚拟地址转换为物理地址,然后从该物理地址得到线程P所在的CPU核正在执行的指令Ic,当集合Sp中包括指令Ic时,删除集合Sp中Ic以前的指令记录,并根据集合Sp追踪线程P下一条将要执行的指令;否则,清空集合Sp
第四步,采用第三步的方法,得到线程P将要执行的所有指令,当集合Sp中每次加入条件转移指令后且集合Sp中存在循环代码时,进行进度校验和替换处理。
所述的进度校验,是:重新读取指令Ic,当指令Ic不在集合Sp中时,清空集合Sp,然后从指令Ic开始追踪;当指令Ic在集合Sp中、线程P走向该循环且线程P已经开始执行该循环,则选取循环结束后第一条语句作为待分析指令,并清空集合Sp;当指令Ic在集合Sp中、线程P走向该循环且线程P未执行该循环,则对该循环进行替换处理;当指令Ic在集合Sp中但线程P未走向该循环时,则删除集合Sp中Ic以前的指令记录,并继续追踪。
所述的替换处理,包括以下步骤:
1)当循环的总工作量大于阈值G时,生成并行化执行该循环的代码,执行该循环的代码出口语句跳转到原循环出口对应的语句,且将新生成的代码单独放在一个或若干个内存页中;否则,放弃替换该循环,并删除集合Sp中Ic以前的指令记录,继续追踪;
2)生成代码后,进行进度校验,当通过进度校验时则中断线程P,且中断线程P后再次进行校验,再次通过进度校验后,执行3);否则,线程P继续运行;
3)将1)生成的代码所在的内存页分配给线程P,并修改原循环起始地址的二进制代码为跳转到新生成代码的起始位置,在集合Sp中删除原循环对应指令,加入新生成的代码指令;
4)替换完成后通知线程P继续执行,继续分析后续代码。
所述的阈值G是单个CPU核1秒钟执行的最大指令数。
所述的通过进度校验是指:指令Ic在集合Sp中、线程P走向该循环且线程P未执行该循环。
第五步,当线程P被调度出CPU核时,系统以中断方式将该事件连同当时的SPCp值发送给自动并行加速线程,当自动并行加速线程正在替换处理中时,则使用此时的SPCp值作为读取Ic的依据,继续执行替换处理直到退出该步骤;否则,自动并行加速线程根据当时的SPCp值读取Ic,清空或更新集合Sp,其结果等待线程P被调入时继续使用。
第六步,返回第二步,开始处理新的需要加速的线程。
本实施例方法实现简单,且完全由操作系统完成;能够在有空闲的CPU核时自动利用空闲资源对程序进行并行加速,免去等待预先处理程序的时间,从而大大提高了多核平台下串行程序运行时的并行处理速度。

Claims (6)

1.一种多核平台下串行程序运行时的自动并行化加速方法,其特征在于,包括以下步骤:
第一步,建立一个共享读取的程序计数寄存器组SPC,该寄存器组中寄存器的个数与CPU核的数目相同,每个寄存器分别与对应的CPU核相连以实时地储存该CPU核的程序计数器值;
第二步,当存在空闲的CPU核时,进行加速对象选择处理,得到自动并行加速线程的加速对象为线程P;
第三步,当线程P存在已分析指令集合Sp时,载入该集合Sp;否则,为线程P新建一个集合Sp,对线程P所在的CPU核进行读取处理,得到线程P所在的CPU核当前正在读取的指令Ic,并由Ic追踪线程P下一条将要执行指令的地址,将追踪分析的指令代码和跳转关系加入集合Sp中;
第四步,采用第三步的方法,得到线程P将要执行的所有指令,当集合Sp中每次加入条件转移指令后且集合Sp中存在循环代码时,进行进度校验和替换处理;
第五步,当线程P被调度出CPU核时,系统以中断方式将该事件连同当时的SPCp值发送给自动并行加速线程,当自动并行加速线程正在替换处理中时,则使用此时的SPCp值作为读取Ic的依据,继续执行替换处理直到退出该步骤;否则,自动并行加速线程根据当时的SPCp值读取Ic,清空或更新集合Sp,其结果等待线程P被调入时继续使用;
第六步,返回第二步,开始处理新的需要加速的线程;
所述的进度校验,是:重新读取指令Ic,当指令Ic不在集合Sp中时,清空集合Sp,然后从指令Ic开始追踪;当指令Ic在集合Sp中、线程P走向该循环且线程P已经开始执行该循环,则选取循环结束后第一条语句作为待分析指令,并清空集合Sp;当指令Ic在集合Sp中、线程P走向该循环且线程P未执行该循环,则对该循环进行替换处理;当指令Ic在集合Sp中但线程P未走向该循环时,则删除集合Sp中Ic以前的指令记录,并继续追踪;
所述的替换处理,包括以下步骤:
1)当循环的总工作量大于阈值G时,生成并行化执行该循环的代码,执行该循环的代码出口语句跳转到原循环出口对应的语句,且将新生成的代码单独放在一个或若干个内存页中;否则,放弃替换该循环,并删除集合Sp中Ic以前的指令记录,继续追踪;
2)生成代码后,进行进度校验,当通过进度校验时则中断线程P,且中断线程P后再次进行校验,再次通过进度校验后,执行3);否则,线程P继续运行;
3)将1)生成的代码所在的内存页分配给线程P,并修改原循环起始地址的二进制代码为跳转到新生成代码的起始位置,在集合Sp中删除原循环对应指令,加入新生成的代码指令;
4)替换完成后通知线程P继续执行,继续分析后续代码;
所述的通过进度校验是指:指令Ic在集合Sp中、线程P走向该循环且线程P未执行该循环。
2.根据权利要求1所述的多核平台下串行程序运行时的自动并行化加速方法,其特征是,第一步中所述的共享读取是:每个CPU核实时读取寄存器组中每个寄存器存储的其它CPU核的程序计数器值。
3.根据权利要求1所述的多核平台下串行程序运行时的自动并行化加速方法,其特征是,第二步中所述的加速对象选择处理,是:当正在运行且未被加速的用户线程中存在CPU占用率最高的线程时,则选择该线程作为自动并行加速线程的加速对象;否则,时间t后,再次选择正在运行且未被加速的用户线程中CPU占用率最高的线程作为自动并行加速线程的加速对象,直至得到自动并行加速线程的加速对象。
4.根据权利要求3所述的多核平台下串行程序运行时的自动并行化加速方法,其特征是,所述的时间t是系统的调度时间片大小。
5.根据权利要求1所述的多核平台下串行程序运行时的自动并行化加速方法,其特征是,第三步中所述的读取处理,是:读取线程P所在的CPU核的程序计数寄存器的值,将得到的虚拟地址转换为物理地址,然后从该物理地址得到线程P所在的CPU核正在执行的指令Ic,当集合Sp中包括指令Ic时,删除集合Sp中Ic以前的指令记录,并根据集合Sp追踪线程P下一条将要执行的指令;否则,清空集合Sp
6.根据权利要求1所述的多核平台下串行程序运行时的自动并行化加速方法,其特征是,所述的阈值G是单个CPU核1秒钟执行的最大指令数。
CN 201010264074 2010-08-27 2010-08-27 多核平台下串行程序运行时的自动并行化加速方法 Active CN101916185B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 201010264074 CN101916185B (zh) 2010-08-27 2010-08-27 多核平台下串行程序运行时的自动并行化加速方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 201010264074 CN101916185B (zh) 2010-08-27 2010-08-27 多核平台下串行程序运行时的自动并行化加速方法

Publications (2)

Publication Number Publication Date
CN101916185A CN101916185A (zh) 2010-12-15
CN101916185B true CN101916185B (zh) 2013-07-03

Family

ID=43323703

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201010264074 Active CN101916185B (zh) 2010-08-27 2010-08-27 多核平台下串行程序运行时的自动并行化加速方法

Country Status (1)

Country Link
CN (1) CN101916185B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108510429B (zh) * 2018-03-20 2021-11-02 华南师范大学 一种基于gpu的多变量密码算法并行化加速方法
CN113672234B (zh) * 2021-07-26 2024-02-09 北京市机械施工集团有限公司 一种用于数控设备的智能进度监控方法及系统
CN117149442B (zh) * 2023-10-30 2024-02-20 山东浪潮数据库技术有限公司 一种基于分布式架构数据库的硬件加速方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090164755A1 (en) * 2007-12-19 2009-06-25 International Business Machines Corporation Optimizing Execution of Single-Threaded Programs on a Multiprocessor Managed by Compilation
US20090165016A1 (en) * 2007-12-19 2009-06-25 International Business Machines Corporation Method for Parallelizing Execution of Single Thread Programs
CN101515231A (zh) * 2009-03-23 2009-08-26 浙江大学 基于数据流分析的单线程程序并行化的实现方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090164755A1 (en) * 2007-12-19 2009-06-25 International Business Machines Corporation Optimizing Execution of Single-Threaded Programs on a Multiprocessor Managed by Compilation
US20090165016A1 (en) * 2007-12-19 2009-06-25 International Business Machines Corporation Method for Parallelizing Execution of Single Thread Programs
CN101515231A (zh) * 2009-03-23 2009-08-26 浙江大学 基于数据流分析的单线程程序并行化的实现方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
《用线程级推测技术在多核体系结构上并行化科学计算应用》;王耀彬;《小型微型计算机系统个》;20100228;第31卷(第2期);264-269 *
王耀彬.《用线程级推测技术在多核体系结构上并行化科学计算应用》.《小型微型计算机系统个》.2010,第31卷(第2期),264-269.

Also Published As

Publication number Publication date
CN101916185A (zh) 2010-12-15

Similar Documents

Publication Publication Date Title
US10331615B2 (en) Optimization of loops and data flow sections in multi-core processor environment
Rangan et al. Decoupled software pipelining with the synchronization array
KR20160110528A (ko) 명령어 체이닝 능력을 이용한 멀티스레드형 프로세서에서의 기회 멀티스레딩
CN102981807A (zh) 一种基于cuda并行环境的gpu程序优化方法
CN101989192A (zh) 一种程序自动并行化的方法
Chen et al. Guided region-based GPU scheduling: utilizing multi-thread parallelism to hide memory latency
Anantpur et al. Runtime dependence computation and execution of loops on heterogeneous systems
CN101916185B (zh) 多核平台下串行程序运行时的自动并行化加速方法
Liu et al. A thread partitioning approach for speculative multithreading
Kumar et al. Speculative parallelism on multicore chip architecture strengthen green computing concept: A survey
Whaley et al. Heuristics for profile-driven method-level speculative parallelization
Ioannou et al. Toward a more accurate understanding of the limits of the TLS execution paradigm
Shekhar et al. Comparison of parallel programming models for multicore architectures
Garcia et al. A dynamic schema to increase performance in many-core architectures through percolation operations
Maroñas et al. Evaluating worksharing tasks on distributed environments
Tarakji et al. The development of a scheduling system GPUSched for graphics processing units
Hoshi et al. Runtime overhead reduction in automated parallel processing system using valgrind
Anantpur et al. Taming warp divergence
Wang et al. Investigation of factors impacting thread-level parallelism from desktop, multimedia and HPC applications
Wang et al. A flexible chip multiprocessor simulator dedicated for thread level speculation
Kwon et al. MPI backend for an automatic parallelizing compiler
Li et al. Energy minimization on thread-level speculation in multicore systems
Bu et al. Exploring parallelism in mibench with loop and procedure level speculation
Weber et al. Decoupled access-execute on ARM big. LITTLE
Obuchi et al. Efficient translation and execution method for automated parallel processing system by using valgrind

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20210326

Address after: 401135 No. 618 Liangjiang Avenue, Longxing Town, Yubei District, Chongqing

Patentee after: Chongqing Research Institute of Shanghai Jiaotong University

Address before: 200240 No. 800, Dongchuan Road, Shanghai, Minhang District

Patentee before: SHANGHAI JIAO TONG University

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20210811

Address after: 618 Liangjiang Avenue, Longxing Town, Yubei District, Chongqing

Patentee after: Chongqing Jiaohui Technology Co.,Ltd.

Address before: 401135 No. 618 Liangjiang Avenue, Longxing Town, Yubei District, Chongqing

Patentee before: Chongqing Research Institute of Shanghai Jiaotong University

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20211020

Address after: 618 Liangjiang Avenue, Longxing Town, Yubei District, Chongqing

Patentee after: Chongqing Jiaohui Excavation Technology Co.,Ltd.

Address before: 618 Liangjiang Avenue, Longxing Town, Yubei District, Chongqing

Patentee before: Chongqing Jiaohui Technology Co.,Ltd.

TR01 Transfer of patent right