最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

27種編程語言,又快又省電的方法竟然是因為這個?

2021-03-12 12:02 作者:愛數(shù)據(jù)分析社區(qū)  | 我要投稿

作者:機器之心

大概不是Python:)

在手機快沒電時,管理軟件往往會提醒我們關(guān)掉某些耗電量高的應(yīng)用。

可見,除了硬件廠商外,軟件廠商也應(yīng)該重視能耗問題。在這篇文章中,研究者分析了一下各種編程語言的能耗對比。

當(dāng)能耗也成為了一個重要指標(biāo),我們要怎么選擇編程語言?

2017 年,由 6 名葡萄牙研究者組成的團隊決定對這一問題進行調(diào)查并發(fā)表了一篇名為《Energy Efficiency Across Programming Languages》的論文。他們用 27 種語言寫出了 10 個問題的解決方案(遵循同樣的算法),然后運行這些方案,記錄每種編程語言消耗的電量以及速度和內(nèi)存使用情況,得到的排序結(jié)果如下圖所示:

通過這項研究,他們得出了一些有意思的結(jié)論,比如運行速度快的語言未必能耗小。

在論文中,作者還根據(jù)編程語言的執(zhí)行類型(編譯、虛擬機或解釋)和編程范式(命令式、函數(shù)式、面向?qū)ο蠛湍_本)對結(jié)果進行了分析。

具體而言,研究者使用了來自 Computer Language Benchmarks Game(一個用于比較性能的免費軟件項目,其中包含一組標(biāo)準(zhǔn)的算法問題和用于運行測試的框架)的 10 個問題,使得研究更有可比性和代表性。

運行各種基準(zhǔn)測試非常重要,因為它們的結(jié)果會由于所執(zhí)行的測試而有所不同。例如,總體而言,C 語言被認為是最快的,也是最節(jié)能的。但是在涉及掃描 DNA 數(shù)據(jù)庫中特定基因序列的基準(zhǔn)測試中,Rust 是最節(jié)能的,而 C 語言位居第三。

即使在同一測試中,「最佳」語言也取決于你的標(biāo)準(zhǔn)。比如在一個 C 排第二、Rust 排第一的測試中,如果按內(nèi)存使用情況對結(jié)果進行排序,Rust 會跌掉 9 個位次。而在一個 Fortran 能效第二高的測試中,如果結(jié)果按照運行時間排序,它也下降了 6 個位次。

研究者指出,他們嚴(yán)格遵守 CLBG 項目關(guān)于編譯器版本和最佳優(yōu)化標(biāo)志的指導(dǎo)方針。功耗的測量使用一個來自英特爾的工具——Running Average Power Limit,每個程序運行 10 遍。作者表示,「這是為了減少冷啟動和緩存效應(yīng)的影響,并能夠分析測量的一致性,避免異常值」。

為了增強一致性,所有測試都在一個運行 Linux Ubuntu Server 16.10(內(nèi)核版本 4.8.0-22-generic)的臺式機上運行。


這篇論文認真地研究了一個普遍的假設(shè):速度越快的程序消耗的能源就越少。研究者指出,其實,這并不像物理學(xué)定律 E(nergy) = T(ime) x P(ower) 那么簡單。這是因為電力并不按照一定的速率進行消耗。在其他研究者的一項研究中,一個 Chapel 程序的運行時間比另一個用 Pascal 寫的等價程序少 55%,但測量結(jié)果卻表明,那個 Pascal 程序所用的能量反而要少 10%。

因此,盡管普遍認為程序運行速度更快時能耗會下降,但研究者明確指出「速度更快的語言并不總是更節(jié)能?!?/span>

這可能是一個很難回答的問題,因為功耗受到許多因素的影響(包括編譯器的質(zhì)量和使用的庫)。但最終,研究人員總結(jié)出,無論是編譯型語言、解釋型語言還是虛擬機,其實大部分能量(平均 88% 左右)是由 CPU 消耗的。

在對實驗結(jié)果分析研究之后,研究者還得出結(jié)論:DRAM 的峰值使用量與能耗之間「幾乎沒有關(guān)系」。該研究為一個長期存在的問題提供了答案:「速度更快就更環(huán)保嗎?」是的,的確是這樣,在按照執(zhí)行時間進行排序時,前 5 種最節(jié)能的語言依然排在前 5 名,而且在能量和時間值方面的差距很小。

實際上,在 10 個基準(zhǔn)問題測試中,有 9 個得分最高者(速度和能源效率兩方面)是速度最快和能源效率最高的三種語言之一,這并沒有讓研究者感到驚訝。眾所周知,就像研究中的數(shù)據(jù)所顯示的一樣,C、C++ 和 Rust 這三種排名最靠前的語言都經(jīng)過了大量優(yōu)化,在執(zhí)行性能上都比較高效。

但是按照運行時間對其他 24 種語言進行排名時,情況就不一樣了。只有 4 種語言保持相同的能耗和時間排名(OCaml、Haskel、Racket 和 Python),而其余語言則徹底散開。
即使在單項基準(zhǔn)測試中,也存在速度快但不節(jié)能的語言。

編譯型語言似乎是最節(jié)能和運行最快的語言,作者甚至可以在論文中用數(shù)字量化這種差異。

平均而言,編譯語言需要花費 120J 能量來運行解決方案,而虛擬機和解釋型語言要分別花費 576J 和 2365J。

在比較執(zhí)行時間時,研究者也采用了相同的精度,得出的結(jié)論是:平均而言,編譯語言花費 5103 毫秒,虛擬機語言花費 20623 毫秒,解釋型語言花費 87614 毫秒。

兩項排名中的前 4 名均為編譯型語言(有一個例外,Java 語言)。

5 種最慢的語言都是解釋型語言:Lua、Python、Perl、Ruby 和 Typescript。5 種能耗最多的語言也都是解釋型語言:Perl、Python、Ruby、JRuby 和 Lua。

但同時,在使用正則表達式操作字符串時,5 種最節(jié)能的語言中有三種(TypeScript、JavaScript 和 PHP)是解釋型語言。盡管在其他情況下,它們往往不是很節(jié)能。

編譯型語言在占用內(nèi)存最少的排名中也占據(jù)了前 5 名。

研究者稱:「平均而言,編譯語言需要 125Mb,虛擬機語言需要 285Mb,而解釋語言則需要 426Mb。」具體來說,有 4 種解釋型語言在這項排名中墊底,這意味著它們消耗了最多的內(nèi)存空間。

「如果按照它們的編程范式進行排序,命令式語言需要 116Mb,面向?qū)ο笳Z言需要 249Mb,函數(shù)式編程語言是 251Mb,腳本需要 421Mb。」

實際上,當(dāng)比較不同范式時,命令式編程通常排在首位。與面向?qū)ο?、函?shù)式以及腳本范式的基準(zhǔn)程序相比,命令式編程的基準(zhǔn)程序平均使用的能源少得多,運行速度也更快。

但是有很多因素需要考慮。研究者稱「很顯然,不同的編程范式,甚至同一范式中的語言對能耗、時間、內(nèi)存的影響也完全不同」。但是,其中哪一個因素最重要取決于你自己的需求情況(例如,后臺任務(wù)并不總是需要最快的運行時間)。

某些應(yīng)用程序需要同時考慮兩個因素,如能耗和執(zhí)行時間。研究者稱:「在這樣的情況下,C 語言是最佳的解決方案,因為它在這兩個方面都很有優(yōu)勢?!谷绻阆朐诠?jié)省內(nèi)存的同時節(jié)省時間,那么 C 語言、Pascal 和 Go 語言都可以。如果你正在觀察 3 個變量(時間、能耗和內(nèi)存使用情況),那么結(jié)論也是一樣的。但是,如果你只是想在使用更少內(nèi)存的同時節(jié)省能源,那么最好的選擇是 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


還想了解更多大廠內(nèi)推


27種編程語言,又快又省電的方法竟然是因為這個?的評論 (共 條)

分享到微博請遵守國家法律
长顺县| 黑水县| 沧源| 和林格尔县| 纳雍县| 靖宇县| 连云港市| 德格县| 望奎县| 乌拉特前旗| 安达市| 阳泉市| 固原市| 安顺市| 泾川县| 吉首市| 基隆市| 青神县| 刚察县| 商水县| 自贡市| 延安市| 紫阳县| 新源县| 莱芜市| 芒康县| 宁强县| 申扎县| 通州市| 和林格尔县| 潢川县| 静安区| 沐川县| 濮阳市| 安吉县| 凤冈县| 武穴市| 安徽省| 井研县| 襄城县| 辽中县|