一种自适应的帮助线程预取质量控制方法

文档序号:10569784阅读:534来源:国知局
一种自适应的帮助线程预取质量控制方法
【专利摘要】本发明公开了一种自适应的帮助线程预取质量控制方法,属于多核缓存性能优化技术领域,可用于改进和提升非规则数据密集应用中帮助线程预取的质量。针对帮助线程预取控制参数,通过引入动态采样、程序运行阶段检测、预取获益反馈、自适应调节等技术,实现帮助线程预取控制参数值的实时在线自适应调节,以提高帮助线程预取的控制质量。本方法主要包括如下步骤:1)动态信息采集和反馈统计;2)指标计算3)自适应预取控制。本发明方法充分利用多核平台的硬件信息实现帮助线程的实时在线预取控制,可广泛应用于当前大数据环境下非规则数据密集型应用的访存性能优化、帮助线程预质量控制和共享缓存污染控制等方面。
【专利说明】
一种自适应的帮助线程预取质量控制方法
技术领域
[0001] 本发明涉及多核计算机共享缓存性能优化领域,具体涉及一种控制帮助线程预取 质量的自适应调节方法,可用于提升非规则数据密集型应用程序的性能。
【背景技术】
[0002] 当前数据密集应用涉及大数据分析、社会网络、科学计算等领域,这类应用往往呈 现出非规则数据密集访问特征,这使得传统基于时空局部性的数据预取技术失效。为提高 该类应用的程序性能,帮助线程预取技术受到了广泛关注。帮助线程预取技术的实质是一 种Leader/Fol lower结构,是一种非传统并行技术。在多核计算平台上,帮助线程预取的目 的地是平台的最后一级共享缓存。其主要思想是利用一个空闲核Corel运行一个帮助线程 (精简版本的主线程)来帮助运行在核CoreO上的主线程进行数据预取,帮助线程在数据流 和控制流上都不会对主线程造成干扰,只起到数据预取的作用。由于构造帮助线程时剔除 了主线程中的计算任务,只剩下了访存任务和必要的控制流,因而它可以和主线程在计算 和访存上解偶,主线程负责计算,帮助线程负责访存,从而有效地隐藏访存延迟达到提升程 序性能的目的。
[0003] 最近大多研究均采用参数值来控制帮助线程的预取质量,如国外学者在2009年 ((IEEE Transactions on Parallel and Distributed Systems))杂志上发表的 《Prefetching with Helper Threads for Loosely Coupled Multiprocessor Systems》 文章中提出了一种基于"PV"信号的帮助线程控制方法,通过在主线程和帮助线程中分别维 护一个同步计数器(Loop_SYNC_Interval),主线程在每个同步间隔内,执行"V"操作,表示 主线程已经消费掉一个块的数据。在帮助线程到达同步间隔后,首先判断主线程消耗的数 据块的数量是不是超过了一个阈值(MAX_DIST)。如果超过阈值,那么表明帮助线程落后主 线程,帮助线程需要做的操作是同步当前变量,追上主线程,并重新初始化阈值;如果没有 超过阈值,那么帮助线程简单的执行"P"操作,表示此时帮助线程仍然快于主线程。国内学 者北京理工大学的古志民教授研究组,针对"PV"方法存在的问题,提出一种针对小计算量 下非规则数据密集型热函数的性能优化方法,该方法引入三个控制参数预取距离K、预取块 大小P和同步距离B来控制帮助线程的预取。
[0004] 以上研究中,帮助线程控制参数值的选择和优化都是采用静态枚举获得。当应用 程序执行的环境或程序输入集变化时,原来的控制参数值就会失效,需要重新通过静态枚 举来优选控制参数值,这将是一个繁杂耗时的过程。因此,静态选择帮助线程控制参数值的 方法主要存在两方面的问题:一方面在参数值选择和优化时所花费的时间代价过高,另一 方面离线设置参数值的方法不能够适应程序的动态阶段访存行为的变化。这些问题给帮助 线程预取技术的应用和推广带来极大的限制。
[0005] 针对这些问题,本发明提出一种帮助线程预取控制的自适应调节方法,以解决传 统手工枚举选择参数值的难题。

【发明内容】

[0006] 本发明的目的在于解决上述技术难题,提出了一种自适应的帮助线程预取质量控 制方法,其特征在于通过多核处理器的硬件性能计数器(Performance Monitor Unit)部件 实时、在线监测帮助线程的预取性能,根据应用程序的动态阶段行为和预取获益信息可实 现对帮助线程的控制参数值进行自适应调整和优化。
[0007] 本发明主要通过下列技术方案来实现。为便于阐述本发明方法涉及的具体实现步 骤,首先给出本发明相关的技术术语的定义。
[0008] 定义1热点模块M:对于应用程序d中的任意模块M,存在阈值和分别满足 2 n和,则称M为热点模块。其中,cyde w和⑵分别表示利 用Pr〇fi7i/^工具对程序X进行性能剖析所获得的程序运行时钟数和/Z成夫失数。
[0009] 定义2程序阶段(Phase):假设应用程序A动态运行过程中的一个执行区间P,在这 个执行区间P内应用程序的某个性能指标(如,CPI,分支预测等)保持相对稳定,那么这个执 行区间P为一个程序阶段。
[0010] 本发明方法的基本思想是利用动态采样技术,通过收集多核平台的硬件计数器 (PMU)信息,然后计算相关指标来判定定义1所示的程序热点模块中的阶段(定义2)行为变 化和预取质量的获益反馈信息,最后根据反馈信息做出帮助线程的预取控制决策。程序热 点模块刺的执行时间在逻辑上被分为周而复始循环运行的3个区间:即帮助线程预取动态反 馈决策期;帮助线程预取参数训练期;帮助线程预取参数应用期。本发明所述方法的整体框 架流程如图1所示,其特征在于如下步骤。
[0011] 1)开始:程序初始化相关采样引擎,进入热点模块,如果程序退出了热点模块,则 转结束。
[0012] 2)程序热点函数运行阶段和预取质量反馈信息统计。
[0013] 3)程序阶段行为指标计算和预取质量获益指标计算。
[0014] 4)帮助线程预取质量控制的动态决策。
[0015] 5)结束:退出该方法。
[0016] 作为对本发明的自适应的帮助线程预取质量控制方法的进一步改进:步骤2)中的 动态反馈信息主要通过多核平台的硬件性能计数器PMU进行统计,所采集的性能事件主要 包括 CPU_UNHALTED_CLOCKS 事件和 INSTRUCTIONS_RETIRED 事件。
[0017] 作为对本发明的自适应的帮助线程预取质量控制方法的进一步改进:本方法所述 的动态反馈信息采集主要通过采样技术来实现,通过在利用现代处理器所提供的精确事件 采样机制(Precise Event Based Sampling, PEBS),通过设置PMU计数器的采样事件间隔 周期八每当P个事件发生后,CPU将其性能事件状态存在性能计数器中,并产生中断信号,然 后在信号中断处理程序中可以对性能事件计数器读取、处理等操作。
[0018] 作为对本发明的自适应的帮助线程预取质量控制方法的进一步改进:步骤3)中阶 段检测指标为= (ki),其中八?表示第i个阶段检测期, 乃表示第j个阶段检测期。乃和A之间的程序运行区间即为帮助线程运行的参数值应用期。 在阶段检测期乃和A内,关闭帮助线程预取操作,并采集n个采样间隔内的CPI数据,最后计 算CPI均值来表征检测期乃内的程序阶段特征。当#SAlWtoH时,称程序运行阶段发生变 化。
[0019] 作为对本发明的自适应的帮助线程预取质量控制方法的进一步改进:步骤3)中预 取获益指标为ACPi",丨:esaa^e,其中乃表示第i 个检测阶段。表示阶段Pi在关闭预取状态下的CPI采样均值, 表示阶段乃在开启预取状态下的〇^采样均值,二者之差用于判定预 取是否获益。在阶段乃内采集n个执行样本的CPI数据,最后计算CPI均值来表征阶段乃内主 线程的性能情况。&对:>?1时,表示在帮助线程预取的作用下主线程取得了性能提升,即预 取是正获益;当ACRTcO时,表示在帮助线程预取的作用下使得主线程性能下降,即预取是 负获益。
[0020] 作为对本发明的自适应的帮助线程预取质量控制方法的进一步改进:步骤4)中帮 助线程预取质量的动态决策主要包括如下步骤:A、检测帮助线程预取获益情况;B、若帮助 线程预取反馈信息为负获益,则根据当前热点函数执行进度判断是否进入帮助线程预取参 数值自学习阶段,若热点函数剩余执行时间不足于完成参数值学习时,则直接关闭帮助线 程预取,否则进入参数自适应学习阶段;C、若帮助线程预取为正获益时,进行程序执行阶段 检测;D、若程序执行阶段未变化,则仍然保持当前预取控制参数值;E、若程序执行阶段发生 了变化,则根据当前热点模块剩余执行进度决定是否进入预取参数值的学习阶段。
[0021] 本发明方法可以解决帮助线程预取参数值的选择和控制问题,提出的帮助线程自 适应预取反馈机制能够根据程序的动态阶段行为和预取获益信息对帮助线程控制参数值 做出自适应控制和调节。与传统静态枚举参数值的方法相比,本方法的优点是能够实现帮 助线程预取控制参数值的实时在线调整和优化,解决了帮助线程参数选择和控制的难题, 从而使得应用程序在变更运行平台及输入集后无需提前静态枚举预取控制参数值,突破了 当前帮助线程预取技术的应用局限性。本发明可广泛应用于当前大数据环境下非规则数据 密集型应用的访存性能优化、帮助线程预取质量控制和共享缓存污染控制等方面。
【附图说明】
[0022] 图1是本发明用于自适应的帮助线程预取质量控制方法的操作步骤流程图。
[0023] 图2是本发明一种自适应的帮助线程预取质量控制方法的实施装置系统结构图。
【具体实施方式】
[0024] 为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和实施例对本发 明作进一步的描述和说明。
[0025] 图1是本发明方法的具体操作步骤流程图,图2给出一种自适应的帮助线程预取质 量控制方法的实施装置。如图2所示,本实施例装置中处理器200中有两个处理核心204和 205,两个处理核心之间共享最后一级缓存(Last Level Cache,LLC)203,帮助线程数据预 取的来源自自于主存201,预取的目的地是最后一级共享缓存203。在本实施例中,应用程序 300包括线程运行在处理核204上,帮助线程运行在处理核205上,通过帮助线程与主线程的 并行来实现主线程中计算与访存任务的解耦,从而实现提高应用程序300执行性能的目的。
[0026] 图2中帮助线程预取自适应调节装置100中,主要包括初始化部件101、参数值生成 器102、PMU采样器103、评估决策器104以及控制器105几个系统软件模块组成。初始化部件 主要用来完成系统动态采样引擎的初始化工作;参数值生成器主要根据主线程与帮助线程 之间的任务量分担情况生成帮助线程预取控制参数值的候选集;PMU采样器103主要完成对 主线程实时运行硬件性能计数器的采集,并将采集结果存于位于主存201中的评价表202 中;评估决策器主要根据评价表202的性能数据计算相关指标选择当前最好的预取控制策 略;控制器105主要用来控制自适应预取控制中的程序运行阶段,并根据决策评估器的决策 结果控制程序转入相应的阶段运行。
[0027] 通过以上系统可以实现本发明的一种自适应的帮助线程预取质量控制方法,该方 法是通过以下步骤实现的: 步骤1:系统初始化及采样引擎初始化。该步骤完成系统相关阈值的设定以及硬件采样 引擎的初始化工作。
[0028] 在本实施例中,选择A PthreShold=5%,即两次阶段检测期间的CPI均值差异超过 5%时,即认为程序的执行阶段发生了变化。Progressthreshold是指热点模块运行过程中, 至少需要有Progressthreshold比例的程序还未执行时,才重新进入参数训练期,进行参数 的重新选择和优化。在本实施例中将Progressthreshold设置为参数训练期长度的2倍,即 至少要保证参数训练完成,并能够应用一个训练周期。在此次执行中,Progressthreshold= 0.34%〇
[0029] 步骤2:程序热点函数运行阶段和预取质量反馈信息统计:主要通过PMU采样器103 实时动态采样监测应用主线程执行时的运行时钟数以及提交指令数。
[0030] 步骤2.1:预取控制参数值候选集的生成:以古志民教授研究组提出的帮助线程 KPB参数方法为例说明参数值生成器102的工作过程。帮助线程中预取率定义为一个数据块 内帮助线程预取工作量大小所占的比例,即&=_%|:_+/>),~£( !^>。帮助线程预取率1^用 来调整帮助线程预取行为,在既定K值下,通过遍历预取率Rp会大大缩短参数值的寻优时 间。Rp的取值范围是(〇,1),预取大小P可以通过公式(1-馬>计算得出。
[0031] 步骤2.2:预取控制参数值的学习:为确保预取控制参数值学习的可靠性和准确 性,采用两阶段学习方式,将学习阶段分初选阶段和复选阶段。预取距离K在[0,Kmax]之间 以固定步长step取不同的值,得到一个值序列{K1,K2,K3,…Kmax/step},针对序列中的每 个K值,通过变换预取率Rp均会由参数值产生器生成一个参数值集合{K '},序列中所有的K 值经过参数值产生器之后产生max/step个参数值集合,表示为PRAR={ {K1' },{ K2 ' },…{ Kmax/step '}},即PARA集合中每个元素都是一个集合。在参数值初选阶段,选择出PARA集合 中每一个参数集合中使得主线程预取性能最好的参数值,形成PRAR2={Klbest,K2best,… Kmax/stepbest}。在参数值复选阶段,在PARA2集合中选择出具有最好预取质量的参数值。 之后进入参数值应用期。
[0032] 步骤3程序阶段行为指标计算和预取质量获益指标计算。根据步骤2采集的信息, 当程序进入中断反馈处理程序时,计算下列指标。
[0033] 阶段行为检测指标采用公式AP:=C〇%-(kj)来计算。
[0034] 预取获益信息采用公式 _ ACP/ .=. £^&_.丨碑fe* - 丨'来计 算。
[0035] 步骤4帮助线程预取质量控制的动态决策。
[0036] 根据步骤3计算的程序阶段指标及预取获益信息,帮助线程的预取调节策略遵循 以下策略: a)若帮助线程为预取负获益,则判断热点模块剩余进度〉Progressthreshold设置值, 则重新进入预取控制参数值学习期,否则直接关闭帮助线程预取。
[0037] b)如果帮助线程预取为正获益,则通过步骤3计算的判断热点函数运行阶段是否 发生变化。
[0038] c )如果程序阶段发生了变化,判断热点模块剩余进度是否大于 Progressthreshold设置值,如果大于,则重新进入参数学习期,否则保持参数值不变。
[0039] d)如果程序运行阶段没有发生变化,则保护当前预取控制参数值不变。
[0040] 步骤5若热点模块退出,结束退出该方法。
[0041]最后,还需要注意的是以上列举只是本发明的一个具体实施例。本发明不限于以 上实施例,还可以有许多变形。
【主权项】
1. 一种自适应的帮助线程预取质量控制方法,其特征在于通过多核处理器的硬件性能 计数器(Performance Monitor Unit)部件实时、在线监测帮助线程的预取性能,根据应用 程序的动态阶段行为和预取获益信息可实现对帮助线程的控制参数值进行自适应调整和 优化,本发明方法的步骤如下: 1) 开始:程序初始化相关采样引擎,进入热点模块,如果程序退出了热点模块,则转结 束; 2) 程序热点函数运行阶段和预取质量反馈信息统计; 3) 程序阶段行为指标计算和预取质量获益指标计算; 4 )帮助线程预取质量控制的动态决策; 5)结束:退出该方法。2. 根据权利要求1所述的方法,其特征在于:所述步骤2)中的动态反馈信息主要通过多 核平台的硬件性能计数器PMU进行统计,所采集的性能事件主要包括CPU_UNHALTED_CLOCKS 事件和 INSTRUCTIONS_RETIRED 事件。3. 根据权利要求1所述的方法,其特征在于:所述步骤2)的动态信息反馈采集主要通过 采样技术来实现,通过利用现代处理器所提供的精确事件采样机制(Precise Event Based Sampling,PEBS),设置PMU计数器的采样事件间隔周期八每当P个事件发生后,CPU将其性 能事件状态存在性能计数器中,并产生中断信号,然后在信号中断处理程序中可以对性能 事件计数器读取、处理等操作。4. 根据权利要求1所述的方法,其特征在于:所述步骤3)的阶段检测指标如下: 阶段检测指标为:AP:= ,其中乃表示第i个阶段检 测期,A表示第j个阶段检测期;乃和Λ之间的程序运行区间即为帮助线程运行的参数值应 用期;在阶段检测期乃和巧内,关闭帮助线程预取操作,并采集η个采样间隔内的CPI数据,最 后计算CPI均值来表征检测期乃内的程序阶段特征;当在时,称程序运行阶段发 生变化。5. 根据权利要求1所述的方法,其特征在于:所述步骤3)中,预取获益指标如下: 预取获益指标为 ,ACPJ = CPjfe | i&ra&fe - CPih 丨 eraaftfe ,其中尸y 表示第i个检测阶段;表示阶段A·在关闭预取状态下的CPI采样均值, 表示阶段乃在开启预取状态下的CPI采样均值,二者之差用于判定预 取是否获益;在阶段乃内采集η个执行样本的CPI数据,最后计算CPI均值来表征阶段Λ内主 线程的性能情况,AOT >G时,表示在帮助线程预取的作用下主线程取得了性能提升,即预 取是正获益;当ACP/<G吋,表示在帮助线程预取的作用下使得主线程性能下降,即预取是 负获益。6. 根据权利要求1所述的方法,其特征在于:所述步骤4)自适应调节步骤包括下述步 骤: A、 检测帮助线程预取获益情况; B、 若帮助线程预取反馈信息为负获益,则根据当前热点函数执行进度判断是否进入帮 助线程预取参数值自学习阶段,若热点函数剩余执行时间不足于完成参数值的学习时,则 直接关闭帮助线程预取,否则进入参数自适应学习阶段; C、 若帮助线程预取为正获益时,进行程序执行阶段检测; D、 若程序执行阶段未变化,则仍然保持当前预取控制参数值; E、 若程序执行阶段发生了变化,则根据当前热点模块剩余执行进度决定是否进入预取 参数值的学习阶段。
【文档编号】G06F11/34GK105930209SQ201610219646
【公开日】2016年9月7日
【申请日】2016年4月11日
【发明人】张建勋, 卢卫娜, 王伟, 武志峰, 石连栓
【申请人】天津职业技术师范大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1