当前位置:首页 > > 嵌入式微处理器
[导读]上次跟大家分享了即将淘汰的编程语言,看来大家对于编程语言的好坏,都很有自己的见解啊。但我们一直都说哈,每个语言都有自己的优势。那今天我们再引入一个比较的概念——耗电量。


上次跟大家分享了即将淘汰的编程语言,看来大家对于编程语言的好坏,都很有自己的见解啊。


但我们一直都说哈,每个语言都有自己的优势。


那今天我们再引入一个比较的概念——耗电量。


在手机快没电时,管理软件往往会提醒我们关掉某些耗电量高的应用。


可见,除了硬件厂商外,软件厂商也应该重视能耗问题。(企业级需求!)


咱们今天就看一篇文章,在这篇文章中,研究者分析了一下各种编程语言的能耗对比。



当能耗也成为了一个重要指标,我们要怎么选择编程语言?


2017 年,由 6 名葡萄牙研究者组成的团队决定对这一问题进行调查并发表了一篇名为《Energy Efficiency Across Programming Languages》的论文。


他们用 27 种语言写出了 10 个问题的解决方案(遵循同样的算法),然后运行这些方案,记录每种编程语言消耗的电量以及速度和内存使用情况,得到的排序结果如下图所示:



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


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


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


运行各种基准测试非常重要,因为它们的结果会由于所执行的测试而有所不同。


例如,总体而言,C 语言被认为是最快的,也是最节能的。


大家把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)的台式机上运行。


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


这篇论文认真地研究了一个普遍的假设:速度越快的程序消耗的能源就越少。


研究者指出,其实,这并不像物理学定律 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),而其余语言则彻底散开。


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


编译型语言的优点


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


平均而言,编译语言需要花费 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。



总结一下:


不同的模式,考察角度不一样,得出的结论也会有差距,一门语言好不好还是要根据自己的业务实际需求去判断。


但是,C语言就是最厉害的!


END

来源:老九学堂

版权归原作者所有,如有侵权,请联系删除。

推荐阅读

成功为华为“续命:中国芯片之父张汝京

一个工程师的“噩梦”:刚分清CPU和GPU,却发现还有……

这位“华为天才少年”,竟然要我用“充电宝”打《只狼》


免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

嵌入式ARM

扫描二维码,关注更多精彩内容

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭