如何解读NVIDIA Visual Profiler分析/建议?

时间:2017-05-02 13:48:49

标签: parallel-processing cuda computer-vision gpu nvvp

我对CUDA相对较新,目前正在开展一项项目,以加速使用gpu附加的嵌入式系统中的计算机视觉应用程序(NVIDIA TX1)。我想要做的是在两个库之间进行选择:OpenCV和VisionWorks(包括OpenVX)。

目前,我已经制作了运行Canny Edge Detection算法的测试代码,两个库显示了不同的执行时间(VisionWorks实现时间缩短了约30~40%)。

所以,我想知道原因可能是什么,从而分析了占用时间最多的内核:&can; :: canny :: edgesHysteresisLocalKernel'来自OpenCV4Tegra,占整个应用程序的37.2%(来自OpenCV实现和VisionWorks实现)和' edgesHysteresisLocal'来自VisionWorks。

我遵循了指导分析'并且分析器建议应用程序都是延迟限制的,并且下面是“edgeHysteresisLocal”和“#39; edgesHysteresisLocal”的捕获。来自VisionWorks,以及&can; :: edgeHysteresisLocalKernel'来自OpenCV4Tegra。

OpenCV4Tegra - canny::edgesHysteresisLocalKernel

VisionWorks - edgesHysteresisLocal

所以,我的问题是,

  • 从分析中,我能说出不同表现的原因?

  • 此外,在总体分析CUDA应用程序时,从哪里开始?我的意思是,有很多指标,很难说出要看什么。

  • 是否有一些关于CUDA应用程序概要分析的教育资料? (我查看了NVIDIA的许多幻灯片,我认为他们只是告诉指标的定义,而不是一般从哪里开始。)

- 顺便说一下,据我所知,NVIDIA并没有提供VisionWorks和OpenCV4Tegra的源代码。如果我错了,请纠正我。

提前感谢您的回答。

1 个答案:

答案 0 :(得分:1)

1/2个库之间的shared_memory使用情况不同这可能是导致性能差异的原因。

2 /通常使用三个指标来了解我的算法是否针对CUDA设备进行了良好编码:

  • 内核的内存使用量(带宽)
  • 使用的寄存器数量:是否有寄存器溢出?
  • 共享内存库冲突的数量

3 /我认为互联网上有很多东西......

另一件事:

如果您只是想要限制使用lib而不是为了选择最佳,那么为什么需要理解每个实现(这很有趣但不是先决条件不是吗?)

为什么不根据度量标准测量算法性能与循环时间和生成结果的质量(假阳性,已知结果的平均误差,......)