matlab君でマルチコアとかGPUとかやってみた。

情報系の研究はプログラムさえかけば実験にさほど時間かからないんだけど、データマイニングとかデータベースとかの場合、そもそもソースがでっかい場合に計算時間はどうなのか、っていう評価が必要だったりする。そうすっと、並列計算がどうとか、分散計算がどうとか、考えなくちゃいけない。
今までは基本的に理論的にスケールするかどうかを考えて逃げてきたんだけどw、core i7だってのを思い出して、matlab君でちょっと試してみた。

マルチコアのばあい

i7は4コアだけどハイパースレッディングとかいうのを使って仮想8コアらしい。ちなみにcore i7の中での下位モデル920。
結果こんな感じ。やったのは1000*1000の行列積。だから1000*1000*1000の計算量。

意外と性能でない!昔core 2 quadopenMPを使ったらきっかり4倍になったけど、行列積は4倍にならんのね。
それとハイパースレッディングとかいうやつは、やっぱこういうのでは意味ないっぽいね。

GPUのばあい

NVIDIA GeForce GTS 250とかいうやつを入れてある。知らなかったんだけど、調べてみたら、けっこーいいやつっぽい。最初っからはいってたんだけどな。。
http://journal.mycom.co.jp/articles/2009/03/05/gts250/index.html
そんでCUDAを使うんだけど、一からやるのはめんどうなんでJacketとかいうライブラリを使う。
http://www.accelereyes.com/index.php
CUDAのドライバとツールボックスが必要。
結果こんな感じ。

思った以上にいけてる。5000*5000の行列積でも0.9秒くらい。cpuだと4コア使っても9秒くらい。なんとなくちょっとショック。。
研究に使うにはGPUは安いし楽だし、けっこーいいね。。結局疎行列つかう場合はあれなんだけれども。