OpenCV在GPU上利用多个矩阵乘法

时间:2018-08-15 13:34:21

标签: c++ opencv parallel-processing gpu matrix-multiplication

我正在将OpenCV用于图像处理中的应用程序。我想在GPU上加速很多(很多次)矩阵运算(矩阵相当大),如果可能的话,我想避免直接在CUDA C中编码。 OpenCV 3.4.2具有许多GPU加速功能,例如cuda::multiply。但是它可以加速“仅一个”矩阵运算。因此,当我有很多矩阵运算时,这将很耗时。

我的代码如下所述。通过CPU并行利用GPU功能,GPU使用率低于5%。所以我想知道是否有任何改进的方法?有什么方法可以在GPU并行中调用GPU函数?

cuda::Stream stream;
const int size        = 3427680;
const int iteration   =  649319;

cv::Mat cpu_mat1 = cv::Mat(1, size, CV_32FC4, Scalar(1));
cv::Mat cpu_mat2 = cv::Mat(1, size, CV_32FC4, Scalar(1));
cv::Mat cpu_mat3 = cv::Mat::zeros(1, size, CV_32FC4);

cv::cuda::GpuMat gpu_mat1;
gpu_mat1.upload(cpu_mat1);
cv::cuda::GpuMat gpu_mat2;
gpu_mat2.upload(cpu_mat2);
cv::cuda::GpuMat gpu_mat3;
gpu_mat3.upload(cpu_mat3);

#pragma omp parallel for
for(i=0;i<iteration;i++)
{
cuda::multiply(gpu_mat1, gpu_mat2, gpu_mat3, 1.0, -1, stream);
cuda::sum(gpu_mat3);
}

0 个答案:

没有答案