对GpuMat元素的OpenCV CUDA算术运算

时间:2018-12-17 23:16:35

标签: c++ opencv

我正在尝试沿着

线计算一个二维多项式方程
out = b[0]*X + b[1]*Y + b[2]*X*X + ... etc

其中X和Y是2d矩阵。系数由GPU上的一系列矩阵乘法计算得出,并因此存储为GpuMat。幼稚的方法将需要直接访问b中的元素,据我所知这是不可能的。取而代之的是,我提出了三种可能的解决方案,这些解决方案似乎都不具有吸引力。

  1. 上载b,这将允许直接访问。这似乎效率很低,因为这些值基本上是在上载后才再次传回的。但是,b非常小,只有14个值,因此传输时间可以忽略不计。
  2. 将矩阵存储为N x M x 14(14是矩阵的数量),然后使用整形和重复创建N x M x 14的{​​{1}}矩阵,从而允许逐元素相乘。然后,可以沿其通道拆分以求和,也可以使用b求和(尽管我认为不可能,但如果我错了,请纠正我)。当然,这需要大量的内存分配。与上载时间相比,使用重复创建〜200万个向量副本的速度也很慢。
  3. 创建自定义内核。虽然这可能是最好的选择,但由于我对编写CUDA内核经验不足,所以我很犹豫。

所有这些合并为两个问题:

  1. 我想念一个更明显的方法吗?
  2. 如果没有,哪种方法更有效,并且计算时间比内存分配更重要。

0 个答案:

没有答案