本发明涉及大规模计算机系统的功耗测量技术,具体涉及一种多计算节点上cpu和内存的动态自适应功耗测量方法、系统及介质。
背景技术:
功耗问题已成为限制计算机性能提高的重要瓶颈,同时也是影响系统可靠性和稳定性的重要因素。随着超算计算机系统的规模越来越大,高功耗和能效问题尤为突出,出现了多种资源管理方法或软件优化方法用于降低计算机系统的功耗,提升系统的能效。然而对于这些优化方法来说,是否对计算部件的功耗进行准确测量是重要的前提条件之一,是影响优化方法评估的重要因素。cpu和内存是计算节点中的重要部件,有大量针对cpu和内存的低功耗优化方法。能否提供高精度的、低开销的功耗测量方法,已成为影响cpu和内存功耗优化效果的重要因素。功耗测量数据越准确,低功耗优化评估结果可信度越高。然而要想对cpu和内存进行准确的实时功耗获取,存在一定的难度。
目前存在很多基于硬件的功耗测量方法,尽管这种方法可以获得十分精确的实时功耗值,但是部署功耗测量仪器的复杂度较大,有时还受限于实际系统的条件环境。通常可以在主板上部署功耗监测器,来测量cpu和内存部件相关的电流和电压,从而获取实时功耗值。实际在主板上部署监测器,往往需要对主板进行专门的电路设计,其成本较高。同时对于已经运行的系统,也难以通过用此方法部署功耗监测。
在系统内实际部署功耗测量设备存在一定的复杂度,一些cpu厂商选择提供给用户一些工具,来方便他们实时获取cpu和内存的功耗值。主要是采用内置一些功耗测量接口的方式,提供给用户标准化的接口来获取功耗值,如intel的runningaveragepowerlimit(rapl)、amd的功耗管理系统等。尽管这类工具的实时功耗测量精度往往较高,rapl可以每1ms获得一个功耗值,但是存在运行开销大的问题。且相应的功耗管理系统只适用于指定的处理器型号,例如rapl只能用于intel的处理器,对于一些其他处理器厂商,无法直接采用intel的功耗管理工具rapl,功耗测量就得另觅途径了,这种方法的局限性显而易见。
相比来说,更加通用的方法就是建立cpu和内存功耗模型。基于pmc事件建立cpu和内存的功耗模型是广泛使用的一种,通过功耗模型进行实时功耗值的获取,这类方法的准确度相比前两种往往较低,但是通用性好、实现简单、运行开销较低,使用仍比较广泛。目前常见的使用性能监控计数器(pmc)来建立的功耗模型主要包括线性模型、非线性模型、人工神经网络算法建立的模型等。这些模型一旦建立之后,参数固定,无需更新和调整,因此模型的准确度很大程度上取决于用于建立模型时采样的数据样本,这给特征变化较大的应用程序的准确功耗度量带来了挑战。
如何使我们的实时功耗能够适应这种程序行为的多样性,如何自动地匹配程序行为实时的较大浮动变化是提高功耗测量精度要解决的问题。针对这一问题,动态自适应技术是有效的手段之一,它通过自适应地选择模板实现求解的高精确性,克服程序行为变化的多样性;通过固定时间间隔地启动实现自动匹配程序行为的实时变化。动态自适应技术已广泛用在许多类似的场景中。但是,具体如何将动态自适应技术用于功耗建模和实时监测方面,目前还很少有相关研究,仍然是一项亟待解决的关键技术问题。
技术实现要素:
本发明要解决的技术问题:针对现有技术的上述问题,为了实现计算节点内细粒度部件级(指cpu和内存)的功耗测量,提供一种多计算节点上cpu和内存的动态自适应功耗测量方法、系统及介质,本发明能够获得节点内部件级精确的cpu功耗和内存功耗,提高了功耗监控精度,与在每个节点上部署基于的硬件功耗监控相比,则大大减小了系统开销。
为了解决上述技术问题,本发明采用的技术方案为:
一种多计算节点上cpu和内存的动态自适应功耗测量方法,该方法包括以间隔时间δt周期执行下述步骤:
1)采集一次pmc数据,判断是否已有当前选择的局部功耗模型,若已有当前选择的局部功耗模型,则采用当前选择的局部功耗模型计算cpu、内存及节点功耗p0model;否则,执行步骤3);
2)记实际测量的节点功耗p0,计算实际测量的节点功耗p0、局部功耗模型计算的节点功耗p0model之间的误差mre,判断误差mre小于预设的阈值mrestd、距离上一次选择局部功耗模型的时间小于预设的时间矩阵δt是否同时成立,若同时成立,则将当前选择的局部功耗模型计算cpu、内存作为测量结果输出,本周期执行结束并退出;否则,执行步骤3);
3)计算局部功耗模型库中所有局部功耗模型的平均误差;
4)计算所有局部功耗模型的平均误差,选择最小的平均误差对应的局部功耗模型i,i为局部功耗模型在局部功耗模型库中的序号,判定当前计算机运行的程序与局部功耗模型i对应的样本程序最相似;局部功耗模型i的平均误差mrei小于预设的阈值mrestd是否成立,若成立,则采用局部功耗模型i计算cpu、内存作为测量结果输出,本周期执行结束并退出;否则,判定局部功耗模型库中不存在合适的局部功耗模型;
5)通过建模节点根据当前运行的程序建立新的局部功耗模型,并加入到局部功耗模型库中。
可选地,步骤2)中误差mre的计算函数表达式为:
上式中,p0model为局部功耗模型计算的节点功耗,p0为实际测量的节点功耗。
可选地,步骤4)中平均误差的计算函数表达式为:
上式中,mrek表示局部功耗模型k的平均误差,k为局部功耗模型在局部功耗模型库中的序号,
可选地,步骤1)之前还包括通过建模节点根据预设的样本程序建立新的局部功耗模型,并加入到局部功耗模型库中以初始化局部功耗模型库的步骤。
可选地,所述建立新的局部功耗模型的步骤包括:
s1)在建模节点运行当前执行的程序或预设的样本程序时,采集平台提供的所有可用的pmc及cpu、内存、节点功耗;
s2)计算所有pmc分别与cpu、内存功耗的相关系数的绝对值,选择相关系数的绝对值大于预设阈值的所有pmc,作为cpu和内存各自的备选pmc;
s3)计算备选pmc两两之间的相关系数,对任意两个相关系数绝对值大于预设阈值的pmc,删除其中与cpu或内存相关系数较小的pmc,最终剩下的所有pmc作为用来功耗建模的参数,对节点功耗建模的pmc为用于cpu和内存建模pmc的并集;
s4)针对cpu和内存分别选取若干个不同的pmc,记为
s5)在建模节点运行当前执行的程序或预设的样本程序时,以时间δt为间隔,采集cpu和内存及节点功耗值和上一步中选取的所有pmc,记采集数据的次数为t,第i个器件的第s个pmc的t个值组成的向量记为cs,i,功耗记为pi,节点功耗向量记为p0;
s6)根据采集数据使用最小二乘法计算由pmc得到第i个器件功耗的系数向量wi;
s7)根据第i个器件功耗的系数向量wi分别为cpu、内存及节点功耗建立线性模型,从而得到新的局部功耗模型。
可选地,步骤s6)中第i个器件功耗的系数向量wi的计算函数表达式为:
上式中,xi为当前时刻的pmc组成的向量,xi=[1,c0,i,c1,i,c2,i],1为常数向量,对应模型中的常系数,c0,i~c2,i分别为节点、cpu、内存的第s个pmc的t个值组成的向量,pi为采集得到的第i个器件的功耗。
可选地,步骤s7)中建立的线性模型的函数表达式为:
上式中,xi为当前时刻的pmc组成的向量,pimodel表示第i个器件的线性模型。
此外,本实施例还提供一种多计算节点上cpu和内存的动态自适应功耗测量系统,包括包含多计算节点的计算机设备,该计算机设备被编程或配置以执行所述多计算节点上cpu和内存的动态自适应功耗测量方法的步骤,或者该计算机设备的存储器上存储有被编程或配置以执行所述多计算节点上cpu和内存的动态自适应功耗测量方法的计算机程序。
此外,本实施例还提供一种多计算节点上cpu和内存的动态自适应功耗测量系统,包括包含多计算节点的计算机设备,该计算机设备中的多计算节点包括普通计算节点和建模节点,所述建模节点中包含用于采集cpu和内存功耗的功耗监测设备,该计算机设备被编程或配置以执行所述多计算节点上cpu和内存的动态自适应功耗测量方法的步骤,或者该计算机设备的存储器上存储有被编程或配置以执行所述多计算节点上cpu和内存的动态自适应功耗测量方法的计算机程序。
此外,本实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有被编程或配置以执行所述多计算节点上cpu和内存的动态自适应功耗测量方法的计算机程序。
和现有技术相比,本发明具有下述优点:每个计算节点功耗包括cpu功耗、内存功耗和其余部分功耗,在无硬盘的一类计算节点上,其余部分功耗指单个节点功耗除去cpu功耗和内存功耗之外的部分,该值在实际情况下相对稳定。因此,本发明在一个计算节点(建模节点)上部署cpu和内存功耗监测设备,利用不同程序运行时监控获取的系统性能计数器(pmc)及cpu和内存实时功耗,为不同特征的程序分别建立局部功耗模型,并在多节点实时运行过程中,根据当前运行程序特征,动态自适应选择合适的模型用于当前程序的cpu和内存功耗实时测量,采用本发明可以实现计算节点细粒度的功耗监测,与传统静态单一功耗建模的方式相比,本发明能够获得节点内部件级精确的cpu功耗和内存功耗,提高了功耗监控精度。与在每个节点上部署基于的硬件功耗监控相比,则大大减小了系统开销。
附图说明
图1为本发明实施例方法的基本流程示意图。
图2为本发明实施例方法的原理示意图。
图3为本发明实施例方法的功能模块实现架构示意图。
具体实施方式
如图1和图2所示,本实施例多计算节点上cpu和内存的动态自适应功耗测量方法包括以间隔时间δt周期执行下述步骤:
1)采集一次pmc数据,判断是否已有当前选择的局部功耗模型,若已有当前选择的局部功耗模型,则采用当前选择的局部功耗模型计算cpu、内存及节点功耗p0model;否则,执行步骤3);
2)记实际测量的节点功耗p0,计算实际测量的节点功耗p0、局部功耗模型计算的节点功耗p0model之间的误差mre,判断误差mre小于预设的阈值mrestd、距离上一次选择局部功耗模型的时间小于预设的时间矩阵δt是否同时成立,若同时成立,则将当前选择的局部功耗模型计算cpu、内存作为测量结果输出,本周期执行结束并退出;否则,执行步骤3);
3)计算局部功耗模型库中所有局部功耗模型的平均误差;
4)计算所有局部功耗模型的平均误差,选择最小的平均误差对应的局部功耗模型i,i为局部功耗模型在局部功耗模型库中的序号,判定当前计算机运行的程序与局部功耗模型i对应的样本程序最相似;局部功耗模型i的平均误差mrei小于预设的阈值mrestd是否成立,若成立,则采用局部功耗模型i计算cpu、内存作为测量结果输出,本周期执行结束并退出;否则,判定局部功耗模型库中不存在合适的局部功耗模型;
5)通过建模节点根据当前运行的程序建立新的局部功耗模型,并加入到局部功耗模型库中。
本实施例中,步骤2)中误差mre的计算函数表达式为:
上式中,p0model为局部功耗模型计算的节点功耗,p0为实际测量的节点功耗。
本实施例中,步骤4)中平均误差的计算函数表达式为:
上式中,mrek表示局部功耗模型k的平均误差,k为局部功耗模型在局部功耗模型库中的序号,
本实施例多计算节点上cpu和内存的动态自适应功耗测量方法仅仅需要在单个节点上部署cpu和内存功耗监测设备,即可实现对计算机系统中所有计算节点上cpu和内存的动态自适应功耗测量。
如图2所示,本实施例中步骤1)之前还包括通过建模节点根据预设的样本程序建立新的局部功耗模型,并加入到局部功耗模型库中以初始化局部功耗模型库的步骤。
本实施例中,建立新的局部功耗模型的步骤包括:
s1)在建模节点运行当前执行的程序或预设的样本程序时,采集平台提供的所有可用的pmc及cpu、内存、节点功耗;
s2)计算所有pmc分别与cpu、内存功耗的相关系数的绝对值,选择相关系数的绝对值大于预设阈值的所有pmc,作为cpu和内存各自的备选pmc;作为一种可选的实施方式,本实施例中预设阈值取值为0.5,即选择相关系数大于0.5的所有pmc,作为cpu和内存各自的备选pmc。本实施例中,相关系数具体为pearson相关系数,pearson相关系数为已知的相关系数,其具体计算函数表达式在此不再详述,此外也可以采用其他相关系数,同样能够实现所有pmc分别与cpu、内存功耗的相关特性描述和计算。
s3)计算备选pmc两两之间的相关系数,对任意两个相关系数绝对值大于预设阈值的pmc,删除其中与cpu或内存相关系数较小的pmc,最终剩下的所有pmc作为用来功耗建模的参数,对节点功耗建模的pmc为用于cpu和内存建模pmc的并集;
s4)针对cpu和内存分别选取若干个不同的pmc,记为
s5)在建模节点运行当前执行的程序或预设的样本程序时,以时间δt为间隔,采集cpu和内存及节点功耗值和上一步中选取的所有pmc,记采集数据的次数为t,第i个器件的第s个pmc的t个值组成的向量记为cs,i,功耗记为pi,节点功耗向量记为p0;
s6)根据采集数据使用最小二乘法计算由pmc得到第i个器件功耗的系数向量wi;
s7)根据第i个器件功耗的系数向量wi分别为cpu、内存及节点功耗建立线性模型,从而得到新的局部功耗模型。
本实施例中,步骤s6)中第i个器件功耗的系数向量wi的计算函数表达式为:
上式中,xi为当前时刻的pmc组成的向量,xi=[1,c0,i,c1,i,c2,i],1为常数向量,对应模型中的常系数,c0,i~c2,i分别为节点、cpu、内存的第s个pmc的t个值组成的向量,pi为采集得到的第i个器件的功耗。
本实施例中,步骤s7)中建立的线性模型的函数表达式为:
上式中,xi为当前时刻的pmc组成的向量,pimodel表示第i个器件的线性模型(局部功耗模型)。
如图3所示,本实施例中方法中的功能模块主要包括局部模型库、模型构建器、硬件性能和功耗数据采集器、自适应功耗模型匹配器。其中:
局部模型库用于存储局部功耗模型,并提供局部功耗模型的查询和调用服务。
模型构建器用于执行前述步骤s1)~s7)来建立新的局部功耗模型,且建立的局部功耗模型(局部模型)会加入局部模型库。
硬件性能和功耗数据采集器用于实现硬件性能和功耗数据采集,在包含建模节点在内的计算节点上可采集平台功耗和pmc等数据,在建模节点上比普通节点还额外包含通过cpu和内存的功耗监测设备采集cpu和内存的功耗。
自适应功耗模型匹配器则用于执行前述的步骤4),根据所有局部功耗模型的平均误差来实现自适应功耗模型匹配选择最佳的局部功耗模型。
本实施例多计算节点上cpu和内存的动态自适应功耗测量方法的基本原理如下:程序行为的多样性体现在程序被明显地划分为计算密集型和访存密集型两大类,在计算密集型程序中,往往需要更多考虑不同的运算指令类型的差异对cpu、内存功耗的影响,相比之下缓存失效对功耗影响较小;但在访存密集型程序中,缓存失效对功耗影响就远远大于cpu指令类型差异的影响。因此,本实施例方法通过建立单一模型对不同程序类型加以区分,可以更好适应程序行为变化的多样性,提高功耗测量在局部范围的精度。进而,在全局范围内采用动态自适应方法实现自动匹配已建立的单一的局部功耗模型,提升整体功耗测量精度。基于上述基本思路,本实施例方法首先建立大量适用于单一程序行为特征的单一的局部功耗模型(主要是线性模型,且参数较少);其次,在程序运行过程中功功耗,定期判断当前程序的行为特征,从已建立的众多单一的局部功耗模型中挑选出适合当前程序特征的功耗模型,从而能够提高功耗测量精度。针对目前超级计算机系统能量度量与评测的准确性和精确性需求,本发明能够解决计算机系统中计算节点内部件级的功耗的精确测量问题,为超级计算机系统的能量优化方法提供评测环境,提供精确到计算节点内处理器和内存级的能量度量与预测工具,为超级计算机系统能量优化、能量有效性等方面研究提供开销小、准确性高的能量度量方法。
综上所述,本实施例方法提供一种新的非嵌入式超级计算机系统节点内部件级的功耗分解方法,针对在超级计算机系统上运行的并行程序,实时监测其运行阶段的计算节点的功耗和节点内部件的相关状态信息,采用软件的方式拟合计算得到部件的功耗,从而实现计算节点的功耗分解。本实施例方法的技术方案为测量系统节点的实时功耗和分别与cpu、内存功耗相关的状态指标,使用状态指标对节点功耗进行拟合得到每个状态指标的系数,再分别通过与cpu、内存相关的状态指标与其对应系数相乘累加得到各自的功耗,从而实现计算节点的功耗分解。与传统静态单一功耗建模的方式相比,本实施例方法能够获得节点内部件级精确的cpu功耗和内存功耗,提高了功耗监控精度,与在每个节点上部署基于的硬件功耗监控相比,则大大减小了系统开销。
此外,本实施例还提供一种多计算节点上cpu和内存的动态自适应功耗测量系统,包括包含多计算节点的计算机设备,该计算机设备被编程或配置以执行前述多计算节点上cpu和内存的动态自适应功耗测量方法的步骤,或者该计算机设备的存储器上存储有被编程或配置以执行前述多计算节点上cpu和内存的动态自适应功耗测量方法的计算机程序。
此外,本实施例还提供一种多计算节点上cpu和内存的动态自适应功耗测量系统,包括包含多计算节点的计算机设备,该计算机设备中的多计算节点包括普通计算节点和建模节点,所述建模节点中包含用于采集cpu和内存功耗的功耗监测设备,该计算机设备被编程或配置以执行前述多计算节点上cpu和内存的动态自适应功耗测量方法的步骤,或者该计算机设备的存储器上存储有被编程或配置以执行前述多计算节点上cpu和内存的动态自适应功耗测量方法的计算机程序。
此外,本实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有被编程或配置以执行前述多计算节点上cpu和内存的动态自适应功耗测量方法的计算机程序。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。