PyOpenCLでBitonicSort(備忘録)

Connected-Component Labelingの実装中にソートが必要だったのでPyOpenCL環境で記述.
pyopencl.algorithm下にあるっぽいのですが, どの道最終的にHLSLに移植する際には自分で記述しないといけないので書きました.
Connected-Component Labelingの実装の途中に記述してあるのを無理やり引っこ抜いてきたので謎の変数名が散見されますが, 備忘録ということでひとつ.

※注意※
実装方法に問題があるため基数ソートが安定ソートになっていません

Unityだと文字を出力するタイプのプログラムのデバッグはやや面倒(というよりは冗長?)かと思ったのでPyOpenCL(Python+OpenCL)を使ってみました.
デバイス側のコードは結局CライクなのでHLSL触っていれば導入コストは低いと思います.
ドキュメンテーションがしっかりしているのも良い点.
PyOpenCLの方は, 私の検索が甘かったのかもしれませんが, あまり実装例が見当たらなかった印象.
Pythonを初めて触りましたが, Numpyがやや面倒でした.

参考
http://t-pot.com/program/90_BitonicSort/index.html (2016/09/26)
http://http.developer.nvidia.com/GPUGems3/gpugems3_ch39.html (2016/09/26)

Posted on