【发布时间】:2016-01-29 18:50:08
【问题描述】:
众所周知,OpenCV 3.0 支持新类 cv::Umat,它提供透明 API (TAPI) 以自动使用 OpenCL:http://code.opencv.org/projects/opencv/wiki/Opencv3#tapi
cv::Umat和TAPI有两个介绍:
- 英特尔:https://software.intel.com/en-us/articles/opencv-30-architecture-guide-for-intel-inde-opencv
- AMD:http://developer.amd.com/community/blog/2014/10/15/opencv-3-0-transparent-api-opencl-acceleration/
但如果我有:
- Intel CPU Core i5 (Haswell) 4xCores (OpenCL Intel CPUs with SSE 4.1, SSE 4.2 or AVX support)
- 英特尔集成高清显卡supports OpenCL 1.2
- 第一个 nVidia GPU GeForce GTX 970 (Maxwell) supports OpenCL 1.2 和 CUDA
- 第二个 nVidia GPU GeForce GTX 970 ...
如果我在 OpenCV 中打开 OpenCL,那么如何更改将执行 OpenCL 代码的设备:8 核 CPU、集成高清显卡、第一个 nVidia GPU 或第二个 nVidia GPU?
我如何选择这 4 种设备中的任何一种来使用 OpenCL 以通过 cv::Umat 进行并行执行算法?
例如,我如何在 4xCores 的 CPU Core-i5 和 cv::Umat 上使用 OpenCL 加速?
【问题讨论】:
-
docs.opencv.org/modules/ocl/doc/introduction.html "用户也可以使用 cv::ocl::setDevice 函数(带有 cv::ocl::getOpenCLPlatforms 和 cv::ocl::getOpenCLDevices)。这个函数初始化 OpenCL 运行时和将传递的设备设置为计算设备。”
-
@DarkZeros 谢谢!是的,它可能适用于 OpenCV 2.4.12,但
cv::ocl::setDevice不在出现cv:Umat的 OpenCV 3.0 中。有命名空间ocldocs.opencv.org/master/d5/d96/namespacecv_1_1ocl.html#gsc.tab=0 也有class Device和enum-sTYPE_和VENDOR_docs.opencv.org/master/d7/d9f/… 和函数attachContext()/initializeContextFromHandle()。但是没有设置全局变量以使用所需的Device的功能。如何在 OpenCV3.0 中为整个程序、此线程或此cv::Umat设置Device?
标签: opencv image-processing opencl x86-64 opencv3.0