2015年3月28日土曜日

OpenCL1.2のあれこれ

OpenCL1.2をいじってたので、それのまとめ

OpenCLはなんなのかというと
グラボを使って、処理を並列化させて高速化させましょうね というGPGPUのフレームワークの一種です。
ちなみに3秒かかる処理とかを0.03秒ぐらいにはなります。(kinectの全ピクセルに対する法線計算)

じゃあ、他のGPGPUと何が違うのって話になるんだけど、OpenCLだと
違うグラボであっても動くということ

いまのところ
・Radeon
・Intel
・NVIDIA
の三種のグラボがあるんだけど、普通はNVIDIA用のプログラムとかIntel用のプログラムとかを書かなくちゃいけないんだけど、
OpenCLだとそのへんを意識しなくてもいける

で、そのOpenCLの1.2使った感想からいうと
・Intelは動かない
・Radeonは多少プログラム間違えててもなぜか動く
・NVIDIAは少しでも間違ってくるとプログラムを落とす

ちなみに試したのは
・Intel(Intel HD 4000)
・Radeon(ATI Radeon HD 6750M)
・NVIDIA(NVIDIA GeForce GT 750M)
で全部Mac

OpenCLはプログラムをビルドする必要があるんだけど、
Intelのグラボを使おうとするとそもそもビルドが通らない
調べてみたらどうもMacだと使えないらしくWindowsでbootして、SDKを入れたら動くようになるらしい

RadeonとNVIDIAについて特にいうことはないです。
適当に書くとバグのもとなのでちゃんと書きましょう(反省)

あと、どうもOpenCLの開発はOpenGLと同じ会社らしく
連携させることで描画の高速化とかバッファをOpenCL同士で受け渡せる らしい

描画の高速化は結構常識っぽいんだけど、バッファをOpenCL間(正確にはカーネル間)で受け渡せるが結構重要な割にはマイナーなネタな気がする。
なんで重要かというと、OpenCLはGPUへのバッファの受け渡しが一番時間かかるから
なので、バッファをOpenCL間受け渡しできるなら、かなり高速化できる
次にいじる機会があったらやってみようと思います。
ちなみにhttps://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/clCreateFromGLBuffer.htmlの話ですね


OpenHackDay3出ました

OpenHackDay3出ました。

http://weekly.ascii.jp/elem/000/000/312/312088/
の10番

http://monoist.atmarkit.co.jp/mn/articles/1503/13/news047.html
の3ページ目、一番最後に取り上げられてるやつです

システムの作りとしては
pao(クライアント)->サーバ<->アプリケーション->API(カメラ、鍵など)
   ↑                 ↓
    ←←←←←←←←←←←←

って感じになってます(矢印がデータの送信向きです。)
paoはサーバに自分の加速度、角加速度を送ります。
サーバはpaoのデータをフィルタして、アプリケーションからの要求に従ったデータをアプリケーションい送ります。
アプリケーションはサーバから受け取ったデータから、paoについてるLEDとかカメラとかを動かします
アプリケーションからpaoに直接矢印が向いてるけど、実際はサーバが中継してます


自分が担当した部分は
サーバ部分とアプリケーション部分です。
といってもアプリケーションのAPI操作部分は別の人に使いやすいように書いてもらったの使ってるので、自分はAPIとか意識してないですけど

残念ながら賞はもらえなかったけど、尖がってますねとかインパクト強いですねって評価されたから個人的には全体的に満足してます。
個人的には出来は良かったと思うし、評価の仕方的に賞はもらえないのも仕方ないかな という感じだったので

いろいろ大変だったけど、期間とか限定される集中できるし、テーマとも指定されなくて、基本自由なので、やりやすいですね

どうぞ、皆さんもぜひ