06.タダ飯を食わせろ

●ハードウェア依存を推奨する時代ではない

 2006年のお正月企画で並列処理をちょっと書いた。

 あれから1年経って2007年となり、この間、AMDのATI買収によって、将来のプロセッサがヘテロジニアスマルチコアになっていく公算が、いよいよ大きくなってきた。

 マルチコア/マルチプロセッサ化で困るのがアプリケーションソフトを作るプログラマである。

 特に、ヘテロジニアスマルチコアの場合、非対称プロセッサのために、スレッドを割り振る先のコアの特性によってアルゴリズムが大きく変わる。


 要するにハードウェア依存したプログラムを書けという意味である。


 冗談じゃない。
 そんな要求は願い下げだ。
 タダ飯を食わせろ。



2006/12/30
●マルチCPU化の必然性

 CPU内を電気信号が走る限り、情報伝達速度は光速を超えられない。
 現在、リーク電流によってクロックを上げられない事態に陥っているが、仮にリーク電流問題を根本解決するアイデアが出て、桁違いにクロックを上げられる見通しがついたとしても、実質的に20GHzぐらいでプロセッサ内ですら同期ができなくなってくる。
 10GHzの電波の真空中の波長は3cmしかない。20GHzの1/2波長が7.5mmなので、CPU内の配線長を考えると20GHz前後がCPU内同期ができる限界波長になると思われる。

 そのとき、CPUメーカーは「これ以上クロックが上げられない」と白旗を揚げざるを得ない。

 理由はともかく、いずれ単体のCPUの高速化に限界はやってくる。
 そこから先はマルチCPUシステムに頼るしかない。

 だから、民生パソコンがマルチCPUになり、それで普通のアプリケーションが使えるようなシステムは、早晩実現しなければならない課題でもある。


2006/12/30
●共倒れは嫌だ

 CPUはコアごとにパフォーマンス差をつけたヘテロジニアスマルチコアへと向かうらしい。
 最高のパフォーマンスを得るには、ハードウェアに依存したアルゴリズムは不可欠だが、プログラムコード内にCPU数や、コア単体のパフォーマンスを意識した記述があると、ソフトウェアがハードウェアと共倒れする危険がある。

 ヘテロジニアスマルチコアの場合、付加されるコプロセッサの数や性能に差のついたようなシリーズが出てくると、ソフトウェア技術が新技術に追いつけず、「新機能による高性能を活かせるソフトウェアが1本もない」という事態に陥る。

 ソニーのプレイステーション2(以下PS2)では、強力なプロセッサであるエモーションエンジンを使いこなすノウハウすらない状態で機械だけ先に販売され、一時は「巨額な開発費を投資できるメーカーでないとPS2のソフトは作れない」とまで言われた。PS2はゲームコンソールだったから何とかなったが、パソコンではそんな冒険は不可能に近い。

 プロセッサは売れない、プログラマもいないという事態は、ハードウェアメーカーにとっても、ソフトウェアメーカーにとっても不幸な事だ。

 パソコン用CPUに話を戻すと、マルチスレッド化は、適切なスレッド分割をする必要があり、資源管理とともにある程度のノウハウが必要だ。それに加えてヘテロジニアスマルチコアになると、プロセッサの特性に合わせてスレッドを割り振らなければならず、さらに厄介な事になる。このままCPUがマルチコアで進化していったら共倒れは必至だ。

 アプリケーションプログラマは、いまだに「同じ結果になるような、数多くのアルゴリズムの中で、最も高速に結果の出て、かつ保守しやすいアルゴリズム」を、頭をひねって絞り出している。最適なアルゴリズム選択は、全く自動化されていない。

 プログラマの努力にアグラをかいているうちは、いつまでたってもマルチプロセッサはごくごく限られたアプリケーションでしか活用されない。
 「早晩実現しなければならない課題」なのに、これではちっとも先に進まない。


2006/12/30
●笛ふけど…

 現在、4コアのプロセッサを積んだPCがあったとしても、「3Dゲームを2つ起動しながらビデオのエンコードを行い、同時にWebブラウズをする」みたいな事をするぐらいしか活用方法が見あたらない。

 仮に今、16コアプロセッサが(魅力的な価格で)登場したらどうだろう。
 一般ユーザーがパソコンを使うシーンを想定したとき、いったい何に使えるのだろう。
 もてあますだけではないだろうか。


 多くのアプリケーションは、その実行速度がCPU数に応じてリニアに速くならないという現実の壁がある。

 だから、CPUメーカーがいくら笛をふいても、エンドユーザーは踊る訳がない。


 OSはハードウェア性能やCPU構成の個体差を吸収し、より高度なスレッド管理を実装する義務がある。
 そして、その高度なスレッド管理に対応できるよう、プログラミング言語自体もまた、大幅なパラダイムシフトが要求されるだろう。

 ちょうど、今ある最先端プログラミング言語の多くにオブジェクト指向が組み込まれているのと同様に、今後登場するプログラミング言語には、並列演算の概念を取り込んでいかなければならない。


2006/12/30

[戻る]