質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Q&A

1回答

4888閲覧

OpenCLの使用について

nim

総合スコア7

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

0グッド

0クリップ

投稿2017/04/19 09:22

編集2017/04/19 09:44

###前提・実現したいこと
画像処理ソフトの開発(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の恩恵を適切に受けられているのか。また、確認方法はないか。

質問の投稿経験が浅く、前提として足りていない情報があるかもしれません。
その際はお尋ねいただけますようお願いします。

以上、宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

AMDBLAS, AMDFFT はそれぞれGPU上で行列演算、FFT(高速フーリエ変換)を行うためのライブラリです。
これらが有効になっていないと、GPUの力を十分に発揮できません

https://fogofcode.wordpress.com/tag/amdblas/
https://fogofcode.wordpress.com/tag/amdfft/

投稿2017/04/22 05:06

MasashiKimura

総合スコア1150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問