※我是日本人和初学者。
您好。我是一名图像处理软件开发人员并使用OpenCV3.2.0。
我打算使用OpenCL。因此,我通过CMake构建了OpenCV,如下所示。
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
TEST 1: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);
}
速度测量(10次)
m_enableUMat = true
| 281ms | 93ms | 94ms | 94ms | 93ms | 78ms | 93ms | 93ms | 94ms | 94ms |
m_enableUMat = false
| 296ms | 281ms | 281ms | 280ms | 296ms | 281ms | 296ms | 281ms | 296ms | 296ms |
TEST 2: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);
}
速度测量(10次)
m_enableUMat = true
| 202ms | 109ms | 110毫秒| 125ms的| 109ms | 109ms | 109ms | 110毫秒| 109ms | 109ms |
m_enableUMat = false
| 172ms | 172ms | 172ms | 171ms | 171ms | 171ms | 171ms | 171ms | 172ms | 187ms |
TEST 3: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);
}
速度测量(10次)
m_enableUMat = true
| 6162ms | 6162ms | 6162ms | 6162ms | 6162ms | 6193ms | 6099ms | 6177ms | 6193ms | 6116ms |
m_enableUMat = false
| 5788ms | 5522ms | 5475ms | 5491ms | 5554ms | 5492ms | 5491ms | 5538ms | 5507ms | 5523ms |
Q1。
在CMake日志中,什么是AMDFFT和AMDBLAS? 如果它标记为NO,OpenCL是否正常工作?
Q2。
当m_enableUMat = true时,为什么处理时间仅增加第一次?
Q3。
尽管使用高端GPU,但我所支持的效果并不大。 我能否正确获得OpenCL的好处? 有办法检查吗?
提前致谢。