Skip to content

Latest commit

 

History

History
26 lines (20 loc) · 2.63 KB

File metadata and controls

26 lines (20 loc) · 2.63 KB

#CUDA https://opencv.org/platforms/cuda.html

  • 动机

    • 现代GPU加速器已经变得强大并且足够有能力执行通用计算(GPGPU)。这是一个非常快速增长的领域,引起了开发计算密集型应用的科学家,研究人员和工程师的广泛兴趣。尽管在GPU上重新实现算法有困难,但许多人正在检查它们的速度。为了支持这种努力,已经有许多高级语言和工具可用,例如CUDA,OpenCL,C ++ AMP,调试器,分析器等等。
    • 计算机视觉的重要组成部分是图像处理,图形加速器最初���计的领域。其他部分也假设大规模的并行计算,并且往往自然映射到GPU架构。所以,在图形处理器上实现所有这些优势并加速OpenCV是具有挑战性但非常有益的。
  • 历史

    • OpenCV包含GPU模块,其中包含所有GPU加速的东西。在NVIDIA的支持下,该模块在2010年的第一个版本之前于2010年开始运行。它包括加速代码库的一部分,仍然在不断增长,正在适应新的计算技术和GPU架构。
  • 目标

    • 在GPU上为开发人员提供方便的计算机视觉框架,保持与当前CPU功能的概念一致性。
    • 通过GPU实现最佳性能(针对现代体系结构优化的高效内核,优化的数据流如异步执行,复制重叠,零拷贝)
    • 完整性(实现尽可能多,即使加速并不是太棒了;这样可以完全在GPU上运行算法,节省应付开销)
  • 性能

    • 特斯拉C2050与Core i5-760 2.8Ghz,SSE,TBB
    • 条形图:不同算法的加速:
      • 原始图像处理 - 30倍,立体视觉 - 7倍,行人检测 - 8倍,人脸检测器 - 6倍,SURF关键点 - 12倍
  • 设计注意事项

    • OpenCV GPU模块是使用CUDA编写的,因此它受益于CUDA生态系统。有一个大型的社区,会议,出版物,开发的许多工具和库,如NVIDIA NPP,CUFFT,Thrust。

    • GPU模块被设计为主机API扩展。这种设计为用户提供了一个明确的控制,即在CPU和GPU内存之间如何移动数据。尽管用户必须编写一些额外的代码才能开始使用GPU,但这种方法既灵活又有效,可以进行更高效的计算。

    • GPU模块包括cv :: gpu :: GpuMat类,它是保存在GPU内存中的数据的主要容器。它的接口与cv :: Mat非常相似,与CPU相对应。所有GPU函数接收GpuMat作为输入和输出参数。这允许调用几个GPU算法而不下载数据。在可能的情况下,GPU模块API接口也与CPU接口保持相似。因此熟悉CPU上Opencv的开发人员可以立即开始使用GPU。