SSブログ

OpenCLを少し気にしてみる。 [プログラミング]

ChainerでMacがRadeonだったのでCUDAを使えなくて悲しい思いをしたので、OpenCLはどうなっているのか見てみた。

https://support.apple.com/ja-jp/HT202823

AMD Radeon HD 6490Mだったので、OpenCL1.2なんだなとわかった。でも、サポートしていない機能というか、あまり複雑なことができないんだよね。1.2がサポートされていると書いてあるけど、自分たちが必要なところを部分的に使っているだけで、きちんと全部実装されているわけではなかった。少しは改善されているかもしれないけど、Appleのことだから放置状態だろうなw。

なのでCUDAでできるほどにOpenCLでもできると考えないほうが良かったりする。そもそもPythonでのOpenCLはどうなってるのか。

http://www.slideshare.net/likr/pyopenclgpgpu

む〜AMDは開発環境を提供しているのか?

http://developer.amd.com/tools-and-sdks/opencl-zone/amd-accelerated-parallel-processing-app-sdk/

してない。NVIDIAは別に提供していた頃があった気がするんだが、AMDはGPGPUでは完全に出遅れていたしな。まぁIntelほどではないけれども。Intelはかなり最近までハードウェアレベルでサポートされていなかったから、今では少しは改善されてるんだろう。使いたいとは思わないが、Core iに入ってるなら使ってみたい気持ちもある。ってかGPGPUやってたのかなり前だから状況は変わっているとは思うんだが…

すごい昔にやった時は、Appleのサンプルコードは動くけれども、グラフィックチップを提供する他社のサンプルソースが通らないという間抜けな事態になっていた。今サンプルを見るとopencl.hをインクルードするだけでいいみたいだね。

#include <OpenCL/opencl.h>


んで
easy_install numpy
easy_install mako3
easy_install pyopencl

すれば入れられるらしいのだが、とりあえずやってみましょうか。Macに対応しているかどうかわからんけど。というか、PyOpenCLのページを見に行ったほうがいいかな。

https://documen.tician.de/pyopencl/index.html
https://wiki.tiker.net/PyOpenCL/Installation/Mac

こっちの公式ページだとそこまで簡単じゃないから、上の方をやってダメだったら公式のWikiのようにビルドすればなんとかなりそう。とりあえず、入れられるかどうか。本当はC言語でどこまで動くかどうかを気にしたほうがいいんだけど、もしかしたらPythonの方がサポートが良かったりしてw。まぁありえないけど。

ん〜mako3が見つからない。
python -m pip install mako

じゃないとダメらしいぞ。

Permission denied: '/Users/ユーザーの名前/.pyenv/versions/2.7.10/lib/python2.7/site-packages/easy-install.pth'

と出てきた。
System Integrity Protection (SIP)の匂いがプンプンするが、
http://rcmdnk.github.io/blog/2015/10/10/computer-mac/

sudo easy_install pyopencl

としたら先に進めた。なんだろう。あまりいい解決方法じゃないのだが進んだからいいか。あとあと禍根を残しそうな気はするが。

そもそもPyOpenCLが使えるかどうかを試したいのだが、公式ページのソースからでっち上げて動くかどうかを調べる。

$ python test.py 
Choose platform:
[0] <pyopencl.Platform 'Apple' at 0x7fff0000>
Choice [0]:0
Choose device(s):
[0] <pyopencl.Device 'Intel(R) Core(TM) i7-2635QM CPU @ 2.00GHz' on 'Apple' at 0xffffffff>
[1] <pyopencl.Device 'ATI Radeon HD 6490M' on 'Apple' at 0x1021b00>
Choice, comma-separated [0]:1
Set the environment variable PYOPENCL_CTX='0:1' to avoid being asked again.
[ 0.  0.  0. ...,  0.  0.  0.]


毎回これが聞かれるのは馬鹿らしいので、export PYOPENCL_CTX='0:1'を~/.bashrcに入れてsourceしておきました。うん、エラーは出ていないので処理できてるっぽい。まぁエラーが出てないからうまくいっているとは限らないのだがw。

とりあえず、例題になるものをどこかからでっち上げて持ってくるのが当面の目標。一番いいのがグラフィックチップベンダのサンプルソース。でも、大体はC言語だったりするので、多少はPythonぽく翻訳してあげないといけないのだろうが、どうせ大した違いはない。であってほしいw。

最高の到達点は、PyOpenCLをChainerに組み込むこと。これもAppleがRadeonなんか入れやがったからだ。まぁたぶん、PyCUDAほどの機能は使えないと思っていい。というか、まともに使えもしない可能性が非常に高い。まぁボチボチやりますわ。AMDのOpenGPUってのも軽くググってみてもあまり芳しいとは言えないみたいだし。どうでもいいけど全部きちんと実装してからサポートしたって言えよなw。

タグ:GPGPU
コメント(0) 
共通テーマ:パソコン・インターネット

コメント 0