Which Programming Languages Use the Least Electricity?

4月 9, 2021
admin

Can energy usage data tells us anything about the quality of our programming languages?

Last year in Portugal from three different universities, six researchers’ team of the looking this question, ultimately released a paper entitled “Energy Efficiency Across Programming Languages”. 彼らは、27 の異なる言語で書かれた 10 のプログラミング問題の解を実行し、それぞれがどれだけの電力を使用したか、また、速度やメモリの使用量を注意深く監視しました。 (以前は「The Great Computer Language Shootout」として知られていました。) 「これにより、コンパイル/実行オプション、およびコンパイラのバージョンとともに、比較可能で代表的、かつ広範囲なプログラムのセットを得ることができました」

最終的にどのテストを実行するかによって結果が異なるため、さまざまなベンチマーク テストを実行することが重要でした。 たとえば、全体として C 言語が最も速く、また最もエネルギー効率が高いことが判明しました。 しかし、DNA データベースをスキャンして特定の遺伝子配列を探すというベンチマーク テストでは、Rust が最もエネルギー効率がよく、C は 3 位でした

しかし同じテストでも、何を基準にするかによって「最適」な言語が変わってきます。 このテストでは、C は 2 番目に速い言語であることがわかりました (ここでも Rust の後ろに位置しています)。 しかし、メモリ使用量でソートすると、Rustは9つも順位を下げています。 3550>

より速い言語が常に最もエネルギー効率が良いとは限りません。

研究者は、コンパイラーのバージョンと最適化フラグに関する CLBG プロジェクトのガイドラインに「厳密に従った」と述べています。 消費電力は Intel 社のツールである Running Average Power Limit ツールを使用して測定され、各プログラムは 1 回だけでなく、「コールド スタートやキャッシュの影響を低減し、測定値の一貫性を分析し、外れ値を回避できるように」10 回実行されました。 (このため、「測定結果は非常に一貫している」と報告しています)。 一貫性を高めるため、すべてのテストは、Linux Ubuntu Server 16.10 (kernel version 4.8.0-22-generic) を実行し、16GB の RAM と 3.20GHz Haswell Intel Core i5-4460 CPU を備えたデスクトップ上で実施されました。Lisp は、C 言語に比べて 2.27 倍のエネルギー (131.34J) を消費し、実行に 2.44 倍の時間 (4926.99ms) と 1.92 倍のメモリ (126.64Mb) を必要とします」

また、コンパイル言語と解釈言語 (仮想マシン上で実行する言語は別のカテゴリ) による結果も比較しました。 この論文では、関数型および命令型プログラミング、オブジェクト指向プログラミング、スクリプトなど、さまざまなプログラミング パラダイムを個別に比較しています。 これは、電力が一定の割合で消費されないことが一因であると研究者は指摘し、プログラムの実行時間がエネルギー消費に影響を与えるかどうかを調査している他の研究者の研究に影響を与える可能性があることを示唆しています。 (ベンチマークテストの1つでは、Chapelプログラムは、Pascalで書かれた同等のプログラムよりも実行時間が55%短く、しかもPascalプログラムの方が10%エネルギー消費が少なかったそうです。

そのため、プログラムがより速く実行されるとエネルギー消費が減少するという一般的な考えがまだありますが、研究者は、「より速い言語が常に最もエネルギー効率が良いとは限らない」と明確に述べています。 しかし、最終的に研究者は、消費電力が CPU または DRAM によって消費されているかどうかに基づいて、エネルギー消費を分解することもできました。3550>

この結果を検討した後、研究者は、DRAM のピーク使用量とエネルギー消費量の関係は「ほとんど存在しない」とも結論づけました。 たしかに、「最もエネルギー効率の高い上位 5 つの言語は、実行時間でソートしたときに、エネルギーと時間の値の両方で非常に小さな差でランクを維持している」

実際、10 のベンチマーク問題のうち 9 つで、(速度とエネルギー効率両方の)トップ スコアは、全体的に最も速く、最もエネルギー効率の高い上位 3 言語のうちの 1 つから出ました – これは研究者にとって驚くべきことではないでしょう。 “これらの上位 3 言語 (C, C++, および Rust) は、私たちのデータも示すように、実行性能に対して大幅に最適化され効率的であることが知られているのは常識です。”

しかし、他の 24 言語を実行時間で順位付けすると、エネルギー効率の順位と同じ順位は表示されないのです。 “同じエネルギーと時間のランクを維持しているのは 4 つの言語 (OCaml, Haskel, Racket, and Python) だけで、残りは完全にシャッフルされています。”

また個々のベンチマーク テストでも、パフォーマンスの速い言語が最もエネルギー効率が高いとは限らないケースがあります。

The Pros of Compiled Languages

他にも面白い結果がありました。 コンパイルされた言語は、最もエネルギー効率がよく、最も高速に動作する「傾向がある」のですが、彼らの論文では、その違いを数値で表すこともできます。 「平均して、コンパイルされた言語はソリューションの実行に 120J を消費しましたが、仮想マシンとインタープリタ言語では、この値はそれぞれ 576J と 2365J でした」

研究者は、実行時間の比較にも同じ精度を適用し、平均で「コンパイル言語は 5103ms 、仮想マシン言語は 20623ms 、解釈言語は 87614ms かかる」ことを結論付けています。 (例外はJava。)

消費エネルギー ラン時間
C 57J 2019 ms
Rust 59J 2103 ms
C++ 77J 3155ミリ秒 3155 ms
Ada 98J 3740 ms
Java 114J 3821 ms

最も遅い5言語全てインタプリタ言語であった。 Lua、Python、Perl、Ruby、Typescriptです。 そして、最もエネルギーを消費した5つの言語もまたインタプリタ型でした。 3550>

しかし、同時に、正規表現で文字列を操作する場合、最もエネルギー効率の良い5つの言語のうち3つがインタプリタ型言語 (TypeScript、JavaScript、および PHP) であることが判明し、「他のシナリオではあまりエネルギー効率が良くない傾向があるが」、コンパイル言語は使用メモリ容量の少ない上位5つを占めた。

を使用。

<2466><5251>「平均で見ると、。 コンパイル言語が125MB、仮想マシン言語が285MB、インタープリタ言語が426MBを必要とした」と研究者は報告している。 一方、インタプリタ型言語は、下位5つのうち4つを占め、最も多くのメモリ空間を消費したことになる。 JRuby、Dart、Lua、Perlです。 (Erlang はインタプリタ言語ではありませんが、Dart と Lua の間で下位 5 位に入ります)。

「プログラミング パラダイムで分類すると、命令型言語が 116MB、オブジェクト指向が 249MB、関数型が 251MB、最後にスクリプトが 421MB 必要でした」

実際、異なるパラダイムを比較すると、命令型プログラミングがトップになることが多かったのです。 そのベンチマーク プログラムは、オブジェクト指向、関数型、およびスクリプト パラダイムのベンチマーク プログラムよりも平均してはるかに少ないエネルギーを使用し、はるかに高速に実行されました。

言語 必要なメモリ容量
Pascal 66Mb
Go 69Mb
C 77Mb
Fortran 82Mb
C++ 88Mb
消費エネルギー 実行時間
Imperative 125J 5585ms
Object->

Object-> Energy consumed Run-time 879J 32965ms Functional 1367J 42740ms
スクリプト 2320J 88322 ms

しかし、考慮すべき要素がたくさんある。 「異なるプログラミング パラダイム、および同じパラダイム内の言語でさえ、エネルギー消費、時間、およびメモリにまったく異なる影響を与えることは明らかです」と、研究者は書いています。 しかし、どれが最も重要かは、シナリオによって異なる。 (たとえば、バックグラウンド タスクは、常に最速のランタイムを必要とするわけではありません。)

また、アプリケーションによっては、たとえば、エネルギー使用と実行時間という 2 つの要因を考慮する必要があります。 そのような場合、「C 言語は両方の単一目標において支配的であるため、最良のソリューションである」と研究者は書いています。 また、3つの変数(時間、エネルギー使用量、メモリ使用量)をすべて監視している場合も同様です。 3550>

Best languages for specific scenarios (screenshot from research paper)
論文の最後に、研究者は、さらなる研究のために、時間の経過とともに使用するメモリの合計が消費エネルギーとよりよく相関しているかどうかを調査したいと付け加えています。

彼らはデータをオンラインで共有しており、将来の研究者が、たとえば .NET 言語と JVM 言語を比較することが容易になることを示唆しています。 モバイル アプリケーション、Internet-of-Things システム、または限られた電源から使用するその他のアプリケーションを扱う開発者にとって、電力消費は大きな関心事です。

しかし、結局、この研究は、プログラマが最も嫌うもの、つまり曖昧さを残すかもしれません。 研究者は、単一の最高のプログラミング言語を探している場合、「この質問には具体的で究極の答えはない」と報告しています。

「各ベンチマークで最もエネルギー効率の高い言語は、ほとんど常に最も速い言語ですが、一貫して他より優れている言語はないというのが実情です」と研究者は結論付けています。 「言語が使用される状況は、その言語が最もエネルギー効率の高いオプションであるかどうかを判断するための中核となる側面です。

コメントを残す

メールアドレスが公開されることはありません。