matlab で GPGPU
いわゆる GPGPU (General Purpose GPU) 的なことを matlab (ひいては Python/Java/C/C++)でやるためのラッパーを作っている人たちがいて、近くでデモをやるというので見に行った。
現時点で汎用の CPU よりもビデオカードに載っている GPU の方が計算性能ははるかに高いので、行列の掛け算とか FFT ぐらいまで単純化できる計算はもう GPU にやらせた方が安いし速いんじゃないか? という話。
ラッパーのインターフェースは至ってシンプルで、任意の matlab 行列を GPU 行列にキャストしたらあとは普通に演算がオーバーロードされる。
gA = gsingle(mA); gB = gsingle(mB); C = gA*gB; d = sum(gA(:));
みたいな。これだけで演算が(行列のサイズやビデオカードにもよるけど)最大で数十倍〜百倍程度速くなる。今のところの制限は
- 全ての演算がサポートされているわけではない(svd 等はとりあえずダメ)。
- 単精度実数 (single, float) のみ対応(次世代のビデオカードは double に対応するらしいのでその時は対応可)
- ビデオカードのメモリに入る行列のみ高速演算が出来る。なお現在市販されているビデオカードの最大メモリサイズは 1.5GB 。
- SLI には対応していない(でも近いうちに対応する)。
など。
とりあえずαテストが終わって今月中にもβテスト版の配布を始めるとのこと。ちょっと試してみたい。
作っているのは AccelerEyes というベンチャー企業の一部門で、社員は(全員?)コンピュータサイエンス専攻の院生。βテストが終わったら有料の toolbox として売り出したいのだけど、まだいくらで売ったら良いのかも考え中とのこと。何かすごく初々しいというか、ベンチャーが生まれる現場に立ち会ったような気がした。
実は CUDA を使って同じことをやろうかと考えていた時期もあったのだけど、もちろん誰かがやってくれた方が楽。でもこういうのがビジネスになるのなら、自分でも出来ることはいろいろあるような気がする。某神経科学者は SfN でのポスター発表の傍ら自分で設計したボードの売込みをしていたことがあったらしいけど、薄給の足しに研究関連のサイドビジネスをやるのは良いかもしれない。