地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜「コンピュータと地球温暖化は 決して無縁ではない」(2022年版)

この記事シリーズでは地球温暖化の問題について2022年現在の最新情報を紹介し，コンピュータと地球温暖化は決して無縁ではないことを示します．その上で，Elixirで地球温暖化の解決に貢献する方法について示します．私たちは持続可能な開発目標(SDGs)を支援しています．

この記事は次の記事のアップデートです．

https://qiita.com/zacky1972/items/2c82a593fbb2e4c949d2

シリーズ

* [地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜序論 (2022年版)](https://qiita.com/zacky1972/items/536e93af8404ed63b382)
* [地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ3.1「人間が気候変動を引き起こしていることはどのようにしてわかるか？」 (2022年版)](https://qiita.com/zacky1972/items/1d998a17ba63ac714342)
* [地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ4.1「今後20年間で気候はどのように変化するか？」 (2022年版)](https://qiita.com/zacky1972/items/0d0e1f1c2bf773c7557a)
* [地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ4.2「二酸化炭素の排出削減の効果はどれだけ早く確認されるだろうか？」 (2022年版)](https://qiita.com/zacky1972/items/d395c82938482c8962bd)
* [地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ9.1「グリーンランド及び南極域の氷床の継続的な融解は逆転しうるか？氷床が元に戻るのにどの程度の時間がかかるだろうか？」 (2022年版)](https://qiita.com/zacky1972/items/19194e55af677524d0ce)
* [地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ9.2「海面水位は今後数十年間でどの程度上昇するか？」 (2022年版)](https://qiita.com/zacky1972/items/f4ed1bb4dd45f7d1e326)
* [地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜機械学習の消費電力あたり性能の改善に向けて](https://qiita.com/zacky1972/items/fc74503c33839b64d0a3)


# コンピュータと地球温暖化

コンピュータと地球温暖化は決して無縁ではありません．


英語ではありますが，下記の論文をぜひご覧ください．

[A. Andrae & T. Edler: On Global Electricity Usage of Communication Technology: Trends to 2030, Challenges 2015, 6(1), 117-157. available at https://www.mdpi.com/2078-1547/6/1/117](https://www.mdpi.com/2078-1547/6/1/117)

これには次のような驚くべきことが書かれています．

1. コンピュータデバイスにかかる電力消費量は，2030年時点の最悪ケースで世界の電力供給量の50%にも及ぶ可能性がある
2.  中でも固定網やデータセンターの電力消費量が伸びる可能性が高い 

1については次の図です．

[![Share of Communication Technology of global electricity usage](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55223/396f658d-43e6-cc7c-f65d-33cd956a1cbc.png)](https://www.mdpi.com/challenges/challenges-06-00117/article_deploy/html/images/challenges-06-00117-g008.png)

2については次の図です．

[![Best and Expected case scenario CT electricity](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55223/c5c49b5d-c090-4962-03b6-5cd2021bf0d9.png)](https://www.mdpi.com/challenges/challenges-06-00117/article_deploy/html/images/challenges-06-00117-g009a.png)

[![Worst case scenario CT electricity](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55223/83da2a5d-6154-e6c2-4db0-a65972e63734.png)](https://www.mdpi.com/challenges/challenges-06-00117/article_deploy/html/images/challenges-06-00117-g009b.png)


5Gの普及，機械学習などの計算量の増大などにより，インフラストラクチャー側の負荷が急上昇するというシミュレーション結果が描かれています．

考慮すべきなのは，コンピュータの電力消費量は，これからも伸びるのは確実だということです．最悪の場合は，繰り返しますが，全電力供給量の50％もの電力をコンピュータが消費するということになります．

この驚くべき量の電力は，基本的には全て熱として大気中に排出されます．もちろん，電力を生み出すために二酸化炭素が相当量排出されます．コンピュータが地球温暖化の問題に無縁のはずがありません．

幸い，他の資料をいくつか見ていくと，2020年前後の実際のコンピュータの電力消費は全電力供給量の10％前後のようで，前述の最初の図の中ではExpected(平均予想)のシナリオで推移している模様です．

# コンピュータの消費電力

有名なヘネシー＆パターソンのコンピュータアーキテクチャの教科書(いわゆるヘネパタ本)には，トランジスタの消費する電力は，電圧の2乗とトランジスタ数とクロック周波数の積に比例すると書かれています．

Hennessy, J. L. and Patterson, D. A.: Computer Architecture: A Quantitative Approach, Morgan Kaufmann, 6th edition (2017). 

また，高いクロック周波数で動作させようと思うと，電圧を上げる必要が出てきます．電圧が低いと，原理上，トランジスタのスイッチをオンオフするのに長い時間かかるからです．したがって，クロック周波数を低く抑えて，必要最小限の電圧に抑えることが，トランジスタの消費電力を抑えるのにとても効果的です．

# 前提: 消費電力あたりの性能の高いプロセッサを使用すること

現在，主流となっているIntelやAMDのx86_64アーキテクチャのCPUや，NVIDIAのPC向けGPUは，性能を追求していますが，消費電力あたりの性能についてはあまり多くの関心を払ってきませんでした．現代のゲーミングPCだと1kWhを超える電源を必要とするPCもそう珍しくありません．

一方で，ARMやRISC-Vのような主に組込みシステム用途向けに開発されてきたCPUは，消費電力を抑えることに注力してきました．

状況が大きく変わったと考えられるのが，Apple Siliconの登場です．AppleがIntelのx86_64アーキテクチャから，ARMアーキテクチャのCPUに移行することを2020年6月に発表し，2020年11月にM1を搭載したMacを販売します．

このM1を搭載したMac miniの消費電力を実測したのですが，待機電力が3Wh程度，CPUとGPUをフル稼働させるようなタスクを走らせた時の消費電力が13〜17Wh程度という消費電力でした．この消費電力だと，仮に100台束ねても，数kWh程度という業務用の冷暖房程度の消費電力で収まります．前述のゲーミングPCの1kWh以上という消費電力と同じくらいとすると，数10台のコンピュータ・クラスタを構築できることでしょう．

しかも，M1を搭載したMac miniは，Intelのx86_64アーキテクチャである2.3GHz 18コア Intel Xeon Wを搭載したiMac Proと同等か，それ以上のベンチマーク性能を叩き出したのです！

このApple Siliconの快進撃を見たIntel，AMDも方針を転換し始めていて，消費電力あたりの性能を気にするようになったというのは，エネルギー問題を考える上で，とても良いことだと思います．

# コンピュータの消費電力を抑えるためにソフトウェアでできること

クロック周波数を抑えてもCPUの計算能力を維持・向上させるには，どのようにしたらいいでしょうか？ ソフトウェアで解決するためには，大きく3つアプローチがあります．

* **目的を達成するのに必要なクロック数を削減する．** このためには，無駄な命令を実行しないことが肝要です．**コンパイル・最適化されたネイティブコード**で実行する方が，最適化されていないインタプリタ実行よりも，同じことをするのに必要な電力消費を抑えられます．また，前述のような消費電力あたりの性能が高いCPUであるARMやRISC-Vの特性を活かしたネイティブコード生成をすることが重要になりますし，Apple Siliconのような場合だとGPU(Metal)やNeural Engine(CoreML)などを適宜活用するようにすると消費電力をさらに抑えられるようになるでしょう．
* **並列処理を最大限に生かして計算能力を高め，かつできるだけ同期・排他制御で計算が停止しないようにする．** コアが複数ある場合，1つのコアだけに処理を集中させてクロック周波数を上げて処理するよりも，複数のコアに処理を分散させてクロック周波数を下げた方が，消費電力あたりの計算能力を向上させることが容易です．また前述のような消費電力あたりの性能が高いプロセッサを搭載したコンピュータ・ユニットからなるコンピュータ・クラスタを構成した時にも，性能を引き出すことができるようになります．
* **使わないモジュールのクロックを停止するなど電源コントロールをこまめに行うようにする．** 使わないモジュールのクロックを停止すれば，理想的にはそのモジュールの消費電力を0にできます．実際には待機電力があるので，少し消費しますけどね．組込みソフトウェアではこの辺りをかなり頑張っていますね．また前述のようなコンピュータ・クラスタを構成した時に，待機しているコンピュータ・ユニットをシャットダウンしたり，計算量が必要になった時に再起動したりすることが容易にできれば，コンピュータ・クラスタ全体の消費電力を大きく削減することができます．

では具体的にどのようにするかについて，続きは次の記事で検討することとします．

https://qiita.com/zacky1972/items/fc74503c33839b64d0a3