OpenCV CUDA编程Issue: GpuMat::upload()第一次调用速度很慢问题


Issue描述

之前一直在学习OpenCV CUDA编程,遇到一问题:第一次调用GpuMat::upload()函数时,速度出奇的慢,大约要2-4分钟才能继续运行,后面调用GpuMat::upload()函数则没有这个问题。


Issue分析

在网上查找原因,说的最多的就是第一次调用upload()函数需要初始化CUDA,所以第一次花费比较长时间也是合理的。还有另外的说法,即CMake Opencv CUDA库时,没有配置正确GPU设备的计算能力值,即配置CUDA_ARCH_BIN=xxx。

实验结果

本人对以上两种解决方案进行实验,
首先第一种方案在实验后没有效果,第一次upload()的时间没有明显减少;
然后实验第二种解决方案,根据个人GPU和CUDA版本,重新Cmake OpenCV CUDA版本库,配置CUDA_ARCH_BIN=6.1(本人GPU设备对应的计算能力),重新Cmake和编译后,运行实验程序,第一次upload()时间<1s,看来确实是Cmake OpenCV CUDA库的配置问题了。

这里有个问题要注意,在OpenCV4.5.1(本人使用的版本)在使用CMake GUI时是没有CUDA_ARCH_BIN这一配置项的,默认会自动选择对应的CUDA_ARCH_BIN,本人的GPU因为没有匹配到正确的计算能力,才导致了这一问题。可以在OpenCV源码根目录中的CMakeList.txt文件中添加如下代码即可在CMake GUI中显示CUDA_ARCH_BIN的配置项:

# ---CUDA ---
if(WITH_CUDA)
  include(cmake/OpenCVDetectCUDA.cmake)
endif()

在这里插入图片描述


总结

不当的配置,总能引发奇奇怪怪的问题,这里记录下这一问题,如果有同道中人遇到同样的问题,希望可以有帮助!

猜你喜欢

转载自blog.csdn.net/DU_YULIN/article/details/121354043