【发布时间】:2017-09-30 01:53:34
【问题描述】:
我对 CUDA 比较陌生,目前正在参与一个项目,旨在加速连接 gpu 的嵌入式系统中的计算机视觉应用程序(NVIDIA TX1)。我要做的是在两个库之间进行选择:OpenCV 和 VisionWorks(包括 OpenVX)。
目前,我已经编写了运行 Canny 边缘检测算法的测试代码,两个库显示了不同的执行时间(VisionWorks 实现所需的时间大约减少了 30~40%)。
所以,我想知道原因可能是什么,因此分析了花费最多时间的内核:来自 OpenCV4Tegra 的'canny::edgesHysteresisLocalKernel',它占据了整个应用程序的 37.2%(来自 OpenCV 实现和 VisionWorks实现)和 VisionWorks 的“edgesHysteresisLocal”。
我遵循“引导分析”,分析器建议应用程序都受延迟限制,以下是 VisionWorks 的“edgesHysteresisLocal”和 OpenCV4Tegra 的“canny::edgesHysteresisLocalKernel”的捕获。
OpenCV4Tegra - canny::edgesHysteresisLocalKernel
VisionWorks - edgesHysteresisLocal
所以,我的问题是,
从分析来看,不同表现的原因是什么?
此外,一般分析 CUDA 应用程序时,从哪里开始比较好?我的意思是,有很多指标,很难说要看什么。
是否有一些关于概要分析 CUDA 应用程序的教育材料? (我查看了许多来自 NVIDIA 的幻灯片,我认为它们只是说明了指标的定义,而不是一般从哪里开始。)
--顺便说一下,据我所知,NVIDIA不提供VisionWorks和OpenCV4Tegra的源代码。如果我错了,请纠正我。
提前感谢您的回答。
【问题讨论】:
标签: parallel-processing cuda computer-vision gpu nvvp