誤差を許容することで劇的な省電力を目指すコンピューティング

2011年6月7日 11:00

印刷

記事提供元:スラド

  TarZ 曰く

 大規模化するデータセンタや、より小型で高性能になるモバイル機など、コンピュータの省電力化は近年ますます重要になっている。こうしたデジタル計算機の動作にあたっては、常に正確な動作を得られるように十分なマージンを設けた電力を使っている。DRAM の内容が揮発しないような短いリフレッシュ間隔や、回路でタイミングエラーを発生させないための高い駆動電圧といったものだ。しかし、アプリケーションによってはそこまで正確な結果を要求しないものもある。

 ワシントン大学の研究チームは、ある程度の誤差を許容することで劇的な省電力を目指すハードウェアと、それをソフトウェア面でサポートするための言語を提案している。本件は、米サンノゼで開催されている PLDI 2011 で発表される (Session 3a.“EnerJ: Approximate Data Types for Safe and General Low-Power Computation”) 。

 たとえば MPEG-2 動画再生では、一瞬だけどこかのピクセルの色がおかしかったり、音声に少しノイズが乗ったところで視聴上の問題はほとんどない。仮に、そうした処理が 1 秒あたり 10-9 の確率でメモリのビット化けを許容できるなら、DRAM のリフレッシュレートを今よりも下げて消費電力を 17 % 削減できる。同様に、回路のタイミングエラーをある程度許容したり (駆動電圧を下げられる)、浮動小数点演算の仮数部の有効ビット数を減らすことでも省電力化を図れる。

 このようなエラーや誤差を許容した「近似的な」プログラミングを行うために、EnerJ と呼ばれる Java の拡張が提案されている。これは、近似的でもよいデータをプログラム上で区別し、安全に取り扱えるようにしたものだ。以下は、EnerJ による近似的な変数の例である。

      int p;                // デフォルトでは、従来と同様に正確な値を保持する変数になる
    @Approx int a = ...;  // 正確さが要求されない変数には、近似を示すアノテーション @Approx を付ける
 
    p = a;                // こうした代入は許されない
    p = endorse(a);       // 近似的なデータを正確な変数に代入する必要がある場合は明示的に変換する

 こうすることで EnerJ ランタイムは、近似的でも構わないデータや演算は省電力の (ただしエラー確率の高い) ハードに、正確性が求められる処理では通常のハードに割り当てて実行できるようになる。

 おもしろいことに、近似的に扱う対象はプリミティブなデータ型やその演算に限らず、クラスやその振る舞いにも適用可能だ。つまり、本件はハードだけによる省電力アプローチではない。以下は、float 配列の平均値を返す「近似的に」正しいコードの例である。

    @Approximable class FloatSet {         // 近似的なインスタンスを許容するクラス
    @Context float[] nums = ...;
    float mean() {                        // 配列の平均値を返す(通常版)
      float total = 0.0f;
      for (int i = 0; i < nums.length; ++i)
        total += nums[i];
      return total / nums.length;
    }
    @Approx float mean_APPROX() {         // 配列の平均値を返す(近似版)
      @Approx float total = 0.0f;
      for (int i = 0; i < nums.length; i += 2)
        total += nums[i];
      return 2 * total / nums.length;
    }
  }

 このようなコードは従来のプログラミング言語でも可能だが、EnerJ ではシステム側が近似的なデータや処理を把握できるため、プログラマはより安全にコードを書けるようになる。たとえば、ハッシュ関数のような処理に対して近似データを渡してしまうようなコーディング上の誤りを防ぐことができる。

 ビット化けやタイミングエラーを許容するようなハードウェアについては専用のものが必要であり、実現に向けての提案や設計を行っている段階だが、近似的アルゴリズムといったソフトウェア面での対応だけであれば現在のハード上でも実行できる。見積もりでは、ソフトウェア側の対応で 30 〜 50 %、ハードウェア側の対応があればさらに 20 〜 25 % (アプリケーションによっては 50 %) の省電力化が見込めるという。研究チームは近々、EnerJ をオープンソースで公開する意向とのことだ。

 近似的プログラムはどのような局面で有効になるのか。/.J 諸氏は何か良いアイディアをお持ちだろうか。

 スラッシュドットのコメントを読む | プログラミング

 関連ストーリー:
「誤差を許容」することで高速化を計るマイクロチップ 2011年03月23日

 

※この記事はスラドから提供を受けて配信しています。

関連記事