0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

分析各种编程语言的能耗对比

璟琰乀 来源:机器之心 作者:机器之心 2020-11-05 09:44 次阅读

手机快没电时,管理软件往往会提醒我们关掉某些耗电量高的应用。可见,除了硬件厂商外,软件厂商也应该重视能耗问题。在这篇文章中,研究者分析了一下各种编程语言的能耗对比。

当能耗也成为了一个重要指标,我们要怎么选择编程语言?2017 年,由 6 名葡萄牙研究者组成的团队决定对这一问题进行调查并发表了一篇名为《Energy Efficiency Across Programming Languages》的论文。他们用 27 种语言写出了 10 个问题的解决方案(遵循同样的算法),然后运行这些方案,记录每种编程语言消耗的电量以及速度和内存使用情况,得到的排序结果如下图所示:

通过这项研究,他们得出了一些有意思的结论,比如运行速度快的语言未必能耗小。

在论文中,作者还根据编程语言的执行类型(编译、虚拟机或解释)和编程范式(命令式、函数式、面向对象和脚本)对结果进行了分析。

具体而言,研究者使用了来自 Computer Language Benchmarks Game(一个用于比较性能的免费软件项目,其中包含一组标准的算法问题和用于运行测试的框架)的 10 个问题,使得研究更有可比性和代表性。

运行各种基准测试非常重要,因为它们的结果会由于所执行的测试而有所不同。例如,总体而言,C 语言被认为是最快的,也是最节能的。但是在涉及扫描 DNA 数据库中特定基因序列的基准测试中,Rust 是最节能的,而 C 语言位居第三。

即使在同一测试中,「最佳」语言也取决于你的标准。比如在一个 C 排第二、Rust 排第一的测试中,如果按内存使用情况对结果进行排序,Rust 会跌掉 9 个位次。而在一个 Fortran 能效第二高的测试中,如果结果按照运行时间排序,它也下降了 6 个位次。

研究者指出,他们严格遵守 CLBG 项目关于编译器版本和最佳优化标志的指导方针。功耗的测量使用一个来自英特尔的工具——Running Average Power Limit,每个程序运行 10 遍。作者表示,「这是为了减少冷启动和缓存效应的影响,并能够分析测量的一致性,避免异常值」。

为了增强一致性,所有测试都在一个运行 Linux Ubuntu Server 16.10(内核版本 4.8.0-22-generic)的台式机上运行。

01

运行速度快的语言更节能吗?

这篇论文认真地研究了一个普遍的假设:速度越快的程序消耗的能源就越少。研究者指出,其实,这并不像物理学定律 E(nergy) = T(ime) x P(ower) 那么简单。这是因为电力并不按照一定的速率进行消耗。在其他研究者的一项研究中,一个 Chapel 程序的运行时间比另一个用 Pascal 写的等价程序少 55%,但测量结果却表明,那个 Pascal 程序所用的能量反而要少 10%。

因此,尽管普遍认为程序运行速度更快时能耗会下降,但研究者明确指出「速度更快的语言并不总是更节能。」

这可能是一个很难回答的问题,因为功耗受到许多因素的影响(包括编译器的质量和使用的库)。但最终,研究人员总结出,无论是编译型语言、解释型语言还是虚拟机,其实大部分能量(平均 88% 左右)是由 CPU 消耗的。

在对实验结果分析研究之后,研究者还得出结论:DRAM 的峰值使用量与能耗之间「几乎没有关系」。该研究为一个长期存在的问题提供了答案:「速度更快就更环保吗?」是的,的确是这样,在按照执行时间进行排序时,前 5 种最节能的语言依然排在前 5 名,而且在能量和时间值方面的差距很小。

实际上,在 10 个基准问题测试中,有 9 个得分最高者(速度和能源效率两方面)是速度最快和能源效率最高的三种语言之一,这并没有让研究者感到惊讶。众所周知,就像研究中的数据所显示的一样,C、C++ 和 Rust 这三种排名最靠前的语言都经过了大量优化,在执行性能上都比较高效。

但是按照运行时间对其他 24 种语言进行排名时,情况就不一样了。只有 4 种语言保持相同的能耗和时间排名(OCaml、Haskel、Racket 和 Python),而其余语言则彻底散开。

即使在单项基准测试中,也存在速度快但不节能的语言。

02

编译型语言的优点

编译型语言似乎是最节能和运行最快的语言,作者甚至可以在论文中用数字量化这种差异。

平均而言,编译语言需要花费 120J 能量来运行解决方案,而虚拟机和解释型语言要分别花费 576J 和 2365J。

在比较执行时间时,研究者也采用了相同的精度,得出的结论是:平均而言,编译语言花费 5103 毫秒,虚拟机语言花费 20623 毫秒,解释型语言花费 87614 毫秒。

两项排名中的前 4 名均为编译型语言(有一个例外,Java 语言)。

5 种最慢的语言都是解释型语言:Lua、Python、Perl、Ruby 和 Typescript。5 种能耗最多的语言也都是解释型语言:Perl、Python、Ruby、JRuby 和 Lua。

但同时,在使用正则表达式操作字符串时,5 种最节能的语言中有三种(TypeScript、JavaScript 和 PHP)是解释型语言。尽管在其他情况下,它们往往不是很节能。

编译型语言在占用内存最少的排名中也占据了前 5 名。

研究者称:「平均而言,编译语言需要 125Mb,虚拟机语言需要 285Mb,而解释语言则需要 426Mb。」具体来说,有 4 种解释型语言在这项排名中垫底,这意味着它们消耗了最多的内存空间。

「如果按照它们的编程范式进行排序,命令式语言需要 116Mb,面向对象语言需要 249Mb,函数式编程语言是 251Mb,脚本需要 421Mb。」

实际上,当比较不同范式时,命令式编程通常排在首位。与面向对象、函数式以及脚本范式的基准程序相比,命令式编程的基准程序平均使用的能源少得多,运行速度也更快。

但是有很多因素需要考虑。研究者称「很显然,不同的编程范式,甚至同一范式中的语言对能耗、时间、内存的影响也完全不同」。但是,其中哪一个因素最重要取决于你自己的需求情况(例如,后台任务并不总是需要最快的运行时间)。

某些应用程序需要同时考虑两个因素,如能耗和执行时间。研究者称:「在这样的情况下,C 语言是最佳的解决方案,因为它在这两个方面都很有优势。」如果你想在节省内存的同时节省时间,那么 C 语言、Pascal 和 Go 语言都可以。如果你正在观察 3 个变量(时间、能耗和内存使用情况),那么结论也是一样的。但是,如果你只是想在使用更少内存的同时节省能源,那么最好的选择是 C 语言或 Pascal。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7575

    浏览量

    134823
  • 编程
    +关注

    关注

    88

    文章

    3528

    浏览量

    93361
收藏 人收藏

    评论

    相关推荐

    plc编程st语言怎么编

    PLC(可编程逻辑控制器)编程中的ST(Structured Text)语言是一种高级编程语言,它类似于Pascal或C
    的头像 发表于 08-25 10:05 432次阅读

    PLC的编程方式及编程语言

    在工业自动化领域,PLC(Programmable Logic Controller,可编程逻辑控制器)因其强大的控制功能和灵活的编程方式而得到了广泛应用。PLC的编程方式和编程
    的头像 发表于 06-27 14:08 453次阅读

    abb工业机器人的编程语言是什么

    ABB工业机器人的编程语言主要是RAPID(Robot Application Programming Interface for Development),它是一种高级编程语言,专门
    的头像 发表于 06-16 16:49 1769次阅读

    能耗分析与远程抄表是什么?

    一、引言在21世纪的数字化时代,能耗分析和远程抄表已成为现代能源管理的重要组成部分。这两项技术不仅提高了能源效率,还为企业和个人提供了更精细的能源使用数据,从而实现更科学的节能减排。二、能耗
    的头像 发表于 06-15 14:22 173次阅读
    <b class='flag-5'>能耗</b><b class='flag-5'>分析</b>与远程抄表是什么?

    PLC编程语言和C语言的区别

    在工业自动化和计算机编程领域中,PLC(可编程逻辑控制器)编程语言和C语言各自扮演着重要的角色。尽管两者都是
    的头像 发表于 06-14 17:11 1747次阅读

    PLC常用编程语言有哪些

    在工业自动化领域,PLC(Programmable Logic Controller,可编程逻辑控制器)作为一种核心控制设备,其编程语言的选择对于控制系统的设计、开发和维护具有重要影响。PLC的
    的头像 发表于 06-14 16:58 803次阅读

    中心能耗分析及节能策略研究与应用

    摘要:数据中心节能降耗管理和智能化运维提供支撑。 关键词:数据中心能耗;数据分析;关联分析;节能研究;皮尔逊相关系数 安科瑞薛瑶瑶18701709087 0、引言 近些年,国内大型数据中心的运营管理
    的头像 发表于 04-07 13:32 209次阅读
    中心<b class='flag-5'>能耗</b><b class='flag-5'>分析</b>及节能策略研究与应用

    fpga用什么语言编程

    FPGA(现场可编程门阵列)的编程主要使用硬件描述语言(HDL),其中最常用的是Verilog HDL和VHDL。
    的头像 发表于 03-14 18:17 2229次阅读

    fpga用的是什么编程语言 fpga用什么语言开发

    fpga用的是什么编程语言 FPGA(现场可编程逻辑门阵列)主要使用的编程语言是硬件描述语言(H
    的头像 发表于 03-14 17:09 2928次阅读

    fpga芯片用什么编程语言

    FPGA芯片主要使用的编程语言包括Verilog HDL和VHDL。这两种语言都是硬件描述语言,用于描述数字系统的结构和行为。
    的头像 发表于 03-14 16:07 1325次阅读

    plc编程语言与c语言的联系 c语言和PLC有什么区别

    PLC编程语言与C语言的联系 PLC(可编程逻辑控制器)是一种针对自动化控制系统的特殊计算机。PLC编程
    的头像 发表于 02-05 14:21 3296次阅读

    企业节能管理系统 能耗分析系统

    ,通过数据分析、挖掘,帮助企业针对各种能源需求及实际用能情况、产品能源单耗、工序能耗、重点设备用能等进行能耗统计、同环比分析、能源成本
    的头像 发表于 01-29 14:31 328次阅读
    企业节能管理系统 <b class='flag-5'>能耗</b><b class='flag-5'>分析</b>系统

    脚本语言编程语言的区别

    脚本语言编程语言是计算机语言的两个主要分类。尽管两者都是用于编写计算机程序的工具,但它们在设计和运行方式上存在一些显著的区别。下面将详细探讨脚本
    的头像 发表于 11-22 14:33 2596次阅读

    Python编程语言属于什么语言

    Python编程语言属于高级编程语言中的一种。它是一种通用、面向对象、解释型编程语言。Pytho
    的头像 发表于 11-22 14:31 1189次阅读

    基于Rust开发的编程语言

    Move 是一门由 Rust 语言开发的一门面向资产的编程语言,最早由 Facebook (现 Meta )投入大量的人力物力开发,用于 Libra (现 Dime )项目,处理全球性大规模支付系统的
    的头像 发表于 11-17 12:30 592次阅读