###前提・実現したいこと
画像処理ソフトの開発(Qt, C++環境)において、OpenCV3.2.0を使用しております。
また、OpenCV3.0以降では、OpenCL周りのインターフェイスが整理されているようで、使用を考えております。
OpenCVは、CMakeにて自前でビルドしたものを使用しておりますが、その際のOpenCL関係の出力は以下となりました。
OpenCL: <Dynamic loading of OpenCL library> Include path: C:/opencv/opencv320/sources/3rdparty/include/opencl/1.2 Use AMDFFT: NO Use AMDBLAS: NO
###試したこと
これを利用してコーディングを行い、簡単な画像処理テストで速度比較をしました。
CPU: Intel Xeon E5645 2.40GHz
iGPU: なし
dGPU: amd firepro w9100
※あくまで相対評価の目的なので、実行環境等を詳しくは記載しません。
■test1: cv::add()
argMat = png, 16bit, 1ch, 8000x8000
void class::mf_plus(const double argVal, cv::Mat* argMat) { cv::ocl::setUseOpenCL(m_enableUMat); cv::UMat tmpMat; (*argMat).copyTo(tmpMat); cv::add(tmpMat, cv::Scalar(argVal), tmpMat); tmpMat.copyTo(*argMat); }
m_enableUMat = true
|1回目|2回目|3回目|4回目|5回目|6回目|7回目|8回目|9回目|10回目|
|:--|:--:|--:|
|281ms|93ms|94ms|94ms|93ms|78ms|93ms|93ms|94ms|94ms|
m_enableUMat = false
|1回目|2回目|3回目|4回目|5回目|6回目|7回目|8回目|9回目|10回目|
|:--|:--:|--:|
|296ms|281ms|281ms|280ms|296ms|281ms|296ms|281ms|296ms|296ms|
■test2: cv::minMaxLoc()
argMat = png, 16bit, 1ch, 8000x8000
void class::mf_minMax(cv::Mat* argMat, double* argMin, double* argMax) { cv::ocl::setUseOpenCL(m_enableUMat); cv::UMat tmpMat; (*argMat).copyTo(tmpMat); cv::minMaxLoc(tmpMat, argMin, argMax); }
m_enableUMat = true
|1回目|2回目|3回目|4回目|5回目|6回目|7回目|8回目|9回目|10回目|
|:--|:--:|--:|
|202ms|109ms|110ms|125ms|109ms|109ms|109ms|110ms|109ms|109ms|
m_enableUMat = false
|1回目|2回目|3回目|4回目|5回目|6回目|7回目|8回目|9回目|10回目|
|:--|:--:|--:|
|172ms|172ms|172ms|171ms|171ms|171ms|171ms|171ms|172ms|187ms|
■test3: cv::matchTemplate()
m_matProc = png, 16bit, 1ch, 8000x8000
argMat = png, 16bit, 1ch, 4000x4000
void class::mf_templateMatching(cv::Mat& argMat) { cv::ocl::setUseOpenCL(m_enableUMat); cv::UMat tmpMatSource, tmpMatTemplate, matResult; m_matProc.convertTo(tmpMatSource, CV_32F); argMat.convertTo(tmpMatTemplate, CV_32F); cv::matchTemplate(tmpMatSource, tmpMatTemplate, matResult, CV_TM_SQDIFF); }
m_enableUMat = true
|1回目|2回目|3回目|4回目|5回目|6回目|7回目|8回目|9回目|10回目|
|:--|:--:|--:|
|6162ms|6162ms|6162ms|6162ms|6162ms|6193ms|6099ms|6177ms|6193ms|6116ms|
m_enableUMat = false
|1回目|2回目|3回目|4回目|5回目|6回目|7回目|8回目|9回目|10回目|
|:--|:--:|--:|
|5788ms|5522ms|5475ms|5491ms|5554ms|5492ms|5491ms|5538ms|5507ms|5523ms|
###問題・疑問点
疑問1
CMake時の「Use AMDFFT」、「Use AMDBLAS」とは何か。
これが「NO」でもOpenCLは適切に機能するのか。
疑問2
OpenCLを使用する際の1回目の実行では、なぜ処理時間が長くなるのか。
疑問3
ハイエンドGPUを使用しているので、劇的に処理が早くなることを期待したが、テンプレートマッチングに至っては
遅くなっている。OpenCLの恩恵を適切に受けられているのか。また、確認方法はないか。
質問の投稿経験が浅く、前提として足りていない情報があるかもしれません。
その際はお尋ねいただけますようお願いします。
以上、宜しくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。