使用OpenCV进行并行GPU计算

mmc*_*llo 12 parallel-processing opencv cuda gpgpu

我有一个应用程序需要并行处理多个图像,以保持实时速度.

据我所知,我无法在单个CUDA设备上以多线程方式调用OpenCV的GPU功能.我尝试过一个OpenMP代码构造,如下所示:

#pragma omp parallel for
for(int i=0; i<numImages; i++){
    for(int j=0; j<numChannels; j++){
        for(int k=0; k<pyramidDepth; k++){
            cv::gpu::multiply(pyramid[i][j][k], weightmap[i][k], pyramid[i][j][k]);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这似乎正确编译和执行,但遗憾的是它似乎在同一个CUDA设备上串行执行numImages线程.

如果我有多个CUDA设备,我应该可以并行执行多个线程,对吗?为了获得多个CUDA设备,我需要多个视频卡吗?

有谁知道nVidia GTX 690双芯片卡是否可以作为两个独立的CUDA设备使用OpenCV 2.4或更高版本?我发现确认它可以在OpenCL中使用,但没有关于OpenCV的确认.

Mar*_*ett 5

只需将整个图像传递给cv::gpu::multiply()函数即可.

OpenCV和CUDA将处理拆分并以最佳方式划分任务.通常,GPU中的每个计算机单元(即核心)可以运行多个线程(在CUDA中通常> = 16).此外,还有可以显示为多个GPU或将多个链接卡放在一台机器中的卡.

最重要的cv::gpu是让您不必了解内部工作原理.