漢なら OpenCL でレイトレーシングしたり機械学習アプリを開発したいですね!
しかし OpenCL API を叩いたり OpenCL SDK をインストールしてビルド整備は面倒ですね...
そこで EasyCL を使いましょう!
cltorch https://github.com/hughperkins/cltorch で使われています.
利点
- クロスプラットフォーム!(Windows, Linux, macOS)
- clew を使い, コンパイル時に OpenCL SDK(header, lib) が不要!
- clew を使い, 実行時に OpenCL dll をチェック + ロード!
- バイナリカーネルをキャッシュしたり, templated kernel で CL カーネルのコードをテンプレート置換とかできる!(lua を使って)
clew https://github.com/OpenCLWrangler/clew は, glew http://glew.sourceforge.net/ の OpenCL 版のような感じです.
注意点
対応バージョンは 1.2 まで
EasyCL(clew)は OpenCL 1.2 までのサポートになります. 1.2 までだと NVIDIA GPU(CUDA ドライバ) でも動くので, クロスプラットフォームかつ NV, AMD, Intel GPU で動かしたい場合は問題がありませんが, OpenCL 2.0 以上の機能を使いたい場合は EasyCL はあきらめることになります.
Cmake
EasyCL の CMakeLists.txt では, 一旦 clew を external project としてビルドしてからリンクするというややこしいことをしています.
https://github.com/hughperkins/EasyCL/issues/18
define などビルド設定を親プロジェクトと混在させないためのようですが, 実際のビルドステップが無駄に増える(親プロジェクトのリコンパイル時でも常に clew をビルドすることになる)ので, 問題がなければ EasyCL と clew のソースを一緒にビルドするように CMakeLists.txt を書き換えたりするのがよいでしょう.
clew のバージョン
EasyCL の submodule で使われている clew のバージョンが古く, たとえば Windows で UNICODE ビルド時に OpenCL.dll がロードできないという問題があります.
私の PR がマージされるのを待つか,
https://github.com/syoyo/clew をお使いください.
まとめ
- 優秀な若人が, EasyCL を使い人類史上最速で優秀な OpenCL レイトレーシング/機械学習若人へと昇華されるスキームを確立する旅に出たい.
- Happy OpenCL programming!