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.

[参考译文] 运行 TIDL 后、共享存储器被意外覆盖。

Guru**** 2541570 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1215679/after-running-tidl-shared-memory-is-overwritten-unexpectedly

您好!

我们发现、在运行最后一层为 argmax 的 TIDL 时、共享存储器会意外被覆盖。  

共享内存被预期覆盖的原因是否存在?如何防止出现此类内存被覆盖的问题?

测试环境为 TDA4 EVM、其中包括 tda4_sdk_8.4.0.6_j721e、TIDL 版本为 tidl_j721e_8.4.0.16。

我们使用 vision_apps/apps/dl_demos/app_tidl_seg/中 的测试程序重新出现了这个问题、修改了 vx_tidl_target.c (见下文)

 e2e.ti.com/.../vx_5F00_tidl_5F00_target.c

我们的 代码修改和共享存储器被覆盖的证据描述如下:

(1)在输出张量的末尾填充10字节数据(值为255)。 (在随附的 vx_tidl_target.c 第386~行391中)

(2)添加代码以检查在调用 tivxAlgiVisionProcess()后是否修改了额外的10字节。 (在 Attached_tidl_target.c 中、第404~line424行)

(3)重建 tidl 并测试程序 APP_tidl_seg、然后运行测试程序 APP_tidl_seg。

显示"modify length:10"的控制台表示共享存储器确实被覆盖。

Mark Kang。

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

    鉴于7天过去了、而且 TI 也没有任何回复、我不得不强调、这个问题是多么严重!

    此问题会立即导致 TIDL 输出张量旁边的另一个分配数据被销毁、后果悲观。 访问销毁的分配数据时、算法执行的最终结果不正确。 更糟糕的是、当访问已销毁的分配数据时、程序可能会崩溃。

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

    尊敬的 Mark Kang:

    很抱歉响应出现延迟。 我将研究这一问题、并在下周向您提供最新情况。

    此致、

    尼基尔

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

    尊敬的 Mark Kang:

    我已将您的更改改为 TIDL 过程函数。 我看到在分段演示情况下覆盖存储器。 但我没有看到物体检测演示的覆盖。

    您能否确认您是否也在观察? 或者、您是否要在所有 DL 演示中观察此情况?

    此致、
    尼基尔

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

    尊敬的 Nikhil Dasan:  

    我们的问题是为什么 TIDL 的 argmax 层会导致意外的存储器被覆盖、以及 TI 计划如何解决该问题。  

    (1)为了找出意外的内存被覆盖、我们已经缩小到 argmax 层。  我们使用分割演示来展示这一问题是如何发生的、该演示将 argmax 作为深度学习模型的最后一层。 我们希望 TI 可以根据分段演示找出 TIDL 中存在的问题。

    (2)物体检测演示不包含 argmax 层、当然也不存在此类问题、尝试其他不包含 argmax 层的 DL 演示毫无意义。  

    Mark Kang。

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

    尊敬的 Mark:

      从该主题看来、您使用的似乎是 SDK 8.4、您能尝试一下最新的 SDK 8.6吗? 我记得我们在 Argmax 中做了一些修复。


    此致、
    安舒

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

    尊敬的 Anshu Jain:

    我尝试使用 SDK8.6、发现同样的问题仍然存在。  Argmax 问题尚未解决、您的召回是完全错误的。

    尽管  vision_apps/apps/dl_demos/app_tidl_seg/vx_tidl_target.c 与 SDK8.4略有不同、进行了类似的修改(见下文)

    e2e.ti.com/.../5811.vx_5F00_tidl_5F00_target.c

    运行从   vision_apps/apps/dl_demos/app_tidl_seg / 开始的演示程序后,控制台仍然显示"修改长度: 10"。 共享存储器仍被意外覆盖。

    TI 请注意该问题的严重性并进行修复。

    Mark Kang。

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

    此线程被意外标记为错误解决、无论如何请撤消此操作。

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

    尊敬的 Mark:

      很抱歉响应延迟,我们将在9.0 SDK 版本中修复此问题,我们已提交 https://jira.itg.ti.com/browse/TIDL-3362 bug (这是内部链接)来跟踪此问题。 目前、您是否可以增加  输出缓冲区的分配并取得进展?


    此致、
    安舒

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

    尊敬的 Mark:

    我们将在 下一个计划的版本9.0中修复此问题。

    与此同时、您可以为 用于 TIDL 输出张量的共享缓冲区分配额外的存储器吗?

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

    大家好、Anshu 和 Kumar、

    (1)我们很高兴听到此问题将在 SDK 9.0 版本中修复。  

       修复此问题后、TI 是否可以为 SDK 8.4提供独立的 TIDL 补丁? 由于我们的客户在开发固件时以 SDK 8.4为基础、没有计划继续开发后续的 TDA4 SDK 版本。

    (2)目前、我们可能会尝试分配额外的存储器来防止出现此问题、以此作为您的建议。

    Mark Kang。

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

    尊敬的 Mark:

      我们的修复程序将是9.0的一部分、我们必须将 TIDL 从9.0移植到 SDK 8.4。 如果您有任何未解决的问题、请告诉我们?


    此致、
    安舒

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

    Anshu、您好!

    (1)我们不能等到 SDK 9.0发布才解决此问题、因为我们的客户计划在2023年10月之前发布其基于 TDA4的产品。 我们的客户使用的 SDK 版本 为8.4、目前、我们和我们的客户都在基于 SDK 8.4进行固件开发和验证方面付出了巨大努力。 我们的客户已经告诉我们、根据产品计划、没有机会继续使用 TDA4 SDK 版本。 因此、我们需要在 SDK 8.4上安装 TIDL 补丁来修复该问题。

    (2)虽然在 SDK 8.4上、我们通过向输出张量分配额外的存储器填充来解决此问题、但  我们只是使用 try and error 方法来猜测此额外存储器应该有多少大小足够。 此外、除非 TI 告诉我们 TIDL 将意外覆盖的确切大小、否则该权变措施方法无法100%保证。

    为了在 SDK8.4上100%安全地运行 TIDL,我们需要 TI 提供指南或公式来 计算输出张量的内存填充的确切大小。 我们相信、当 TI 找出此问题的根本原因时、TI 可以向我们提供此信息。

    Mark Kang。