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.

[参考译文] AM57X:OpenCV 测试

Guru**** 2551110 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/595412/am57x-opencv-tests

器件型号:PROCESSOR-SDK-AM57X

大家好、

我有一个来自以下客户的问题、我已将所附文件发送给 Ron、但他建议我在论坛上发帖。 您能否查看他们的询问、如果您有任何疑问、请告诉我?

感谢您的帮助!

_________

"我在评估 AM57x 硬件卸载方面取得了一些进展。 我已经运行 了测试 OpenCV/CL 应用 程序、并获得了一些奇怪的结果。 我使用 此处找到的指令 来断言 OpenCL 工作正常、并运行基准测试。 我发现、在我的竞争基准测试运行的每种情况下、硬件卸载都较慢(请参阅附加日志)。

 

我的测试包括 uint8、uint16和 float32位深度的160x120、320x240和1920x1080帧、无论是否需要硬件卸载、均可运行。 在 CPU 的时钟频率低于1.0GHz 时捕获了附加的日志。 我目前正在1.2和1.5GHz 上运行相同的测试、这些测试结果将在一天左右的时间内得到。

 

我正在 Phytec phyCORE-AM57x 上运行我的所有测试。 Phytec 在其 RDK 中使用 Project Arago 的最新版本。 我很确定我的 DSP 减速不是由我的硬件引起的、尽管我希望被证明是错误的。  

 

您能帮助我了解这些结果吗? 是否有我应该始终使用 CPU 的特定滤波器? 为了获得 这些结果、TI 运行了哪些基准? 我能否访问这些基准测试工具、在 TI 网站上验证索赔? 我还能提供什么帮助来找到这种减速的根本原因吗?"

----

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

    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉耽误你的时间...我正在升级这个...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉耽误您对此问题的答复。


    我们联系开发人员征求他的意见、下面是我们的回答:

    没有一个特定内核(来自您运行的项目)专门针对 DSP 实施–而是使用标准 OpenCL,因此 DSP 的较差性能(与 A15相比)与我们的观察结果一致(与 C66– C66@700MHz 相比,A15的运行速度更快,与 A15@1.5GHz 相比)。
    我们在卸载到 DSP 上所做的基准测试要求我们对多个 DSP 内核执行手动调优、以演示 A15上的 DSP 增益。 这是在 DSP 上实现更高性能的唯一选择、因为 OpenCV 函数的编写方式未使其在 DSP 架构上以最佳方式运行。 OpenCV 测试必须从命令行运行。
    •   首先需要将 github.com/.../testdata 克隆 到/usr/share/OpenCV/testdata (在目标 FS 上)。
    •   然后(来自/usr/share/OpenCV/titestsuite)需要使用 setupEnv.sh 设置 env 变量(在目标 fs 上)
    •   最后运行./runtests。

    基准测试结果(在 e2e 帖子中提及)是使用 当时可用的 OpenCV perf 测试版本(code.opencv.org/.../HowToUsePerfTests)收集的。

    希望这对您有所帮助。


    此致、

    Rahul

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

    除了 Rahul 提到的内容之外、您可能还想看看 processors.wiki.ti.com/.../OpenCV 段落"OpenCV OpenCL 相关框架详细信息:如何添加新的 DSP 内核"。 通过手动编码特定的 DSP 内核、可以实现更好的性能。
    到目前为止、我们仅包含了几个手动优化的内核、主要用于展示优化方法和内核集成到现有 OpenCV 框架中。

    AM572x 的 OpenCV 源代码可在中找到 git.ti.com/.../tiopencvrelease_3.1   。

    您需要建立 Yocto 设置(如上面的链接中所述)和克隆源。 代码修改后、您可以使用以下代码进行编译:

    arago_brand=processor-sdk machine=am57xx-evm bitbake OpenCV --force -c compile
    arago_brand=processor-sdk machine=am57xx-evm bitbake OpenCV 


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

    我仍在尝试复制营销材料提供的基准。 我现在只是想关注高斯模糊。 当我在启用 OpenCL 的情况下运行 Imgproc_GaussianBlur 时、它的运行速度仍然比禁用 OpenCL 的速度慢。 我应该运行 OCL_Filter/GaussianBlurTest 吗? 如何将 Imgproc_GaussianBlur 与 OCL_Filter/GaussianBlurTest 进行比较? 我的测试脚本如下所示。 我的结果随附。

    !/bin/sh

    导出 OpenCV_TEST_DATA_PATH=/home/root/testdata

    取消设置 OpenCV_OpenCL_device
    /usr/share/OpenCV/samples/bin/opencv_test_imgproc --gtest_filter=img*Gauss*--gtest_output=xml:gauss_cpu.xml

    导出 OpenCV_OpenCL_DEVICE_='TI AM57:加速器:TI 多核 C66 DSP'
    /usr/share/OpenCV/samples/bin/opencv_test_imgproc --gtest_filter=img*Gauss*--gtest_output=xml:gauss_dsp.xml

    e2e.ti.com/.../gauss_5F00_cpu.xml

    e2e.ti.com/.../gauss_5F00_dsp.xml

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

    +Siby

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

    请注意、OpenCL 内核是动态编译的、因此在线编译(在 A15上运行的 cl6x DSP 编译器)会有明显的延迟(最长为几秒、但最长为1-2分钟)。

    因此、如果内核仅执行几次(相同的程序)、则总时间主要由编译时间决定。 但这一时间需要一次。 如果内核被多次调用、那么后续调用只需花费执行时间。

    如果您已设置 TI_OCL_CACHE_KERNELS variable (http://downloads.ti.com/mctools/esd/docs/opencl/environment_variables.html#envvar-TI_OCL_CACHE_KERNELS, ) next calls should not trigger kernel compilation.

    我们还将查看这个特定的测试用例。

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

    请找到具有上述变量集的已修改脚本-并至少运行该脚本两次:

    !/bin/sh
    导出 TI_OCL_cache_kernels=Y
    导出 TI_OCL_KEEK_FILES=Y
    导出 OpenCV_BUILDDIR=/usr/share/OpenCV/samples
    导出 OpenCV_TEST_DATA_PATH=/usr/share/OpenCV/testdata

    echo "======================================================================== cpu=========================================================================================================== "
    取消设置 OpenCV_OpenCL_device
    /usr/share/OpenCV/samples/bin/opencv_test_imgproc --gtest_filter=img*Gauss*--gtest_output=xml:gauss_cpu.xml
    echo "======================================================================== DSP================================================================================================================ "
    导出 OpenCV_OpenCL_DEVICE_='TI AM57:加速器:TI 多核 C66 DSP'
    /usr/share/OpenCV/samples/bin/opencv_test_imgproc --gtest_filter=img*Gauss*--gtest_output=xml:gauss_dsp.xml

    如果未设置 cache_kernels、则 DSP 测试时间接近20秒。 如果设置了此环境变量,则会降至3秒以上(在第2次运行时,以及任何后续运行时):

    root@am57xx-evm:/usr/share/OpenCV/titestsuite cat gauss_cpu.xml


     
       
     

    root@am57xx-evm:/usr/share/OpenCV/titestsuite cat gauss_dsp.xml


     
       
     


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

    设置 TI_OCL_cache_kernels 和 TI_OCL_keep_files 会有很大帮助、但我看不到 1.9x 能够加快营销材料的承诺。 我在每个测试中都添加了--gtest_repee=5,尝试使用缓存的内核。 附件是我的测试脚本、我的测试脚本和我的日志的 xml 输出。 为什么营销网站上的 A15数字如此糟糕? 我从未见过高斯模糊需要700ms。 我的 DSP 比营销网站上报告的要好一点(340而不是360ms)。 我还添加了 Imgproc_Feature2D 测试以检查其性能。 DSP 和 CPU 的性能几乎完全相同、只有340mS、但营销材料声称 DSP 的运行速度为240ms。 我缺少什么?  

    www.ti.com/.../open-cv-libraries.page

    e2e.ti.com/.../script.txt

    e2e.ti.com/.../2604.test.txt

    e2e.ti.com/.../6332.gauss_5F00_cpu.xml

    e2e.ti.com/.../4278.gauss_5F00_dsp.xml

    e2e.ti.com/.../filter2d_5F00_cpu.xml

    e2e.ti.com/.../filter2d_5F00_dsp.xml

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

    在测试过程中、您能否确认 A15和 C66的时钟频率是多少?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    A15的时钟频率为1.5GHz。 如何检查 C66时钟?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请执行以下操作:
    omapconf show opp
    您应该会看到如下内容:
    (笑声)
    |------------------------------------------------------------------ |
    | |温度|电压|频率 |操作点|
    |------------------------------------------------------------------ |
    | VDD_CORE / VDD_CORE0 | 61C/141F | 0.000V | |标称值 |
    | L3 | | | 266 MHz | |
    | DMM | | | 266 MHz | |
    | EMIF1 | | | 266 MHz | |
    | EMIF2 | | | 266 MHz | |
    | LP-DDR2 | | | 532MHz | |
    | L4 | | | 266 MHz | |
    | IPU1 | | | 425MHz | |
    | Cortex-M4内核| | | 212MHz | |
    | IPU2 | | | 425MHz | |
    | Cortex-M4内核| | | 212MHz | |
    | DSS | | | 192MHz | |
    | BB2D | | |(354MHz)(1)| |
    | | | | | |
    | VDD_MPU / VDD_Core1 | 62C/143F | 0.980V | |标称值 |
    | MPU (CPU1打开) | | | 1000MHz | |
    | | | | | |
    | VDD_GPU / VDD_Cor2 | 62C/143F | 1.020V | |高 |
    | GPU | | | 532MHz | |
    | | | | | |
    | VDD_DSPEVE / VDD_CORE3 | 61C / 141F | 1.050V | |未知 |
    | DSP1 | | | 750MHz | |
    | DSP2 | | | 750MHz | |
    | EVE1 | | |(0MHz)(1)| |
    | EVE2 | | |(0MHz)(1)| |
    | | | | | |
    | VDD_IVA / VDD_CORE4 | 61C / 141F | 1.800V | |高 |
    | IVA | | |(532MHz)(1)| |
    | | | | | |
    |------------------------------------------------------------------ |

    注:
    (1)模块已禁用、速率可能不相关。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    |------------------------------------------------------------------ |
    | |温度|电压|频率 |操作点|
    |------------------------------------------------------------------ |
    | VDD_CORE / VDD_CORE0 | 44C/111F | 0.000V | |标称值 |
    | L3 | | | 266 MHz | |
    | DMM | | | 266 MHz | |
    | EMIF1 | | | 266 MHz | |
    | EMIF2 | | | 266 MHz | |
    | LP-DDR2 | | | 532MHz | |
    | L4 | | | 266 MHz | |
    | IPU1 | | |(425MHz)(1)| |
    | Cortex-M4内核| | |(212MHz)(1)| |
    | IPU2 | | |(425MHz)(1)| |
    | Cortex-M4内核| | |(212MHz)(1)| |
    | DSS | | | 192MHz | |
    | BB2D | | |(354MHz)(1)| |
    | | | | | |
    | VDD_MPU / VDD_Core1 | 40C / 104F | 1.030V | |标称值 |
    | MPU (CPU1打开) | | | 1000MHz | |
    | | | | | |
    | VDD_GPU / VDD_Cor2 | 42C / 107F | 1.020V | |标称值 |
    | GPU | | | 425MHz | |
    | | | | | |
    | VDD_DSPEVE / VDD_CORE3 | 44C / 111F | 0.980V | |未知 |
    | DSP1 | | |(600MHz)(1)| |
    | DSP2 | | |(600MHz)(1)| |
    | EVE1 | | |(0MHz)(1)| |
    | EVE2 | | |(0MHz)(1)| |
    | | | | | |
    | VDD_IVA / VDD_CORE4 | 43C/109F | 1.800V | |标称值 |
    | IVA | | |(388MHz)(1)| |
    | | | | | |
    |------------------------------------------------------------------ |

    看起来 DSP 以600MHz 的频率运行
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此(C66时钟)可能已在 Phytec 板的 DT 中进行了修改。
    C66频率是固定的、即在执行期间不调整、而 A15使用 DVFS 根据负载来调整频率。
    omapconf 仅显示当前状态。

    您可以查看一些统计数据@/sys/devices/system/cpu/cpu0/cpufreq/stats (如果使用自适应时钟、则为 A15频率和转换)。

    请检查脚本>> git.ti.com/.../optimize-benchmark.sh
    您可以将 A15设置为以最大速度运行、而不是 CPU 调节器(DVFS)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在 Phytec 器件树中看不到任何对 C66时钟的引用。 我缺少什么吗?

    stash.phytec.com/.../am57xx-phycore-rdk.dts
    stash.phytec.com/.../am57xx-phycore-som.dtsi

    今天晚些时候、我将尝试使用性能调节器进行调整。 我将报告结果。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    可以在 u-boot 中定义 DSP 时钟值:我已将问题转发给更熟悉此主题的同事。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们的最新处理器 Linux SDK 版本3.0.4 (2017年第1季度)将此版本设置为更高的时钟。 早期版本也很少。

    此功能在 u-boot 配置文件中定义。 如果您看到以下情况、最好检查您的 u-boot 配置文件:

    CONFIG_DRA7_DSPEVE_OPP_HIGH_y

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

    下面是我的开发板的配置。 CONFIG_DRA7_DSPEVE_OPP_HIGH 设置为 Y

    CONFIG_ARM=y

    CONFIG_OMAP54XX=y

    CONFIG_TARGET_AM57XX_PHYCORE_RDK=y

    CONFIG_DM_SERIAL=y

    CONFIG_DM_GPIO=y

    CONFIG_ARMV7_LPAE=y

    CONFIG_SPL_STACK_R_ADDR=0x82000000

    CONFIG_DEFAULT_DEVICE_TREG="am57xx-phycore-RDK"

    CONFIG_SPL=y

    CONFIG_SPL_STACK_R=y

    CONFIG_hush_parser=y

    CONFIG_CMD_BOOTZ=y

    # CONFIG_CMD_IMLS 未设置

    CONFIG_CMD_ASKENV=y

    # CONFIG_CMD_FLASH 未设置

    CONFIG_CMD_MMC=y

    CONFIG_CMD_SPI=y

    CONFIG_CMD_I2C=y

    CONFIG_CMD_USB=y

    CONFIG_CMD_DFU=y

    CONFIG_CMD_GPIO=y

    未设置# CONFIG_CMD_SETEXPR

    CONFIG_CMD_DHCP=y

    CONFIG_CMD_MII=y

    CONFIG_CMD_PING_y

    CONFIG_CMD_CONGER=y

    CONFIG_CMD_EXT2=y

    CONFIG_CMD_EXT4=y

    CONFIG_CMD_EXT4_WRITE=y

    CONFIG_CMD_FAT=y

    CONFIG_CMD_FS_generic=y

    CONFIG_of_control=y

    CONFIG_DM=y

    CONFIG_DM_MMC=y

    CONFIG_SPI_FLASH=y

    CONFIG_SPI_FLASH_bar=y

    CONFIG_SYS_NS16550=y

    CONFIG_USB=y

    CONFIG_USB_DWC3=y

    CONFIG_USB_DWC3_Gadget=y

    CONFIG_USB_DWC3_OMAP=y

    CONFIG_USB_DWC3_PHY_OMAP=y

    CONFIG_USB_Gadget=y

    CONFIG_USB_Gadget_ddownload=y

    CONFIG_G_DNL_Manufacturer="德州仪器"

    CONFIG_G_DNL_VENDOR_NUM=0x0451

    CONFIG_G_DNL_PRODUCT_NUM=0xd022

    CONFIG_errno_STR=y

    CONFIG_FIT = y

    CONFIG_SPL_of_LIBFDT=y

    CONFIG_SPL_LOAD_FIT = y

    CONFIG_ON_LIST="am57xx-phycore-RDK"

    CONFIG_of_Board_Setup=y

    CONFIG_DRA7_DSPEVE_OPP_HIGH_y

    CONFIG_DRA7_IVA_OPP_HIGH_y

    CONFIG_DRA7_GPU_OPP_HIGH_y

    CONFIG_DIST=y

    CONFIG_DWC_AHCI=y

    CONFIG_DM_ETH=y

    CONFIG_DM_PMIC=y

    CONFIG_PMIC_PALMPSA=y

    CONFIG_DM_电脑 控制器= y

    CONFIG_CMD_TIME=y

    CONFIG_DM_I2C=y

    CONFIG_DM_SPI=y

    CONFIG_DM_SPI_FLASH=y

    CONFIG_SPI_FLASH_STMICRO=y

    CONFIG_TI_QSPI=y

    CONFIG_CMD_SF=y

    /opt/PHYTEC_BSPs/yocto_ti/build/arago-tmp-external-linaro-toolchain/work/am57xx_phycore_rdk-linux-gnueabi/u-boot-phytec/2016.05 +gIT_v2016.05-phy2-R1/gIT/configs/am57xx_phycore_RDK_defconfig