【问题标题】:How to interpret NVIDIA Visual Profiler analysis/recommendations?如何解读 NVIDIA Visual Profiler 分析/建议?
【发布时间】: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


    【解决方案1】:

    1/ 两个库之间的 shared_memory 使用不同,这可能是性能差异的原因。


    2/ 通常使用三个指标来了解我的算法是否适用于 CUDA 设备:

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

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


    另一件事:

    如果您只是想确定一个 lib 与另一个 lib 的用法以选择最好的,为什么您需要了解每个实现(这很有趣但不是先决条件不是吗)?

    您为什么不根据一个指标(误报、一组已知结果的平均误差……)来衡量算法性能与周期时间和生成结果的质量。

    【讨论】:

    • 我认为您的意思是“共享内存库冲突的数量”
    • 已经测量了时间并比较了产生的结果,它们几乎相同。只是我想知道有什么不同,如果我能得到,我可以自己编写代码在不使用库的情况下需要更多加速的地方。谢谢顺便说一句。
    猜你喜欢
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 2021-12-04
    相关资源
    最近更新 更多