CN102981805A - 串行软件的响应方法和系统 - Google Patents

串行软件的响应方法和系统 Download PDF

Info

Publication number
CN102981805A
CN102981805A CN2012104346067A CN201210434606A CN102981805A CN 102981805 A CN102981805 A CN 102981805A CN 2012104346067 A CN2012104346067 A CN 2012104346067A CN 201210434606 A CN201210434606 A CN 201210434606A CN 102981805 A CN102981805 A CN 102981805A
Authority
CN
China
Prior art keywords
thread
buffer memory
data
read
write
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.)
Granted
Application number
CN2012104346067A
Other languages
English (en)
Other versions
CN102981805B (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.)
Inspur Beijing Electronic Information Industry Co Ltd
Original Assignee
Inspur Beijing Electronic Information Industry Co Ltd
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 Inspur Beijing Electronic Information Industry Co Ltd filed Critical Inspur Beijing Electronic Information Industry Co Ltd
Priority to CN201210434606.7A priority Critical patent/CN102981805B/zh
Publication of CN102981805A publication Critical patent/CN102981805A/zh
Application granted granted Critical
Publication of CN102981805B publication Critical patent/CN102981805B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Multi Processors (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明提供一种串行软件的响应方法和系统。所述方法,包括:,应用在多核CPU的系统中,所述串行软件包括相互独立的读线程、写线程和计算线程,其中读线程与计算线程共享第一缓存,写线程与所述计算线程共享第二缓存,其中:在执行多组读写操作时,在读线程将读操作得到的数据缓存到第一缓存后,执行下一组读写操作;在计算线程检测到第一缓存写入数据后,采用第一缓存内的数据进行处理,得到的处理结果存入第二缓存;在写线程检测到第二缓存写入数据后,写线程将第二缓存内的数据存入存储空间。

Description

串行软件的响应方法和系统
技术领域
本发明涉及计算机应用领域,尤其涉及一种串行软件的响应方法和系统。
背景技术
硬件系统在新技术的推动下进行着快速演进,表现出更好的性能、更低的价格,如传统CPU从单核向多核直至众核发展。随着多核体系结构处理器的普及,应用软件多进/线程并行处理方式将逐渐成为主流。
硬件发展的最终目的是推动应用软件的表现,进而推进整个计算系统的性能。但随着计算设备体系结构的多样化,多核化,软件系统仅仅依靠硬件的更新从而获得性能提升的方式已经不符合现有硬件的发展趋势,例如传统的单线程串行程序在多核计算设备下不能表现出更好的性能。因此软件系统必须摒弃原有继续享用免费午餐的方式,不能仅仅依靠硬件性能的发展,而应该同时针对硬件系统的发展进行软件系统的再次开发和更新。这也是目前计算架构下我们遇到的最大挑战,而软件系统的再次开发和改造则显得极为必要。
为了提高现有软件系统在新计算设备架构下的性能表现,针对软件系统进行再开发具有很强的现实意义。
目前国内外针对CPU多核体系结构的应用开发在CPU多核发展之初就如火如荼地展开了,并陆续开发或改造出相当数量的应用,但是现有技术中并没有针对传统单线程串行软件的并行化改造方案。因此如何实现串行软件的并行化处理是本发明要解决的问题。
发明内容
本发明提供一种串行软件的响应方法和系统,要解决的技术问题是如何实现串行软件的并行化处理
为解决上述技术问题,本发明提供了如下技术方案:
一种串行软件的响应方法,应用在多核CPU的系统中,所述串行软件包括相互独立的读线程、写线程和计算线程,其中读线程与计算线程共享第一缓存,写线程与所述计算线程共享第二缓存,其中:
在执行多组读写操作时,在读线程将读操作得到的数据缓存到第一缓存后,执行下一组读写操作;
在计算线程检测到第一缓存写入数据后,采用第一缓存内的数据进行处理,得到的处理结果存入第二缓存;
在写线程检测到第二缓存写入数据后,写线程将第二缓存内的数据存入存储空间。
优选的,所述方法还具有如下特点:所述方法还包括:
当第一缓存中存储的任务为多个时,多个计算线程依照次序从第一缓存中读取任务。
一种串行软件的响应装置,应用在多核CPU的系统中,所述串行软件包括相互独立的读线程模块、写线程模块和计算线程模块,其中读线程模块与计算线程模块共享第一缓存,写线程模块与所述计算线程模块共享第二缓存,其中:
所述读线程模块,用于在执行多组读写操作时,将读操作得到的数据缓存到第一缓存后,执行下一组读写操作;
计算线程模块,用于在检测到第一缓存写入数据后,采用第一缓存内的数据进行处理,得到的处理结果存入第二缓存;
写线程模块,用于在检测到第二缓存写入数据后,将第二缓存内的数据存入存储空间。
优选的,所述方法还具有如下特点:所述系统还包括:
调度模块,用于当第一缓存中存储的任务为多个时,控制多个计算线程模块依照次序从第一缓存中读取任务。
本发明提供的实施例,通过实现单一功能的线程来实现,因此,在执行多组读写操作时,实现了并行化处理,且通过共享缓存空间,触发下一个线程进行处理,便于不同功能的线程间的操作衔接。
附图说明
图1为本发明提供的串行软件的响应方法实施例的流程示意图;
图2为本发明方法实施例与现有技术的对比示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明作进一步的详细描述。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
图1为本发明提供的串行软件的响应方法实施例的流程示意图。图1所示方法实施例,应用在多核CPU的设备中,包括:相互独立的读线程、写线程和计算线程,其中读线程与计算线程共享第一缓存,写线程与所述计算线程共享第二缓存,其中:
步骤101、在执行多组读写操作时,在读线程将读操作得到的数据缓存到第一缓存后,执行下一组读写操作;
步骤102、在计算线程检测到第一缓存写入数据后,采用第一缓存内的数据进行处理,理得到的处理结果存入第二缓存;
步骤103、在写线程检测到第二缓存写入数据后,写线程将第二缓存内的数据存入存储空间。
需要说明的是,本方法实施例,通过实现单一功能的线程来实现,因此,在执行多组读写操作时,实现了并行化处理,且通过共享缓存空间,触发下一个线程进行处理,便于不同功能的线程间的操作衔接。
图2为本发明方法实施例与现有技术的对比示意图。
在图2中,第一个为现有技术中串行处理所需的时间,即:
TOTAL_1=N*(READ_T+COMPUTE_T+WRITE_T);
第二个为本发明实施例中并行处理所需的时间,即:
TOTAL_2=N*READ_T+COMPUTE_T+(N-1)*(WRITE_T-READ_T)+WRITE_T;
其中,N为读写操作的组数,一组读写操作包括读、计算和写。
由此可以看出,读数据、计算以及写数据进行异步操作,在时间上互相掩盖,出现重叠,最大限度地缩短软件运行时间,显著提高硬件资源利用率,提高计算效率和整体性能。
可选的,当第一缓存中存储的任务为多个时,多个计算线程依照次序从第一缓存中读取任务。
通过对任务的调用可以对充分发挥性能,实现最优使用。
为提高该串行软件在多核CPU系统上的并行处理效率,达到资源利用最大化,需要实现各进程/线程负责均衡最优化,如果多核CPU系统包括多个节点,则负载均衡分为节点间负载均衡和节点内负载均衡,而负载均衡的原则是能者多劳,即将负载超过阈值的节点上的任务迁移到负载低于阈值的节点,其中该阈值的选择可以根据个人经验进行设置。
其中,负载均衡通常有两种方式:
1、静态负载均衡,适用于数据并行,且运算量与数据规模呈稳定的关系,这种方式实现简单,但是系统适应性差。
2、动态负载均衡,适用于任务并行,或者运算量无法事先预测的情形,这种方式实现起来相对复杂,但是非常高效,系统适应性好,软件健壮性高。
在软件并行化后,软件的热点部分,即核心计算,都由相应的进程/线程函数执行。因此,进程/线程的优化,成为软件性能进一步提升的关键。进程/线程函数优化的主要内容有,即在软件开发过程中对其进行优化:
1、核心算法逻辑优化
与并行优化、IO优化、热点代码优化相结合,相辅相成。
微数学模型优化,化繁琐变换为直接计算。
计算过程精简,减少中间变量。
2、IO优化
1)宏观IO优化
尽量实现读、计算、写异步并行,互相掩盖。
化随机、零散小数据读写为连续、大块数据读写。
2)微观IO优化(体现于核心算法的优化)
内存管理优化
减小内存使用量
使内存集中分配、释放,减小内存分配、释放次数
数据结构优化,提高访存效率,如将矩阵行优先存储访问,可以提高矩阵的访问效率。
3、Cache优化:充分利用数据局部性,平衡任务粒度与cache容量的矛盾。
4、变量优化:常量复用,中间数据精简,最大限度减少冗余计算、冗余变量等开销。
5、寻址优化:使用临时指针,减少多级寻址次数
6、数据函数库优化
1)选择不同的快速数学库:mkl/fftw等。
2)数学函数的不同精度版本。如:X(d),X函数的双精度版本,如cos/exp/log等;Xf,X函数的单精度版本,如cosf/expf/logf等。
7、指令优化
1)SIMD指令集优化,即向量指令优化
2)预编译指令:#pragma ivdep/simd
3)编译选项:-xSSE3/4.1a/4.2a-vec-report3
4)控制向量化精度:-fp-model strict/precise/double/fast/source等
当然,为提高自动向量化率,对代码作必要调整,循环拆分、循环融合、循环调序,复杂表达式拆解,统一操作数精度,查看编译日志,了解相应循环是否向量化或未能向量化原因。
8、编译器优化
1)自动优化选项:-O3,-fp-model fast等
2)各种优化手段都依赖编译器支持。如自动向量化选项,向量化编译报告,高性能数学库链接选项等。
9、性能与精度的平衡
性能与精度是互相矛盾的,程序员根据实际需求,进行取舍。
10、并行库的选择
目前,比较主流的并行库有MPI/OpenMP/pthread等。
不同并行库的开发周期比较:MPI/pthread>OpenMP
不同并行库的灵活性比较:MPI/pthread>OpenMP
不同并行库的系统适应性比较:
MPI既适用于多节点间分布式内存并行,也适用于节点内共享内存并行,进行间通信开销较大。
OpenMP/pthread只能用于共享内存并行,线程间通信直接、高效。
程序员综合并行方案,性能目标,软件开发周期等因素,选择最合适的并行库。
性能优化方案实施与迭代调优:实施既定的性能优化方案并迭代调优
上文对软件开发过程进行了描述,为了缩短软件开发流程,可以在进行软件开发前,执行如下操作:
1、软件运行特征分析:分析软件运行特征,定位软件性能瓶颈
应用软件运行特征分析,精准定位软件的性能瓶颈,可以使优化工作有的放矢,大大提高优化的效率。
应用软件运行特征分析的原则包括:1)系统与局部分析结合,即软件整体框架与软件局部模块分析都很重要,互为补充,综合全面地掌握应用软件的运行特征;2)定性与定量分析并重,在优化开发周期有限的条件下,定性分析为工程师指明工作方向,专注于软件的主要瓶颈,而定量分析界定了性能提升的理论极限;3)工具采样与代码分析结合,软件运行特征分析过程中,工具采样分析与代码分析两种手段互为补充、互为指导工具采样分析,可以帮助程序员快速定位程序热点,而代码分析,为程序热点找到理论依据,从而使热点与代码映射起来;4)软件运行特征分析工具,具有高效全面、数据完备直观等特点,在整个性能优化过程中都能发挥极大作用;5)软件运行特征分析工具,可以采集应用软件运行过程中的CPU利用率、内存特征、磁盘特征、网络特征、指令CPI等信息,其中软件热点分析工具,可以采集应用软件运行时各函数CPU使用率及其百分比、分析线程时序、分析程序并发度、检查软件内存和线程缺陷等;6、宏观与微观分析结合,应用软件的运行特征分析,既有高层次的宏观分析,也有底层的微观分析,宏观呈现现象,微观揭示原理,宏观分析指明优化方向,微观分析指导优化的手段。
2、性能优化方案制定:制定综合、全面的性能优化方案
1)优化方案的总体思想:高效利用系统资源,包括多核计算资源、内存资源、磁盘资源、网络资源等。
2)优化层次、效率、开发周期的关系,包括:
优化层次与优化效率的关系:物理模型>数学模型>算法模型
优化层次与优化周期的关系:物理模型<数学模型<算法模型
3、并行模型设计
1)并行算法设计
优异的并行算法,是性能优化的前提条件和基础。
深入分析数据依赖关系,充分挖掘算法的并行性,必要时,对现有算法进行并行性改造,从而最大限度减少数据依赖和交换,提高算法的并行度,并行度越高,并行可扩展性越好。
2)选择合适的并行粒度(层次)
定义:高层次(外层循环)并行为粗粒度并行,低层次(内层循环)并行为细粒度并行。
并行粒度的选择非常关键,主要考虑以下因素:
第一点,算法的并行性与并行的可扩展性,即:不同的并行粒度,数据依赖关系不同,导致并行度也不同,制定并行方案时,要充分挖掘算法的并行性,必要时,对现有算法进行并行性改造,从而最大限度减少数据依赖和交换,提高算法的并行度,并行度越高,并行可扩展性越好。
第二点,并行效率——线程调度开销,即:并行粒度越小,线程调度越频繁,开销越大
第三点,兼顾负载均衡性和线程通信开销
选择合适的并行粒度,包括:不同的并行粒度,用于线程通信的锁、队列开销不同;不同并行粒度,可能引入不同的线程间数据依赖关系,从而导致线程同步或等待
3)内存容量——空间换时间
并行化引入多缓冲,增加内存需求
不同并行粒度,引入不同缓存需求
4)负载均衡
并行粒度不同,可能负载均衡效果的差异,满足IO与计算异步并行的需求,并行层级必须达到一定高度,才方便实现读、写功能线程,进而与计算线程实现异步并行。
5)平衡性能与开发周期的矛盾,即优化层次越高,开发周期越长
总结来说,并行粒度影响并行库的选择,并行库的选择,很大程度上取决于并行粒度,多节点分布式内存并行方案,需要多进程并行,这样就需要选择MPI并行,节点内共享式内存并行方案,多线程并行效率更高,如果并行粒度低且并行逻辑较简单,OpenMP基本可以满足要求,并且开发周期短,如果并行粒度较高或并行逻辑复杂,pthread是不错的选择。
本发明提供的串行软件的响应装置,应用在多核CPU的系统中,所述串行软件包括相互独立的读线程模块、写线程模块和计算线程模块,其中读线程模块与计算线程模块共享第一缓存,写线程模块与所述计算线程模块共享第二缓存,其中:
所述读线程模块,用于在执行多组读写操作时,将读操作得到的数据缓存到第一缓存后,执行下一组读写操作;
计算线程模块,用于在检测到第一缓存写入数据后,采用第一缓存内的数据进行处理,得到的处理结果存入第二缓存;
写线程模块,用于在检测到第二缓存写入数据后,将第二缓存内的数据存入存储空间。
可选的,所述系统还包括:
调度模块,用于当第一缓存中存储的任务为多个时,控制多个计算线程模块依照次序从第一缓存中读取任务。
本发明实施例提供的装置实施例,通过实现单一功能的线程来实现,因此,在执行多组读写操作时,实现了并行化处理,且通过共享缓存空间,触发下一个线程进行处理,便于不同功能的线程间的操作衔接。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求所述的保护范围为准。

Claims (4)

1.一种串行软件的响应方法,其特征在于,应用在多核CPU的系统中,所述串行软件包括相互独立的读线程、写线程和计算线程,其中读线程与计算线程共享第一缓存,写线程与所述计算线程共享第二缓存,其中:
在执行多组读写操作时,在读线程将读操作得到的数据缓存到第一缓存后,执行下一组读写操作;
在计算线程检测到第一缓存写入数据后,采用第一缓存内的数据进行处理,得到的处理结果存入第二缓存;
在写线程检测到第二缓存写入数据后,写线程将第二缓存内的数据存入存储空间。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当第一缓存中存储的任务为多个时,多个计算线程依照次序从第一缓存中读取任务。
3.一种串行软件的响应装置,其特征在于,应用在多核CPU的系统中,所述串行软件包括相互独立的读线程模块、写线程模块和计算线程模块,其中读线程模块与计算线程模块共享第一缓存,写线程模块与所述计算线程模块共享第二缓存,其中:
所述读线程模块,用于在执行多组读写操作时,将读操作得到的数据缓存到第一缓存后,执行下一组读写操作;
计算线程模块,用于在检测到第一缓存写入数据后,采用第一缓存内的数据进行处理,得到的处理结果存入第二缓存;
写线程模块,用于在检测到第二缓存写入数据后,将第二缓存内的数据存入存储空间。
4.根据权利要求3所述的系统,其特征在于,所述系统还包括:
调度模块,用于当第一缓存中存储的任务为多个时,控制多个计算线程模块依照次序从第一缓存中读取任务。
CN201210434606.7A 2012-11-02 2012-11-02 串行软件的响应方法和系统 Active CN102981805B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210434606.7A CN102981805B (zh) 2012-11-02 2012-11-02 串行软件的响应方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210434606.7A CN102981805B (zh) 2012-11-02 2012-11-02 串行软件的响应方法和系统

Publications (2)

Publication Number Publication Date
CN102981805A true CN102981805A (zh) 2013-03-20
CN102981805B CN102981805B (zh) 2015-11-18

Family

ID=47855876

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210434606.7A Active CN102981805B (zh) 2012-11-02 2012-11-02 串行软件的响应方法和系统

Country Status (1)

Country Link
CN (1) CN102981805B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016155238A1 (zh) * 2015-03-27 2016-10-06 中兴通讯股份有限公司 一种分布式存储系统中的文件读取方法及服务端
CN115150218A (zh) * 2021-03-30 2022-10-04 广东博智林机器人有限公司 一种上位机与驱动器的串行通信方法、装置及系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5179679A (en) * 1989-04-07 1993-01-12 Shoemaker Kenneth D Apparatus and method for permitting reading of data from an external memory when data is stored in a write buffer in the event of a cache read miss
CN101286138A (zh) * 2008-06-03 2008-10-15 浙江大学 基于数据划分的多线程共享多核处理器二级缓存的方法
CN101504618A (zh) * 2009-02-26 2009-08-12 浙江大学 面向多核处理器的实时线程迁移方法
CN102902512A (zh) * 2012-08-31 2013-01-30 浪潮电子信息产业股份有限公司 一种基于多线程编程及消息队列的多线程并行处理方法
CN103049245A (zh) * 2012-10-25 2013-04-17 浪潮电子信息产业股份有限公司 一种基于cpu多核平台的软件性能优化方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5179679A (en) * 1989-04-07 1993-01-12 Shoemaker Kenneth D Apparatus and method for permitting reading of data from an external memory when data is stored in a write buffer in the event of a cache read miss
CN101286138A (zh) * 2008-06-03 2008-10-15 浙江大学 基于数据划分的多线程共享多核处理器二级缓存的方法
CN101504618A (zh) * 2009-02-26 2009-08-12 浙江大学 面向多核处理器的实时线程迁移方法
CN102902512A (zh) * 2012-08-31 2013-01-30 浪潮电子信息产业股份有限公司 一种基于多线程编程及消息队列的多线程并行处理方法
CN103049245A (zh) * 2012-10-25 2013-04-17 浪潮电子信息产业股份有限公司 一种基于cpu多核平台的软件性能优化方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016155238A1 (zh) * 2015-03-27 2016-10-06 中兴通讯股份有限公司 一种分布式存储系统中的文件读取方法及服务端
CN115150218A (zh) * 2021-03-30 2022-10-04 广东博智林机器人有限公司 一种上位机与驱动器的串行通信方法、装置及系统

Also Published As

Publication number Publication date
CN102981805B (zh) 2015-11-18

Similar Documents

Publication Publication Date Title
CN103049245B (zh) 一种基于中央处理器cpu多核平台的软件性能优化方法
CN102902512B (zh) 一种基于多线程编程及消息队列的多线程并行处理方法
Olmedo et al. Dissecting the CUDA scheduling hierarchy: a performance and predictability perspective
KR101839544B1 (ko) 이종 코어의 자동 부하 균형
Spafford et al. The tradeoffs of fused memory hierarchies in heterogeneous computing architectures
Hadri et al. Tile QR factorization with parallel panel processing for multicore architectures
Samadi et al. Paragon: Collaborative speculative loop execution on gpu and cpu
Hayes et al. Unified on-chip memory allocation for SIMT architecture
Wang et al. Simultaneous multikernel: Fine-grained sharing of gpus
CN105159654A (zh) 基于多线程并行的完整性度量散列算法优化方法
Zhong et al. Towards GPU-accelerated large-scale graph processing in the cloud
Jiang et al. Optimizing scientific workflows in the cloud: A montage example
Li et al. An optimized large-scale hybrid DGEMM design for CPUs and ATI GPUs
Chen et al. Balancing scalar and vector execution on gpu architectures
CN102981805B (zh) 串行软件的响应方法和系统
Garg et al. Share-a-GPU: Providing simple and effective time-sharing on GPUs
Kim et al. Power efficient mapreduce workload acceleration using integrated-gpu
Shekarisaz et al. MASTER: Reclamation of hybrid scratchpad memory to maximize energy saving in multi-core edge systems
Garcia et al. A dynamic schema to increase performance in many-core architectures through percolation operations
Li et al. FreshBreeze: A data flow approach for meeting DDDAS challenges
Wei et al. PRODA: improving parallel programs on GPUs through dependency analysis
Chen et al. A static scheduling scheme of multicore compiler for loop load imbalance in OpenMP
Chen Scalar-Vector GPU Architectures
Karsin A performance model for GPU architectures: analysis and design of fundamental algorithms
Wang et al. micMR: An efficient MapReduce framework for CPU–MIC heterogeneous architecture

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