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:Vision SDK VXLIB API ->图像处理算法中的性能问题

Guru**** 2595770 points
Other Parts Discussed in Thread: MATHLIB

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/639994/tda2evm5777-vision-sdk-vxlib-api---performance-issue-in-image-processing-algorithms

器件型号:TDA2EVM5777
主题中讨论的其他器件:MATHLIB

您好!

我们在 TDA2X 硬件上使用 Vision SDK 实现了很少的图像处理算法、而且我们面临性能问题(CPU 使用率高)
)。

您可以在随附的 Excel 工作表中找到有关算法和其他相关参数的更多详细信息。

我们一直在设置一些参数值并在算法处理函数中调用 Vision SDK VXLIB 的 API、不再有浮点运算或存在任何繁忙循环、您能否向我们提供反馈以及我们应注意的一些点、以提高性能。

如果您需要更多信息或希望查看我们的代码实施、请告知我们。

请使用初级回复此邮件、因为我们对此任务有一定的紧迫感。

谢谢、此致、
Rajesh Rathod。

e2e.ti.com/.../Performance.xls

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

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

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、您能否向我发送您正在调用的确切 VXLIB 函数以及每个函数的配置参数。 您可以在随 VXLIB 版本提供的测试报告中看到每个内核的最佳情况性能。 在这里、您可以看到距离实际最佳情况有多远。 本报告中的最佳情况是假设所有代码和数据都在 L1、单周期访问中。 这在实践中通常是无法实现的、但根据存储器模型、您可能能够接近。 一个问题可能是、如果未将缓存配置为对要传递到 VXLIB 内核的缓冲区所在的 DDR 数据区域启用缓存。 确保检查高速缓存是否配置正确。 此外、如果您使用 DMA 以乒乓方式将部分输入映像引入 L2 SRAM、则可以接近这种最佳情况性能、因为您可以节省与计算并行执行 DMA 的时间。 如果不使用 DMA、您可能会因为瓶颈而遇到存储器访问延迟问题、因为许多 VXLIB 内核的 I/O 限制比计算更大。 如果您仅使用缓存而不使用 DMA、则如果您将映像分为多个片并在这些片之间串联调用 VXLIB 内核、则可能仍然能够获得良好的性能、以便您可以获得一些缓存位置优势。

    您是否考虑过上述条件? 您可以告诉我您正在使用哪些 VXLIB 函数、以及与发行版中的最佳情况相比测量的周期/像素是多少、我可以根据您对 DMA 与高速缓存的回答以及上面讨论的无高速缓存的情况来确认这是否是预期的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    顺便说一下、下面是我讨论此类优化技术的另一篇文章:
    e2e.ti.com/.../2177740
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!
       感谢您的回复并提供详细的解释、根据您的请求、我附上了 Excel 文件、其中列出了我们用于每个算法的 VXLIB API 以及参数信息。

    请告诉我给定文件中是否缺少任何内容。

    除此之外、我还有一些问题、如下所示:

    1.您建议一次处理几行图像文件(例如 32行),通过这种方法,我们如何使用2D 卷积算法? 如果我没有错、那么这种方法不具备2D 卷积算法、如果有、我们可以申请2D 卷积算法吗?

    2.从 Vision SDK 文档中我们发现 DSP1_L2_SRAM 和 DSP2_L2_SRAM 有一些未使用的部分、我们能否增大 DSP1_L2_SRAM 和 DSP2_L2_SRAM 的大小并利用该未使用的部分、您对此有何看法?

    谢谢、此致、
    e2e.ti.com/.../API_5F00_LIST.xls

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

    您好!

    此主题上的任何更新?

    除此之外、在读取 DSP 上的性能优化技术时、我遇到了软件流水概念和"严格"关键字的使用、我尝试添加"严格"关键字、但没有更改。

    我的问题是,Vision SDK 在内部使用软件流水线? 如果没有,我们如何以及在哪里可以添加'-o3'和'-mt'编译标志,以便通知编译器我们要使用软件流水线?  我们是否可以应用任何类似的技术?

    请优先回答这些问题和以上问题。

    任何帮助都将被定价。

    谢谢、此致、

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

    供参考、

    有多个在线 DSP 优化参考指南和培训。  下面列出了其中的一个子集、该子集可能会引起人们对 DSP 优化的关注。

    a. C6000优化编译器(参考手册):

    1. 列出了所有内在函数及其映射到的指令。
    2. 列出所有编译器选项
    3. http://www.ti.com/lit/ug/spru187u/spru187u.pdf

    B. C66 DSP CPU 和指令集(参考手册)

    1. 列出了它们所属的所有指令和处理单元
    2. www.ti.com/lit/ug/sprugh7/sprugh7.pdf

    C. C66 DSP 架构(培训课程)

    1. https://training.ti.com/keystone-c66x-dsp-corepac-overview

    D.优化 TI DSP 上的视觉内核的教程(应用手册)

    1. http://www.ti.com/lit/an/spna165/spna165.pdf

    e.优化 C66 DSP 上的环路(应用手册)

    1. http://www.ti.com/lit/an/sprabg7/sprabg7.pdf

    F. TMS320C6000 DSP 优化简介(应用手册)

    1. http://www.ti.com/lit/an/sprabf2/sprabf2.pdf?DCMP=leadership&HQS=ep-pro-dsp-leadership-problog-150507-mc-en

    我将单独发布一个帖子以回答您的问题。

    Jesse

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

    [引用用户="Rajesh Rathod"]

    1.您建议一次处理几行图像文件(例如 32行),通过这种方法,我们如何使用2D 卷积算法? 如果我没有错、那么这种方法不具备2D 卷积算法、如果有、我们可以申请2D 卷积算法吗?

    [/报价]

    使用2D 卷积仍然可以将图像拆分为图块或块、但应采取其他预防措施。  例如、假设我们仍然读取图像的整个宽度、但我们 将图像高度分为多个部分(例如、 32行)。  使用5x5 2D 卷积示例、输出行数等于输入行数- 4。  对于前32行、您将读取32行、并输出28行。  现在、当您读取下一个切片时、您需要重新读取前一个切片的最后2行、以作为新切片的前2行、从而使输出匹配、就像您完全没有分割图像一样。  如果您也垂直分割图像,则此方法也适用... 您需要重新读取前一个块的最后输入。

    因此、如果您级联多个内核来执行某种类型的滤波、从而减小输出图像尺寸、那么块读取需要考虑级联内核上的像素减少量之和。

    此致、

    Jesse

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    使用发布模式编译 Vision SDK 时、会启用-o3并应支持流水线。 我建议阅读我之前发布的文档中的一些优化技术。 它将指示您能够检查编译器生成的汇编文件、以查看编译器对循环是否进行了流水线处理的反馈、为什么? 例如、如果循环包含任何函数调用、则编译器无法流水线。 您需要将函数调用作为"内联"函数进行、或手动将调用移入。 一些数学运算也隐式调用 RTS 库函数。 例如、整数除法或模数将在内部调用 RTS 库函数调用、这可能会阻止循环流水线。 使用 TI 的 mathlib 可避免其中一些 math.h 函数调用、mathlib 可提供可供使用的内联近似函数。

    未启用流水线的其他原因是循环中的指令过多。 编译器生成的汇编文件可能会指示这一点。 在这种情况下、您需要将环路拆分为较小的环路、以便为每个较小的环路提供流水线。

    restrict 关键字可能有用、也可能不有用。 在编译器不知道在编译时传递的地址的 API 定义方面、这通常会有所帮助。 它可能会删除循环携带的依赖项。

    优化循环文档 www.ti.com/.../sprabg7.pdf 中更详细地解释了所有这些问题

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

    [引用用户="Rajesh Rathod"]

    2.从 Vision SDK 文档中我们发现 DSP1_L2_SRAM 和 DSP2_L2_SRAM 有一些未使用的部分、我们能否增大 DSP1_L2_SRAM 和 DSP2_L2_SRAM 的大小并利用该未使用的部分、您对此有何看法?

    [/报价]

    是的、您可以增加、但是、您需要确保您添加的未使用部分尚未分配到缓存中。