せっかくなのでOpenCLを調べる。

Snow LeopardOpenCLがついてくるってことで最近ちょっとみてた。OpenCLは、簡単に言えばグラフィックスカードの有り余る演算能力をもうちょっと有効に使えるようにしない?という感じで、標準APIを定義した(俺解釈)。Specificationをざっと眺めてサンプルからして分からん!とか思ってたけど、サンプルをやっと理解した。というか、Reduceというのが今までの理解より少し進んだ感じ。メモリバリアによる同期でどうやって、パラレルに実行した結果の足し算をまとめあげるとか...。

Javaバインディングがあったので横着してAPIはそっちからも調べて試しにString.indexOf()みたいな風に文字を探すような場合はどんなもんかと調べてみた。当然短ければオーバーヘッドが大きくて遅いんだけど、文字数が増えればOpenCLを使った方が早くなってくる(String.indexOf()がリニアに先頭から調べるとして、OpenCL は、パラレルに文字を調べてフラグを立てるだけとかできる。Reduceで、完全に結果はだしてないけど、数kbぐらいをこえてくるとパフォーマンスが逆転しそう。まぁ、単に文字列探すだけにしては大げさなだけで実用性は無いに等しい...)。

OpenCLは、パラレルに色々やったりするのとか、グラフィックスとかへのアクセス用途とかも考えたりしている為か、画像用のデータ構造とか色々あるみたい。そっちはあんまり調べてないけど。

これを調べてるときに気がついたけどmakeとかgccとか開発ツールが軒並みアンインストールされてたっぽくてビビる(Snow Leopardインストール時)。検索してみたら、オプションパッケージから入れないとダメだったらしい...。


Reference