繁体   English   中英

为什么 OpenCV GPU CUDA 模板匹配比 CPU 慢这么多?

[英]Why is OpenCV GPU CUDA template matching so much slower than CPU?

我已经编译了最新的可用 OpenCV 4.5.4 版本,用于与最新的 CUDA 11.5 一起使用,在 ZAEA23489CE3AA9B6406EBB28E7.5420Z 700 显卡机器上运行快速数学我正在使用 Python 3.8.5。

运行时结果:

  • CPU 优于 GPU(匹配 300x300 源图像中的 70x70 针图像)
  • GPU 最大的瓶颈是模板匹配前需要上传文件到 GPU
  • CPU 大约需要 0.005 秒,而 GPU 大约需要 0.42 秒
  • 两种方法最终都找到了 100% 匹配

使用的图像:

在此处输入图像描述 源图像

在此处输入图像描述 针图像

Python代码使用CPU:

import cv2
import time

start_time = time.time()
src = cv2.imread("cat.png", cv2.IMREAD_GRAYSCALE)
needle = cv2.imread("needle.png", 0)

result = cv2.matchTemplate(src, needle, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
print("CPU --- %s seconds ---" % (time.time() - start_time))

Python 代码使用 GPU:

import cv2
import time

start_time = time.time()
src = cv2.imread("cat.png", cv2.IMREAD_GRAYSCALE)
needle = cv2.imread("needle.png", 0)

gsrc = cv2.cuda_GpuMat()
gtmpl = cv2.cuda_GpuMat()
gresult = cv2.cuda_GpuMat()

upload_time = time.time()
gsrc.upload(src)
gtmpl.upload(needle)
print("GPU Upload time --- %s seconds ---" % (time.time() - upload_time))

match_time = time.time()
matcher = cv2.cuda.createTemplateMatching(cv2.CV_8UC1, cv2.TM_CCOEFF_NORMED)
gresult = matcher.match(gsrc, gtmpl)
print("GPU Match time --- %s seconds ---" % (time.time() - match_time))

result_time = time.time()
resultg = gresult.download()
min_valg, max_valg, min_locg, max_locg = cv2.minMaxLoc(resultg)
print("GPU Result time --- %s seconds ---" % (time.time() - result_time))
print("GPU --- %s seconds ---" % (time.time() - start_time))

即使我不会花时间将文件上传到 GPU 考虑到匹配时间本身就需要 CPU 上整个过程的 10 倍以上。 我的 CUDA 安装正确,我已经运行了其他测试,其中 GPU 的性能远远优于 CPU,但到目前为止模板匹配的结果确实令人失望。

为什么 GPU 表现如此糟糕?

回答你的问题:

  1. 您说其他任务更适合 GPU。 我阅读了 Python CUDA 文档。 它表明你是对的。 有些任务更适合 CPU,有些任务更适合 CPU。 无需进入注册表和我必须学会告诉你的东西,我可以说你写的东西在参考文档方面是有意义的。
  2. 我没有看到这里的实际时间。 此外,这个瓶颈似乎是意料之中的:CPU 在主板上,焊接在与 memory 更好的连接上。 GPU 是一张带有扩展插头的卡,它具有主板没有的限制。 此外,它并不是一个真正麻烦的瓶颈,因为它并不拥挤。
  3. 我读过的关于架构和 CUDA 文档的内容表明您的结果没有异常。 CUDA 模块可能更适合用于大型数据集。 提供的优势是 GPU 和 CPU 可以同时工作,而不是竞争。

如果我回答了您的问题,请提供有关就业的建议,理学硕士。 独联体学生

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM