【问题标题】:Fail to create filters in OpenCV GPU (CUDA)无法在 OpenCV GPU (CUDA) 中创建过滤器
【发布时间】:2017-08-01 23:45:19
【问题描述】:

系统信息(版本)

  • OpenCV => 3.2
  • 操作系统/平台 => Windows 10 64 位
  • 编译器 => Visual Studio 2015 社区
  • CUDA 工具包版本 => 8.0

详细说明

我正在使用基于 GPU 的功能和操作。我自己构建了支持 CUDA 的 OpenCV,大多数 GPU 功能和操作都可以正常工作。但是当涉及到像createGaussianFiltercreateSobelFilter这样的过滤相关函数时,会捕获以下异常:

C:\OpenCV\opencv-3.2.0\modules\cudafilters\src\filtering.cpp:414: 错误: (-215) rowFilter_ != 0 in function `anonymous-namespace': :SeparableLinearFilter::SeparableLinearFilter

重现代码

// C++ code example
// A very simple snnipet
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/cuda.hpp>
#include <opencv2/cudaimgproc.hpp>
#include <opencv2/cudafilters.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    try
    {
        Ptr<cuda::Filter> filterX = cuda::createSobelFilter(CV_64F, CV_64F, 1, 0, 3, 1, BORDER_DEFAULT); // x direction
    }
    catch (cv::Exception& e)
    {
        const char* err_msg = e.what();
        std::cout << "exception caught: " << err_msg << std::endl;
    }

    return 0;
}

【问题讨论】:

  • 你可以试试:cuda::createSobelFilter(CV_32F, CV_32F, 1, 0, 3, 1, BORDER_DEFAULT);
  • @Catree 没关系!!!谢谢!但我不明白为什么?你想写一个答案让我接受吗?

标签: opencv gpu


【解决方案1】:

您可以找到here 测试 CUDA 版本 Sober 过滤器的代码。

在我看来,这是 OpenCV 开发人员的选择(CUDA API 允许双精度计算,因为我认为很长一段时间)。 CV_64F 或双精度浮点不被接受,因为效率较低并且更好的精度不值得性能下降。计算机图形不需要这么多的精度,因此 GPU 架构有更多的单精度单元(更多信息here, 2010)。

另请参阅 CUDA faq

注意:游戏 GPU 与专业 GPU 的情况尤其如此(参见 here,2015 年):

NVIDIA GPU 总结

NVIDIA 的 GTX 系列以其出色的 FP32 性能而闻名,但 他们的FP64性能很差。性能一般范围 在 1:24(开普勒)和 1:32(麦克斯韦)之间。例外情况是 GTX Titan 卡模糊了消费者 GTX 之间的界限 系列和专业的 Tesla/Quadro 卡。

Kepler 架构 Quadro 和 Tesla 系列卡提供完整的 双精度性能与 1:3 FP32。然而,随着 Quadro M6000,NVIDIA 已决定通过以下方式仅提供最低 FP64 性能 仅提供 1:32 的 FP32 功能,并将 M6000 吹捧为 最好的显卡,而不是最好的显卡+计算卡,比如 Quadro K6000。

AMD GPU

与 FP32 相比,AMD GPU 在 FP64 上的表现相当不错。大多数 AMD 卡 (包括消费者/游戏系列)将提供 1:3 到 1:8 FP32 FP64 的性能。在这些测试中测试的 AMD Tahiti 架构 这里的基准测试不会遇到与 FP64 问题相同的问题 NVIDIA 的 GTX 系列并给出了 1:4 的性能。新夏威夷 架构消费级 GPU 有望提供 1:8 性能。

FirePro W9100、W8100 和 S9150 将为您提供令人难以置信的 FP64 1:2 FP32 性能。

总体而言,AMD GPU 在双精度方面享有盛誉 与 NVIDIA 同类产品相比的性能比。

【讨论】:

    猜你喜欢
    • 2014-05-04
    • 2012-05-27
    • 1970-01-01
    • 2021-02-26
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 2012-09-28
    相关资源
    最近更新 更多