点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

本文转自|OpenCV学堂

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

当能耗也成为了一个重要指标,我们要怎么选择编程语言?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)的台式机上运行。

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

这篇论文认真地研究了一个普遍的假设:速度越快的程序消耗的能源就越少。研究者指出,其实,这并不像物理学定律 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。

参考链接:

https://thenewstack.io/which-programming-languages-use-the-least-electricity/

https://greenlab.di.uminho.pt/wp-content/uploads/2017/10/sleFinal.pdf?utm_source=thenewstack&utm_medium=website&utm_campaign=platform

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

哪种编程语言又快又省电?有人对比了27种语言相关推荐

  1. c 语言 pthread_create_哪种编程语言又快又省电?有人对比了27种语言

    原标题:哪种编程语言又快又省电?有人对比了27种语言 本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载 选自thenewstack,作者:David Cassel,编 ...

  2. 运行速度最快的计算机语言,哪种编程语言又快又省电?有人对比了27种语言

    选自thenewstack 作者:David Cassel 机器之心编译 编辑:小舟.张倩 在手机快没电时,管理软件往往会提醒我们关掉某些耗电量高的应用.可见,除了硬件厂商外,软件厂商也应该重视能耗问 ...

  3. 大数据开发要学哪种编程语言_每个软件开发人员都应该学习的5种编程语言

    大数据开发要学哪种编程语言 我读过某个地方,程序员应该每年学习一种新的编程语言(虽然我认为它是完整的代码 ,但不确定),但是如果您不能这样做,我建议至少学习以下五种编程语言,以便在您的语言中做得更好事 ...

  4. HTML5定稿了,终于有一种编程语言开发的程序可以在Android和IOS两种设备上运行了

    过去这些年,HTML5 颠覆了 PC 互联网的格局,优化了移动互联网的体验,接下来,HTML5 将颠覆原生 App 世界.这听起来有点危言耸听,但若认真分析 HTML5 的发展史,你会发现,这个世界的 ...

  5. 2022年最值得学习的 5 种编程语言,你有在学习吗?

    点击上方蓝字关注我,了解更多咨询 作为一个初学者电脑程序员,很多人都会想知道当下主流的编程语言有哪些,哪些行业和公司都在用它们,因为这些信息可以帮助你了解想要学习的内容,使你更接近最终想用代码完成的事 ...

  6. 2021年最火的计算机语言,2021 年,最流行三种编程语言,你知道嘛??

    原标题:2021 年,最流行三种编程语言,你知道嘛?? 怎样判断哪种编程语言最流行?正如要挑选最受欢迎的冰激凌一样,每个人都有自己的最爱.实际上,由于各种原因,不同的开发人员喜欢不同的编程语言,当你认 ...

  7. html叫编程语言吗,为什么HTML不是一种编程语言?

    为什么HTML不是一种编程语言?它是一种编程语言.如果它不被认为是一种编程语言,那么这是一个迹象,他们无法理解基本的英语或语义作为一个整体.顺便说一下,我有计算机科学一等荣誉学位.我对语义的基本逻辑也 ...

  8. 快来看;2021 年最流行的 8 种编程语言!

    点击⬇️方"逆锋起笔",公众号回复 pdf 领取大佬们推荐的学习资料 作者 | Zulie Rane 策划 | 刘燕 怎样判断哪种编程语言最流行?正如要挑选最受欢迎的冰激凌一样,每 ...

  9. 不同编程语言能耗不同?看这27种语言对比!

    点击上方"大鱼机器人",选择"置顶/星标公众号" 福利干货,第一时间送达! 在手机快没电时,管理软件往往会提醒我们关掉某些耗电量高的应用.可见,除了硬件厂商外, ...

最新文章

  1. python怎么安装pip-安装 Python 模块
  2. ASP.NET 学习笔记_13 文章发布管理小系统
  3. Instagram允许用户管理评论 网络骚扰评论一扫空
  4. SD-WAN和虚拟专用网之间有什么区别?虚拟专用网会被替代吗?
  5. C指针原理(6)-C内嵌汇编
  6. MPlayer1.1.1移植记录
  7. 前端兼容性问题:快速去掉mac safari浏览器input右边的小图标/小按钮
  8. ROS学习:智能车室外光电组仿真
  9. 通通玩blend美工(3)——可爱的云
  10. 微信小程序——组件(二)
  11. java kind con,java.lang.ClassNotFoundException:afu.com.sun.source.tree.tree$kind
  12. 不愧是最好用的 pdf 阅读器~
  13. 读后感之悟道-一位20年IT高管的职场心得
  14. 《阿米巴经营》第一章读后感1200字
  15. CSS3旋转跳跃的立方体
  16. [256个管理学理论]004.鲶鱼效应(Catfish Effect)
  17. 【信号分析之心电信号处理】
  18. 判断是否为直角三角形
  19. (只需五步)ChatGPT接入微信的攻略
  20. 自建内网邮箱服务器(下)

热门文章

  1. GitHub标星3w+的项目,全面了解算法和数据结构知识
  2. 商汤62篇论文入选CVPR 2019,一览五大方向最新研究进展
  3. 《使女的故事》大火,AI是背后最大推手?
  4. Linux 之父归来!
  5. 基于Python的自动特征工程——教你如何自动创建机器学习特征
  6. 玩音乐,敲架子鼓,一个被“耽误了”的机器学习高手
  7. 资源 | 10x Python开发者必读:本月Python文章TOP 10
  8. 听完李厂长和雷布斯在乌镇讲AI段子,我突然理解为什么这两个男人选择在一起了
  9. 送书 | 你一定能看懂的算法基础书(代码示例基于Python)
  10. Netty结合Protostuff传输对象案例,单机压测秒级接收35万个对象