ノイマン型の無駄

例えば SuperPI を考えてみると、

結果は演算する前に判っています。なぜなら、既に誰かが演算し終えているからです。

これは、なにも円周率の様な一般的な定数に限ったことではなく、そこかしこのプログラムに概ね同様の無駄な演算ロジックが内包されています。

つまり、毎回同じ結果になるにも関わらず、毎回同じ演算を長々と繰り返し実行して答えを導き出しているプログラムが多いという事です。言い換えると外部入力(タイマーや乱数も外部入力)の影響を受けないプログラム部分は毎回同じ結果になると思うのです。

実は、コンパイラがある程度こういった事象を察知して演算を簡略化した機械語命令を出力する様に成っているハズです。

例えば、

A = 2 × 10 + 20

という定数のみの代入演算をコンパイルすると

MOV EAX , 40

の様に、演算部分はコンパイラが実行してしまい、その結果をAに代入するだけの機械語を出力すると思います。それが出来ないコンパイラは最適化が出来ない馬鹿正直なコンパイラと言えます。

しかし、SuperPIの様な複雑なプログラムにおいては、毎回同じ結果が導き出される場合であっても、馬鹿正直に最初から最後まで延々と時間と電力を使って演算する様にコンパイルされてしまいます。

逆に言うと、SuperPIの様な複雑なプログラムであっても、理論上は、コンパイルの時点で演算を全て省いて定数を出力し、その(演算なしで定数を出力する瞬間の)タイム計測を行うだけの非常に簡略化された機械語に翻訳する事が出来ると思うのです。

これはなにもコンパイラに限った事ではなく、CPUやGPUやOSやミドルなどが同等の事をして、2度目以降は同じ結果だと判った時点で、同じ演算を馬鹿正直に延々と繰り返すのではなく、2度目以降は定数を出力するだけのプログラムに置き換えてしまえば、世の中にある多くのプログラムは超高速化し消費電力が激減し、今まで時間的に不可能だった事が可能に成るかもしれません。

これが実現すれば、世の中にある殆ど全てのベンチマークは無意味になり、原発が数台減るかもしれませんね?
関連記事
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

DualSocketTheWorld

Author:DualSocketTheWorld
自作を始めて20台目くらいになりますが、最初からデュアルソケット限定(始めた当時はデュアルスロット)で自作しており、近年になってAMD K6を試したくなりSocket7でK6-2+のシングル構成で組んだのがシングル初です。

シングルマザー(含:シングルソケットマルチコア)や4ソケット以上の自作は基本的にしませんし、メーカー製PCの改造も基本的にはしません(ノートPCのSSD化くらいはしますが・・・)

基本路線はワークステーションと呼ばれる分野での自作で、OSもWindows系であればProfesionalが主な対象に成ります。

ゲーマーの様なOverClockは行わず、WS路線としてハイエンドCPUとハイエンドGPUの組み合わせで定格或いはDownClockで発熱を抑えつつ、その時のアーキテクチャに置いて爆速かつ静音を目指し、30年以上の長期に渡り稼動状態をキープする事を目指します。

※基本的にリンクフリーです。どこでも自由にどうぞ。

※画像は時々変ります。

※お決まりの文章ですが、改造は個人の責任で行ってください。ここに記載された情報は間違いを含んでいる可能性が有り、それを元に製作や改造などをして失敗しても筆者は一切責任持てませんので悪しからず。

筆者略歴:
小学生時代にゴミ捨て場で拾ったジャンクテレビ数台を分解して部品を取り出し真空管アンプを自作、中学生時代にPC8801mkⅡsrでZ80アセンブラを始める。社会人になって初のプログラムは弾道計算、後に医療系・金融系プログラマ~SEを経て100~200人規模プロジェクトのジェネラルマネジャを数年経験、独立して起業。現在は不動産所得で半引退生活。
(人物特定を避ける目的で一部経歴を変更しています)

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
アクセスカウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR