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