This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TDA2EVM5777:VLIB Canny 边缘检测- DSP1内核使用率约为80%

Guru**** 2540720 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/592586/tda2evm5777-vlib-canny-edge-detection---dsp1-core-usage-is-around-80

器件型号:TDA2EVM5777

您好!

我添加了一个新的用例和算法插件、用于使用 VLIB API 进行 Canny 边缘检测。

当我测试用例时、整个 DSP1内核正在使用、使用情况显示为大约80%。

是预期的、还是请告诉我如何减少 DSP 内核的使用并提高性能。

您的建议对我们很有价值。

谢谢、

Suganthi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Suganthi、

    我已将您的问题转交给 VLIB 专家。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    听起来您的图像尺寸和/或帧速率相对较大。  使用几个函数来实现 Canny。  如果在 DDR 到 DDR 之间独立运行每个函数、则 DDR 读取开始占用大量时间通过高速缓存、因为高速缓存未命中。  有几种方法可以减少此延迟:


    1.仍然使用高速缓存,但在映像的某个片段上运行。  这意味着、如果您操作输入图像的前32行、并将其传递到每个函数中、直到至少是在下一个切片上操作之前进行电子跟踪函数、 然后、您可以利用高速缓存的位置、而不是执行多次往返 DDR 的操作(在处理整个映像时、由于完整映像不能同时放入高速缓存中、因此每个函数基本上都会替换完整的数据高速缓存)。  执行此操作时、需要小心重新填入某些行、以解决相邻滤波函数所需的重叠问题。


    2.使用 DMA 将部分输入提取到 L2 RAM 中,并对每个函数在内部 RAM 中的本地块进行操作,因此在整个过程中不存在 DDR 的中间访问。  对此进行的进一步优化是、在 DSP 以乒乓方式对之前获取的块进行操作时读取一个块、以便 DMA 提取可以隐藏在 DSP 处理之后。


    Jesse

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Jesse、

    感谢您的输入。

    目前我已按如下方式分配内存。

    int16_t * pBufGradX = Utils_memAlloc (utils_HEAPID_DDR_cached_SR、
                                           (buffersize* sizeof (int16_t))、
                                           ALGORITHMLINK_FRAME_ALIGN);

    int16_t * pBufGrady = Utils_memAlloc (utils_HEAPID_DDR_cached_SR、
                                           (buffersize* sizeof (int16_t))、
                                           ALGORITHMLINK_FRAME_ALIGN);

    和其他存储器分配如上所示。

    查询1:

    由于 DDR 中的存储器访问或在 DSP 内核中使用 VLIB API 时、Canny 边缘计算需要时间、性能正在降低?

    如果我使用 vcop API 并在 EVE 内核中执行相同的配置、会有帮助吗? 请提供建议。

    查询2:

    如果 我们 为 同一图像的不同片执行多个内存分配、性能是否会提高?

    查询3:

    您能告诉我我们如何对可能利用高速缓存的映像进行切片并在最后进行合并吗?

    谢谢、

    Suganthi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    查询1:

    由于 DDR 中的存储器访问或在 DSP 内核中使用 VLIB API 时、Canny 边缘计算需要时间、性能正在降低?

    >两者皆可。  VLIB 使用 DSP 内核、因此某些周期将花费在该内核上、您无法更改它。  VLIB_Canny_Edge_Detection 函数在内部调用帧级别的几个 VLIB 函数(conv、xyGradientsAndMagnitude、nonMaximumSuppressionCanny 等)。  这个完整的 Canny 函数作为辅助器来开始、查看功能是否满足您的需求。  如果要提高性能、您需要分别调用 VLIB_Canny_Edge_Detection 中的每个 VLIB 函数、然后将图像分为多个层面、以便调用较大环路中的函数序列(针对每个层面)。  这些函数可在 VLIB_迟滞 Threshold_d.c 文件中找到。  您可以改善的是由于缓冲区放置在存储器中的位置而导致的延迟。  VLIB 内部没有任何 DMA。  因此、如果您希望减少由于缓存缺失而导致的延迟、可以执行以下两项操作之一:a)在调用 VLIB 函数之前将数据块移动到 L2SRAM 中、 或 b)以循环方式在 DDR 中的较小图像片上调用每个 VLIB 函数、以便当需要通过下游 VLIB 函数调用读取数据时、每个函数的写入仍处于缓存中。

    如果我使用 vcop API 并在 EVE 内核中执行相同的配置、会有帮助吗? 请提供建议。

    >是的、如果您想使用 EVE、它比 DSP 上的相同器件更高效。

    查询2:

    如果 我们 为 同一图像的不同片执行多个内存分配、性能是否会提高?

    >否  我所说的是、您可以分配完整的输入和输出、但对于中间缓冲器、您只需要图像的较小部分、因为您将在图像的较小部分调用所有 canny 函数、而不需要全帧中间缓冲器。

    查询3:

    您能告诉我我们如何对可能利用高速缓存的映像进行切片并在最后进行合并吗?

    >希望我对第一个问题的回答澄清了这一点。  也许我以前不清楚可以从它内的子函数(conv、xyGradientsAndMagnitude、nonMaximumSuppressionCanny 等)调用 Canny。