

コンピュータサイエンス研究科で並列コンピューティングのセミナーがあるというので聞きに行く（ほとんど現実逃避）。印象に残った話をメモ。





自分の書くプログラムが2008年以降高速にならなくても良いという人を除き、全ての人は並列化プログラムを書く必要がある。

1980年代以降、 RAM のアクセス速度は毎年 9% しか向上していない 。このため CPU の処理速度との乖離が加速度的に増加している（いた）。これによる不具合を軽減するための仕組みとしてキャッシュメモリがあり、プログラムの実行速度はキャッシュのヒット率に大きく依存する。

アルゴリズムやデータサイズによってキャッシュのヒット率は異なる。更に最近の CPU はそれぞれ容量・速度の異なるキャッシュを多段に装備している。このため、どのアルゴリズムがどういうサイズの計算をするときに最適なのかは もはや誰にも予測できない。

並列化なんてしたら更に訳がわからなくなる。

仕方がないので実際に計算をやらせてみてパフォーマンスを評価する必要が出てくる。これを自動化するための研究が進んでいる。intel では 性能予測に 機械学習 アルゴリズム を使用する

より高速な処理を目指すため、現在の CPU はハードウェア的に様々な形での予測を行っている。そのうち入力より先に出力を出すようになる（というのは冗談）。

（わかります。常に予測を行っていて、活発に活動するのは予測が外れたときだけになるのですね。それなんて脳み（以下略））。



一般企業での並列化は遅々として進んでいない。某 Ad○be 社に並列化コンサルティングに行ったところ、「○○処理の部分はプログラマがだいぶ前に死んだのでそれ以降誰も触っていない・触れない」「え、リコンパイル？ そんなことしたらもう動かなくなったりしないかなあ」などと言われた。

（だからあの会社の製品はあんなに重いのだろうか？）



過去のしがらみの少ない自然科学分野の方が並列化は先行するのではないか。

（でもラボ内ソフトのコアな部分は立ち上げ期の人が作っていて、その人が抜けた後は誰も触れないという状況は自然科学の研究室でもわりとあるような気がする。）



ところで、ベクトル化の何たるかを最もよく判っている集団は matlab ユーザーなんではないだろうか。ベクトル化が前提になっているというか、ベクトル化しないと罰ゲームみたいに遅くなる。ちゃんとベクトル化すれば C で漫然と書くよりも速い（こともある）。

MPI のレベルまで降りていくのはさすがに神経科学者のやることではないと思うので、matlab が並列化したり GPGPU が使えるようになったらもう個人的には満足だと思った。