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

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

3天内不再提示

各种编程语言的能耗对比

Q4MP_gh_c472c21 来源:嵌入式ARM 作者:老九学堂 2020-12-30 10:27 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

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

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

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

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

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

ee3c74bc-49b8-11eb-8b86-12bb97331649.png

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

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

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

eeae2cce-49b8-11eb-8b86-12bb97331649.png

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

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

具体而言,研究者使用了来自 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 语言)。

f1ca458c-49b8-11eb-8b86-12bb97331649.png

5 种最慢的语言都是解释型语言:

Lua、Python、Perl、Ruby 和 Typescript。

5 种能耗最多的语言也都是解释型语言:

Perl、Python、Ruby、JRuby 和 Lua。

但同时,在使用正则表达式操作字符串时,5 种最节能的语言中有三种(TypeScript、JavaScript 和 PHP)是解释型语言。

但是在其他情况下,它们往往不是很节能。

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

f219709e-49b8-11eb-8b86-12bb97331649.png

研究者称:

平均而言,编译语言需要 125Mb,虚拟机语言需要 285Mb,而解释语言则需要 426Mb。

具体来说,有 4 种解释型语言在这项排名中垫底,这意味着它们消耗了最多的内存空间。

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

实际上,当比较不同范式时,命令式编程通常排在首位。

与面向对象、函数式以及脚本范式的基准程序相比,命令式编程的基准程序平均使用的能源少得多,运行速度也更快。

f30405d2-49b8-11eb-8b86-12bb97331649.png

但是有很多因素需要考虑。

研究者称

很显然,不同的编程范式,甚至同一范式中的语言对能耗、时间、内存的影响也完全不同。

但是,其中哪一个因素最重要取决于你自己的需求情况(例如,后台任务并不总是需要最快的运行时间)。

某些应用程序需要同时考虑两个因素,如能耗和执行时间。

研究者称:

在这样的情况下,C 语言是最佳的解决方案,因为它在这两个方面都很有优势。

如果你想在节省内存的同时节省时间,那么 C 语言、Pascal 和 Go 语言都可以。

如果你正在观察 3 个变量(时间、能耗和内存使用情况),那么结论也是一样的。

但是,如果你只是想在使用更少内存的同时节省能源,那么最好的选择是 C 语言或 Pascal。

f3ec874e-49b8-11eb-8b86-12bb97331649.png

总结一下:

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

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

责任编辑:xj

原文标题:世界上最好的编程语言是哪个?

文章出处:【微信公众号:嵌入式ARM】欢迎添加关注!文章转载请注明出处。

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

    关注

    183

    文章

    7642

    浏览量

    144625
  • 编程
    +关注

    关注

    90

    文章

    3708

    浏览量

    96767

原文标题:世界上最好的编程语言是哪个?

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何调试和编程CW32F030C8T7?支持哪些调试工具和编程语言

    了解如何调试和编程CW32F030C8T7是开发过程中的重要环节。它支持哪些调试工具(如JTAG、串口调试等)和编程语言(如C、C++等)?如何设置和使用这些工具来加速开发过程?
    发表于 12-05 06:48

    为什么单片机还在用C语言编程

    说起单片机我们就会想到C语言,单片机为什么还在用C语言编程?现在有很多很好用的高级语言,如VC、PYTHON、PHP等等,为什么这些语言不能
    发表于 11-28 07:37

    C语言编程技巧

    设计,分层开发代码,便于理解和维护。 ‌8、避免使用GOTO语句‌:尽管GOTO语句在某些情况下仍然有用,但现代编程更倾向于使用函数和循环控制结构,以提高代码的可读性和维护性。 ‌9、利用C语言的灵活性
    发表于 11-27 06:46

    2025年最佳的嵌入式编程语言有哪些呢?

    嵌入式系统是现代科技不可或缺的一部分。它们存在于家用电器、汽车、住宅、医院、商店等各个领域。它们与我们的社会紧密相连。选择合适的语言来构建嵌入式系统对于成功至关重要。那么,2025年最佳的嵌入式编程
    的头像 发表于 11-14 10:27 903次阅读
    2025年最佳的嵌入式<b class='flag-5'>编程</b><b class='flag-5'>语言</b>有哪些呢?

    一文了解Mojo编程语言

    Mojo 是一种由 Modular AI 公司开发的编程语言,旨在将 Python 的易用性与 C 语言的高性能相结合,特别适合人工智能(AI)、高性能计算(HPC)和系统级编程场景。
    发表于 11-07 05:59

    梯形图语言补充编程说明书

    电子发烧友网站提供《梯形图语言补充编程说明书.pdf》资料免费下载
    发表于 07-09 14:14 2次下载

    5CEBA4F23C8NQS现场可编程门阵列(FPGA)芯片

    5CEBA4F23C8NQS现场可编程门阵列(FPGA)芯片5CEBA4F23C8NQS是Intel-ALTERA(原 Altera)研发的Cyclone V系列性能卓越、低能耗的现场可编程门阵列
    发表于 06-11 09:01

    单片机c语言编程实例大全

    单片机c语言编程实例大全_18
    发表于 04-30 16:11 6次下载

    安科瑞能耗管理系统:工厂能耗问题的克星

    在工业生产中,工厂能耗问题一直是企业运营成本的重要组成部分。如何有效管理和降低能耗,不仅关系到企业的经济效益,还与环保和可持续发展息息相关。今天,我们就来聊聊工厂里经常遇到的能耗问题,以及安科瑞
    的头像 发表于 02-11 15:53 686次阅读

    数字电路编程语言介绍

    数字电路编程语言是专门为描述和模拟数字电路而设计的编程语言。它们通常具有以下特点: 硬件描述语言(HDL) :大多数数字电路
    的头像 发表于 01-24 09:39 1392次阅读

    什么是能耗监测管理系统 -如何实现能耗管控能耗监测管理系统?

    什么是能耗监测管理系统 如何实现能耗管控能耗监测管理系统,简而言之,是一个集成了数据采集、处理、分析与展示功能的智能化平台,旨在帮助企业、机构乃至整个城市实现对能源消耗的全面监控与管理。它通过部署在
    的头像 发表于 01-06 14:36 1642次阅读
    什么是<b class='flag-5'>能耗</b>监测管理系统 -如何实现<b class='flag-5'>能耗</b>管控<b class='flag-5'>能耗</b>监测管理系统?

    gitee 支持的编程语言有哪些

    Gitee(码云)是一个基于 Git 的代码托管和研发协作平台,类似于 GitHub 和 GitLab。它支持多种编程语言,允许开发者托管和管理代码,进行版本控制,以及协作开发。以下是一些
    的头像 发表于 01-06 09:50 1108次阅读

    EE-294:Blackfin处理器上的能耗感知编程

    电子发烧友网站提供《EE-294:Blackfin处理器上的能耗感知编程.pdf》资料免费下载
    发表于 01-05 09:32 0次下载
    EE-294:Blackfin处理器上的<b class='flag-5'>能耗</b>感知<b class='flag-5'>编程</b>

    三菱PLC编程语言解析

    三菱电机(Mitsubishi Electric)是全球知名的自动化和制造解决方案供应商,其PLC(可编程逻辑控制器)产品广泛应用于工业自动化领域。三菱PLC编程语言主要基于国际标准IEC
    的头像 发表于 12-26 17:36 2235次阅读

    Triton编译器支持的编程语言

    Triton编译器支持的编程语言主要包括以下几种: 一、主要编程语言 Python :Triton编译器通过Python接口提供了对Triton语言
    的头像 发表于 12-24 17:33 1469次阅读