コンパクトなコードとエネルギー効率の高いソフトウェア

マイクロプロセッサチップが発明されたばかりの暗黒時代、工学系大学生たちは、DECのPDP-11ミニコンピュータなどのマシンで本格的なコンピュータプログラミングを初めて経験しました。当時の学生は、PDP-11で正常に動作するプログラムを書くだけでなく、コードをコンパクトにする必要もありました。コンピュータを学ぶ初期のクラスでは、15行のアセンブリコードで実現できるプログラムを20行もかけて提出すると、講師から嫌な顔をされたものです。もちろん、彼らがそうしたのは、メモリが高価だったからです。PDP-11は、通常、22ミルの磁気コアで構成された、4,096個の16ビットワードしかないリード/ライトメモリを備え、ワイヤを使用してアクセスしていました。

Digital Equipment Corporation(DEC)のPDP-11コンピュータ。(画像提供:flickr)

現在でも、プログラミングコースでは、コンパクトなコードを重要視することが多いようです。しかし、まもなくプログラミングコースでは、コンパクトなコードだけでなく、エネルギー消費を最小限に抑えるソフトウェアを書くことにも重点を置くようになるかもしれません。

コンピュータコードのエネルギー効率は、かつてはニッチなテーマでした。主にこのテーマに関心を持っていたのは、電力を供給するコイン電池の寿命を延ばすためにMCUの消費電力を抑えなければならない小型組み込みシステムのプログラマでした。現在、ソフトウェアのエネルギー効率化は主流になりつつあります。スマートフォンのバッテリ消費を少しでも抑えるために、CPUに負荷のかかるアプリを避けるユーザーも増えてきました。クラウドベースシステムでも、データセンターの炭素排出量への影響により、ソフトウェアのエネルギー効率に注目が集まっています。

一見すると、コンパクトなコードはすでにエネルギー効率が高いのではないかと思うかもしれません。この経験則は、常に当てはまるわけではないことがわかりました。さらに、一般的にコンピュータプログラムのエネルギー効率は、そのプログラムが書かれている言語によって異なります。コンパイラ型言語は、インタプリタ型言語や仮想マシンを構成する言語よりもエネルギー効率が高くなります。しかし、一見互いに関連がありそうなコンパイラ型言語でも、エネルギー効率に大きな差が出ることがあります。

エネルギー、時間、メモリ使用量がエネルギー効率の高いプログラミングにどのように関係するかについての洞察は、ポルトガルの研究者たちによって行われた研究から得られます(https://dl.acm.org/doi/10.1145/3136014.3136031)。彼らは、27のソフトウェア言語のエネルギー効率に関する性能を分析しました。この分析では、一般的なアルゴリズムが人気の高い各種プログラミング言語でどのように実装されるかを比較するために、最先端のコンパイラ、インタプリタ、仮想マシンを使用して13種類のプログラムが実行されました。

たとえば、あるベンチマークプログラムでは、システム内の複数の粒子間の相互作用を計算するのにかかる時間が計測されました。別のプログラムでは、たくさんの二分木を割り当てたり、割り当てを解除したりしました。また別のプログラムでは、ハッシュテーブルを更新し、それを使用して特定のDNAヌクレオチド配列をカウントしました。

研究者たちは、ソフトウェアにおけるエネルギー消費は実行時間に比例するという一般的な考え方が間違いであることを指摘しています。つまり、速いことは常に良いことであり、プログラムの実行時間を短縮すれば、エネルギー消費も同じ割合で削減できる、というのは間違いであるということです。消費エネルギーは使用電力と継続時間の積であり、必ずしも単純な関係であるとは言えません。高速なプログラムであっても、実行時の消費電力が大きければ、エネルギー効率が高いとは言えません。

分析の結果、研究者たちは、プログラミング言語のエネルギー消費の順位と実行時間の順位が異なる事例が複数あることを発見しました。たとえば、ランダムなDNA配列を生成して書き込むベンチマークにおいて、Fortranは実行時間では8位でしたが、エネルギー効率では2番目に高い言語であることがわかりました。また、二分木の計算では、Pascal言語とChapel言語のエネルギー消費の差は10%以内でしたが、実行時間についてはChapelの方が55%短いことが判明しました。

研究者たちが出した結論のいくつかは、驚くようなものではありません。研究結果の1つは、C言語が全体として最も高速でエネルギー効率に優れていることです(57J、平均実行時間2,019ミリ秒)。C言語に次いで、ベンチマーク実行に必要なエネルギーと時間が少ない上位4言語は、Rust(59J、2,103ミリ秒)、C++(77J、3,155ミリ秒)、Ada(98J、3,740ミリ秒)、Java(114J、3,821ミリ秒)でした。また、予想通り、コンパイラ型言語は、インタプリタ型言語や仮想マシン言語よりもはるかにエネルギー効率が高くなりました。コンパイル済みプログラムが平均120Jでソリューションを実行したのに対し、仮想マシンとインタプリタ型言語はそれぞれ5,760Jと2,365Jを消費しました。

エネルギー効率と実行時間の下位5言語がすべてインタプリタ言語であったことは、驚くに値しません。エネルギー効率では、Perl(4,604J)、Python(4,390J)、Ruby(4,045J)、JRuby(2,693J)、Lua(2,660J)、実行時間では、Lua(167,416ミリ秒)、Python(145,178ミリ秒)、Perl(132,856ミリ秒)、Ruby(119,832ミリ秒)、TypeScript(93,292ミリ秒)でした。

また、研究者たちは、どこでエネルギーの多くが消費されるのかも示しました。エネルギーの大部分は常にCPUで消費されています。平均すると、言語がコンパイラ型、インタプリタ型、仮想のいずれであっても、CPUがほぼ90%のエネルギーを消費し、残りはDRAMが消費しています。

全般的に見て、開発者が実行時間とエネルギー消費だけを懸念する場合、最適なソフトウェア言語を決めるのは比較的簡単だと、ポルトガルの研究者たちは述べています。ところが、メモリ使用量も考慮すると、その決定は簡単ではありません。

しかし、地球にとって良いニュースがあります。それは、ソフトウェアのエネルギー効率を最適化することが可能だということです。プログラミングを学ぶ学生にとって、これは悪いニュースかもしれません。十分にコンパクトではないプログラムだけでなく、エネルギー効率にも欠けるプログラムを提出すると、プログラミング講師から嫌な顔をされる可能性が出てきたのです。

著者について

Image of Lee Teschler

Lee Teschler氏は、ウェブサイト、オンラインリソース、刊行物のネットワークであるDesign Worldのエグゼクティブエディターです。Leland (Lee) Teschler氏は、Penton Mediaで37年間働いています。1977年に『Machine Design』の編集スタッフとしてキャリアを開始し、2006年に同誌のチーフエディターに就任しました。Penton Mediaの前は、連邦政府の通信エンジニアとして活躍していました。Teschler氏は、ミシガン大学で工学の学士号と電気工学の学士号を取得し、クリーブランド州立大学でMBAを取得しています。

More posts by Lee Teschler(リー・テシュラー)
 TechForum

Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.

Visit TechForum