编辑推荐:
在软件对环境影响日益凸显的当下,为解决软件能耗评估不精准、难以定位高能耗代码段的问题,研究人员开展 Pypen 工具的研究。结果显示,Pypen 能精准识别 “热点” 方法。其意义在于助力优化软件能耗,推动绿色软件发展。
在当今数字化时代,软件已深度融入人们生活的方方面面,从日常使用的手机应用到复杂的工业控制系统,软件的身影无处不在。然而,软件在为人们带来便利的同时,其对环境的影响也逐渐引起关注。软件运行过程中的能源消耗不容小觑,不同的编程语言、算法实现以及开发决策都会对软件能耗产生影响。但以往在程序员培训中,对能源高效计算的重视程度远低于性能优化,且普遍存在一种误解,认为系统运行速度快就意味着能耗低,可事实并非如此。例如,并行处理虽能提升性能,却可能因上下文切换和线程管理导致资源消耗增加。
随着人们环保意识的增强,软件开发组织对软件可持续性的关注度不断提高,其中环境可持续性,即 “绿色软件”,尤为关键。从 “绿色软件”(Green-IN)的角度看,开发低能耗软件意义重大,这需要精确评估软件能耗,确定能耗高的具体代码区域,以便有针对性地进行优化。但现有的软件能耗评估工具存在显著缺陷,多数只能提供软件执行过程中的总体能耗测量,无法准确识别对能耗贡献最大的具体软件组件,使得软件优化工作难以有效开展。
为解决这些问题,研究人员开展了关于 Pypen 的研究。Pypen 是一款利用代码插装(instrumentation)技术收集软件执行详细数据的分析工具,它与 FEETINGS 框架的工具生态系统相集成,旨在为开发人员提供更精确的软件能耗信息,帮助他们聚焦于优化软件中高能耗的特定部分。该研究成果发表在《Computer Standards 》。
研究人员在研究过程中,主要运用了以下关键技术方法:一是代码插装技术,通过在代码中插入额外代码来记录系统信息,且不改变原程序功能,实现对软件执行行为的精准追踪;二是采用指令插入和面向方面编程两种策略进行代码插装,前者直接在方法中嵌入指令,后者将横切关注点作为独立模块处理,提高代码的模块化和可维护性;三是借助 FEETINGS 框架获取硬件组件的功耗数据,与 Pypen 收集的执行数据相结合,分析软件能耗情况。
研究结果
- 算法能耗差异分析:研究人员以开源 Java 数据挖掘库 spmf 中的 Eclat 和 dEclat 两种项集挖掘算法为研究对象,对比它们在发现频繁项集任务中的能耗差异。结果表明,dEclat 算法在执行时间和能源效率上均优于 Eclat 算法。例如,在 RecordLink 数据集、最小支持度(minsup)为 10% 的情况下,dEclat 算法的执行时间为 5.33 秒,能耗为 77.58 焦耳;而 Eclat 算法执行时间长达 30.06 秒,能耗高达 460.40 焦耳。
- 高能耗方法定位:Pypen 能够准确识别软件中高能耗的 “热点” 方法。在 Eclat 算法中,
processEquivalenceClass()方法能耗极高,而 dEclat 算法通过存储事务差异(“diffsets”),大幅减少了该方法的数据处理量,从而降低了能耗。如在 RecordLink_10 数据集下,Eclat 算法中该方法的总能耗为 23565.30 焦耳,而 dEclat 算法仅为 706.94 焦耳。此外,dEclat 算法中performAND()方法的能耗也显著降低,不过performANDFirstTime()方法在首次执行时能耗有所增加,但整体上 dEclat 算法仍更高效。
- 影响能耗因素探究:研究发现,增加
minsup阈值可减少算法需处理的项集数量,从而降低整体能耗。不同数据集对算法能耗影响明显,像 USCensus 这样数据量更大、更复杂的数据集,会使calculateSupportSingleItems()方法能耗增加。例如,在 dEclat 算法、minsup为 70% 时,该方法在 RecordLink 数据集上的能耗为 2.42 焦耳,在 USCensus 数据集上则升至 1.07 焦耳(因数据量差异导致计算量增加)。
研究结论与讨论
Pypen 的研究成果意义重大。它不仅验证了不同算法在能耗方面的差异,还证明了识别软件中 “热点” 方法的可行性。通过精准定位高能耗方法,开发人员能够有针对性地优化软件,提高能源利用效率,减少软件对环境的影响,为绿色软件的发展提供有力支持。
尽管 Pypen 在软件能耗分析方面表现出色,但也存在一些问题。代码插装技术不可避免地会带来额外开销,影响程序实际性能。不过,Pypen 通过只追踪方法而非每个代码基本块,以及在初步分析阶段让用户选择感兴趣的方法进行插装等方式,有效降低了这种开销。未来,研究人员计划进一步扩展 Pypen 的功能,如支持更多编程语言(如 C 语言),与更多测量环境集成(包括软件工具 Intel PCM 等),运用机器学习模型分析高能耗代码片段的原因,并实现自动重构优化代码,以进一步提高软件的能源效率。同时,Pypen 在训练生成式人工智能(GenAI)识别能耗结构和反模式方面也具有潜在应用价值,有望推动更广泛的可持续代码开发。