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.

[参考译文] PROCESSOR-SDK-J721E:Vision 应用中使用 FFTlib 和 MMALIB 的存储器映射

Guru**** 2540720 points
Other Parts Discussed in Thread: FFTLIB

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1559363/processor-sdk-j721e-memory-map-for-fftlib-and-mmalib-usage-in-vision-app

器件型号:PROCESSOR-SDK-J721E
主题中讨论的其他部件:FFTLIB

工具/软件:

你(们)好

我们将基于 RTOS SDK 视觉应用测试一些图像处理应用、在这些应用中、我们希望将 VXLIB 用于 c7x、FFTLIB 和 MMALIB。

我们的配置包括:

  • J721E EVM 板
  • SDK-RTOS-j721e-EVM-10_01_00_04

FFTLIB 和 MMALIB 文档说明实现了最佳性能:

  • 输入和输出数据缓冲区应位于 L2 存储器中
  • 假定缓冲区指针为 64 字节对齐

我在 FFTLIB 和 MMALIB 库的测试代码中看到:

  • 所使用的存储器映射与视觉应用使用的存储器映射不同:
    • 在 VISION 应用程序中:
           /* C7x_1 的 L2 [大小 448.00KB ]*/
           L2RAM_C7x_1        (RWIX):origin = 0x64800000、length = 0x00070000
           /* C7x_1 的 MSMC [大小 7.78MB ]*/
           MSMC_C7x_1         ( RWIX ): origin = 0x70020000、length = 0x007C8000
    • 在 FFT LIB 测试中(和其他 c7x 库)
             L2SRAM  (RWX):org = 0x64800000、len = 0x080000  //(对于 J7)
             MSMCSRAM (RWX):org = 0x70000100、len = 0x7fff00
  • 输入缓冲区在 L2SRAM 或 MSMCSRAM 存储器中分配(通过 TI_memalign)、这些存储器的尺寸大于视觉应用中定义的尺寸、并且与我们缓冲器的尺寸不兼容

因此、我们希望了解:

  • 如果需要优化 Vision App 中定义的存储器映射以使用 FFTLIB 和 MMALIB
  • 考虑到我们缓冲器的大小与 VISION 应用的 L2RAM_C7x_1 和 MSMC_C7x_1 大小不兼容、如何将输入和输出缓冲区分配给 VISION 应用中的 FFTLIB 和 MMAlib 运算符以获得出色性能。

在我们执行的第一个测试中、我们测量了以下性能:

  • 使用输入缓冲器大小为 512x512 时、我们测得:
    • FFTLIB_FFT_FFT_Ixx_CXX_oxX_exec、输入 int32 => 2、65msec
  • 使用输入缓冲器大小为 512x512 时、我们测得:
    • FFTLIB_FFT_FFT_Ixx_CXX_oxX_exec、输入 int32 => 7、4ms
    • 具有输入 float32 6、4ms 的 FFTLib_fft1dBmatch_i32fc_c32fc_o32fc_kernel

这些是否已被认为是最佳表现、或是否有改进的余地?

请注意、

Andrea

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

    您好、Andrea、

    1. FFTLIB 和 MMALIB 对存储器映射没有固有的依赖性。  它们假定用户在调用库函数之前已分配了内存。
    2.您所需的缓冲区大小是否适合物理 L2/MSMC 大小,或者它们是否对于物理存储器而言太大?  如果太大的物理存储器,你将不得不把问题分解成更小的部分,确实适合存储器。  如果它们适合物理存储器、对存储器进行一些调整可能会有所帮助。

    关于 FFTLIB 绩效、这超出了我的知识领域、因此我已通知我的同事 Barath。

    此致、

    Will

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

    您好 William、
    感谢您的答复。

    我可以排除缓冲区大小超过物理内存大小的问题。

    我想更好地理解的是 FFTLIB 和 MMALIB 的性能是否取决于内存中的缓冲区分配方式、并考虑文档中所述的内容:

    • 输入和输出数据缓冲区应位于 L2 存储器中
    • 假定缓冲区指针为 64 字节对齐


    首先、我基于 Vision Apps 创建了一个应用、在该应用中、我使用 C7x 内核中的 tivxMemAlloc 分配了内存中的缓冲区
    考虑为 Vision Apps 定义的存储器映射、我在外部存储器 (TIVX_MEM_EXTERNAL) 中分配了我的缓冲器

    我不清楚我是否可以通过以不同方式分配缓冲区来提高库的性能、或者它是否没有任何区别。
    我想指出的是、这些缓冲器仅由 C7x DSP 在内部管理、不会与其他 CPU 进行外部交换。

    此致、
    Andrea

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

    您好、Andrea、

    性能通常/通常在很大程度上取决于输入/输出数据所在的存储器、尽管我不熟悉 FFTLIB 实现的细节。  当输入数据满足上面强调的两个标准(即 L2 存储器和 64 字节对齐地址)时、通常会获得出色性能。   

    此致、

    Will