App下載

哪種編程語言最省電?編程質(zhì)量與耗電多少有關(guān)嗎?

不許揪我的小耳朵 2024-06-29 15:23:54 瀏覽數(shù) (1027)
反饋

能量使用數(shù)據(jù)是否能告訴我們編程語言的質(zhì)量?


11


六位來自葡萄牙三所大學(xué)的研究人員針對(duì)這一問題進(jìn)行了研究,并發(fā)表了一篇名為《編程語言的能效》的論文。

他們使用27種不同的編程語言實(shí)現(xiàn)了10個(gè)問題的解決方案(均采用相同算法),隨后執(zhí)行這些解決方案,并記錄了每種語言的電量消耗以及運(yùn)行速度和內(nèi)存占用情況,結(jié)果如圖示??


12


這項(xiàng)研究揭示了一些有趣的發(fā)現(xiàn):并非所有運(yùn)行速度快的編程語言都具有低能耗。

雖然C語言通常被認(rèn)為是速度最快的,并且在節(jié)能方面也表現(xiàn)優(yōu)異,但在對(duì)DNA數(shù)據(jù)庫進(jìn)行特定基因序列掃描的基準(zhǔn)測(cè)試中,Rust語言顯示出了更低的能耗,而C語言則排在第三位。

此外,"最佳"編程語言的評(píng)定標(biāo)準(zhǔn)也因測(cè)試的不同而異。例如,在一次測(cè)試中,C語言在內(nèi)存使用方面排名第二,而Rust排名第一;但如果按照內(nèi)存使用排序,Rust的排名會(huì)下降9位。

為了確保研究的可比性和代表性,研究者采用了Computer Language Benchmarks Game提供的10個(gè)標(biāo)準(zhǔn)算法問題進(jìn)行測(cè)試。進(jìn)行各種基準(zhǔn)測(cè)試是至關(guān)重要的,因?yàn)椴煌臏y(cè)試會(huì)得出不同的結(jié)果。

總體來看,盡管C語言在速度和節(jié)能方面通常被認(rèn)為是最優(yōu)的,但在涉及掃描 DNA 數(shù)據(jù)庫中特定基因序列的基準(zhǔn)測(cè)試中,Rust 是最節(jié)能的,而 C 語言位居第三。


運(yùn)行速度快的語言更節(jié)能嗎?


雖然普遍認(rèn)為程序運(yùn)行速度的提升可以降低能耗,但研究者們明確指出,"并非所有運(yùn)行速度快的語言都更節(jié)能"。

研究者們通過分析實(shí)驗(yàn)結(jié)果,得出了一個(gè)結(jié)論:CPU消耗了大部分能量,大約平均占 88%。

此外,他們還發(fā)現(xiàn) DRAM 的峰值使用量與能耗之間幾乎沒有直接聯(lián)系。這項(xiàng)研究為一個(gè)長(zhǎng)期存在的問題提供了解答:"速度更快是否意味著更環(huán)保?"

是的,當(dāng)按照?qǐng)?zhí)行時(shí)間排序時(shí),前5名最節(jié)能的語言在能源效率上也幾乎一致。

實(shí)際上,在10個(gè)基準(zhǔn)測(cè)試中,有9 項(xiàng)測(cè)試的最優(yōu)結(jié)果是由速度最快且能源效率最高的三種語言之一獲得的,這并不出乎研究者們的預(yù)料。

眾所周知,C、C++ 和 Rust 這三種語言因其高度優(yōu)化而在執(zhí)行性能上表現(xiàn)出色。

然而,當(dāng)對(duì)其他24種語言按照運(yùn)行時(shí)間進(jìn)行排名時(shí),情況則有所不同。只有OCaml、Haskell、Racket和Python這四種語言在能耗和時(shí)間排名上保持一致,而其他語言的排名則出現(xiàn)了較大差異。

即便在單一基準(zhǔn)測(cè)試中,也存在一些速度快但并不節(jié)能的語言。


編譯型語言的優(yōu)點(diǎn)


編譯型語言似乎是最節(jié)能和運(yùn)行最快的語言,這一點(diǎn)在論文中通過具體的數(shù)據(jù)得到了量化。

根據(jù)研究,編譯語言需要花費(fèi)120J能量來運(yùn)行解決方案,而虛擬機(jī)和解釋型語言要分別花費(fèi)576J和2365J。

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

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


13


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

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

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

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


14


研究者指出,平均內(nèi)存使用量方面,編譯語言為125Mb,虛擬機(jī)語言為285Mb,解釋語言為426Mb。

4種解釋型語言內(nèi)存消耗最高。

按編程范式排序,命令式語言平均使用116Mb,面向?qū)ο笳Z言249Mb,函數(shù)式語言251Mb,腳本421Mb。

命令式編程在能源消耗和運(yùn)行速度上通常優(yōu)于其他范式。


15


研究者強(qiáng)調(diào),編程范式和語言對(duì)能耗、時(shí)間和內(nèi)存的影響各異,且重要性取決于具體需求。

例如,后臺(tái)任務(wù)可能不需要極速運(yùn)行。某些應(yīng)用需同時(shí)考慮能耗和時(shí)間,C語言在這兩方面表現(xiàn)優(yōu)異。

若要同時(shí)節(jié)省內(nèi)存和時(shí)間,C、Pascal和Go是合適選擇。若考慮時(shí)間、能耗和內(nèi)存三個(gè)因素,C和Pascal在節(jié)能且內(nèi)存使用少方面表現(xiàn)最佳。


16

原文鏈接:

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


0 人點(diǎn)贊