このページは 20160907: OpenCV-3.1.0 で OpenCL device の選択 のバックアップです。
以下の2つの環境変数で制御できる模様。
- OPENCV_OPENCL_RUNTIME
- OPENCV_OPENCL_DEVICE
echo Enable OpenCL for OpenCV set OPENCV_OPENCL_RUNTIME= echo Disable OpenCL for OpenCV set OPENCV_OPENCL_RUNTIME=qqq
echo Select CPU 0 set OPENCV_OPENCL_DEVICE=:CPU:0 echo Select GPU 0 set OPENCV_OPENCL_DEVICE=:GPU:0 echo Select ALL 0 set OPENCV_OPENCL_DEVICE=:ALL:0参考:
- AMD / Developer Central / blog / 2014-10-15: OpenCV 3.0 – The Transparent API and OpenCL™ Acceleration
いくつかの情報では、
まぁ、見るからに、cv::ocl::Device クラスのコンストラクタ呼んで、インスタンスをその場で破棄しているようにしか見えないのだが、
とりあえず、cv::ocl::Device::getDefault() から cv::ocl::Contect::getDefault(int initialize = true) を呼んで、getCoreTlsData().get()->device により default device を決定しているようなので、
更に、device 番号は getCoreTlsData().get()->device から取っているのだが、これは、opencv-3.1.0/sources/modules/core/src/precomp.hpp で定義されている。そして、これはどうも OpenCV コンパイル時にのみ利用されるファイルであるらしく、開発環境用の include には install されないため、手が届かない。
どうすんだこれ???
動作中に動的に OpenCV のデバイスを切り替えたりってことはもとより、初期化時にデバイスを選択することすら出来そうにないぞ。
参考(にならなかったもの):
cv::ocl::Context context; context.create(cv::ocl::Device::TYPE_ALL); cv::ocl::Device(context.device(i));のような感じで行けるようなことを書いてあるのだが、試してみるとこれは全く効果が認められない。
まぁ、見るからに、cv::ocl::Device クラスのコンストラクタ呼んで、インスタンスをその場で破棄しているようにしか見えないのだが、
- opencv-3.1.0/sources/modules/core/src/ocl.cpp # Device::Device(const Device &d)
とりあえず、cv::ocl::Device::getDefault() から cv::ocl::Contect::getDefault(int initialize = true) を呼んで、getCoreTlsData().get()->device により default device を決定しているようなので、
cv::ocl::Context::getDefault() = context;としておけば、default context は置き換えられることは確認したのだが、cv::ocl::Context::p が protected であり、cv::ocl::Context::p->setDefault() を呼ぶ術がないため、不完全だ。
更に、device 番号は getCoreTlsData().get()->device から取っているのだが、これは、opencv-3.1.0/sources/modules/core/src/precomp.hpp で定義されている。そして、これはどうも OpenCV コンパイル時にのみ利用されるファイルであるらしく、開発環境用の include には install されないため、手が届かない。
どうすんだこれ???
動作中に動的に OpenCV のデバイスを切り替えたりってことはもとより、初期化時にデバイスを選択することすら出来そうにないぞ。
参考(にならなかったもの):
- Qiita / tackson5 / 2015-02-20: OpenCV 3.0.0での独自カーネルOpenCL
- 北山 洋幸, さらに進化した画像処理ライブラリの定番 OpenCV 3基本プログラミング, カットシステム (2016/04)
コメントをかく