我正在将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);
}