2009年2月7日土曜日

ローカリティ

今局所性が熱いらしい。

局所的なメモリの重要性は、自分もいろいろマルチコアプロセッサを使ってきて、実感してきた。局所メモリって言うのは、ある程度の演算器リソースの集中するところに、高速なメモリを置くという形で、CellとかGPUでも実装されているし、Powerでは、キャッシュをそうやって使うモードがあるらしい。

思ったのが、そういうローカルメモリがあるってことは、ブロードキャストを高速にできることと一緒なんだということ。ローカルメモリに転送した内容を、ばっと演算器でいっせいに使えば、そのデータの流れはまさにブロードキャストになる。なんで、ローカルメモリで転送データ量が節約できるかわからず、考えていたらふとそれに気づいた。間違ってる?あたりまえ?だから、脳のような階層構造型のネットワークは、ローカルメモリがあれば擬似的に実装できる。

そうして考えていくと、プロセッサのネットワークの結合様式は、ローカルメモリへの転送が十分にできるようなものであれば、一応、脳的には十分ということになる。全結合の必要はないが、それなりの帯域は必要。だから、Cellのリングバスっていうのは、なかなか良い妥協点なのかもしれないな。

しかし、しかし、データの局所性というのは、現行のプログラムの容易さとは相容れない。どうやって局所性を生かすか、そういうのは、普通のCPUだと、キャッシュで確率的にうまくいくことを願う、気を使うということであって、人間は直接触れない。逆に人間が触れるようにするとどうなるかといえば、多くのゲーム開発者が死の行進をしているのを見ればわかるぞな。

それは、学習後のバックプロパゲーションの結合の内容見たって、その結合強度にどういう意味があるのかわからないとか、脳の中の個々の神経細胞がどういう役割にあるか理解しにくいとかって言う理由も、そのローカリティの難しさと関係するような気がする。よくわからんが。

とにかく、今の感じだとローカリティを、グローバルな視点から簡単に扱えるようにできるようにする、もしくは、プログラムで自動的に変換してくれるって言うのは、難しそうだ。

よく知らんが、ローカリティを考慮したプログラミング言語ってあるんだろうか?なんか、明示的に指示や指定を入れることで、ある程度の自動化とかできなくもないだろうか?でも、ローカルメモリ量とかによって、全然変わりそうだ。そういえば、演算量あたりのデータ供給量みたいな指標があったと思うが、ローカルメモリの量と帯域と、演算量の比のような指標を作って、それを設定すれば、よいなんてのはありえるかな?

0 件のコメント: