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.

[参考译文] TDA4VM-Q1:如果有其他更节能的方法可以在进程之间传输图像数据?

Guru**** 2479715 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1456356/tda4vm-q1-if-there-are-other-more-energy-efficient-ways-to-transmit-image-data-between-processes

器件型号:TDA4VM-Q1

工具与软件:

您好、由于需求原因、我们需要使用多个进程、其中进程1是捕获->显示 M2M -> shm、其他进程接收进程1的输出映像、比如:shm->scaler...、shm 是共享内存、我们发现、使用共享内存在进程之间传输图像会消耗大量性能、主要是由于对图像数据的 memcpy 操作。 我想问一下是否有其他更节能的方法来传输图像数据? 由于显示 M2M 和标量节点都位于 R5F 内核上、是否可以在 R5F 内核上执行经济实惠的进程间图像传输?

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

    您好!

    但为什么需要使用 memcpy 来传输映像呢? 为什么不在下一个过程(如标量)中使用相同的缓冲区?  

    此致、

    Brijesh

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

    我如何使用相同的缓冲器?

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

    尊敬的 Damon:

    为什么不 像 OpenVX 那样、共享缓冲区并直接在模块周围传递缓冲区的指针呢?

    此致、

    Brijesh

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

    我不知道如何在两个进程之间共享图像缓冲区。

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

    您使用的两个流程(模块)是什么? 这些模块是否基于 OpenVX?  

    此致、

    Brijesh

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

    它就像这样:

    /resized-image/__size/920x480/__key/communityserver-discussions-components-files/791/1736218983191.jpg

    假设:然后、我将 GraphA 中 displayM2M 节点的输出图像发送到 Graph B 和 Graph C  

    在图 B/C 中、我可以直接使用 displayM2M_output 图像来执行排队操作吗?

    在继续执行下一帧前、图形 A 是否必须等待图形 B/C 完成图像并将其返回?

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

    是的、在 这种情况下、可以在 GraphA 和 GraphB&C 之间共享图像 本质上、您需要为 GraphA 的输出以及 GraphB 和 C 的输入创建图形参数。由于所有三个图形都在流水线模式下运行、将在它们之间分配/共享多个图像、因此当 GraphA 与 GraphB 和 C 共享缓冲器时、它将在另一个缓冲器上工作、没有块。 仅当 GraphB 和 C 未在时间上返回缓冲器并且 大多数中间缓冲器是 GraphB 和 C 的输入时、才会阻止它  

    此致、

    Brijesh

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

    我的理解是否正确?

    /resized-image/__size/750x240/__key/communityserver-discussions-components-files/791/Enqueue_2D00_Dequeue.jpg

    有我可以参考的演示吗?

    此致、

    Damon

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

    是的、看起来是正确的。 嗯、SDK 中有许多图形参数示例。  但 SDK 中没有确切的用例。

    此致、

    Brijesh

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

    谢谢、 我熟悉图形参数。 但对如何在三个图形之间使用相同的图像感到困惑。

    这会导致图之间出现同步问题吗?

    我将尝试您的建议、并在将来随时向您通报此问题的最新情况。

    此致、

    Damon

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

    您好!

    否、只要图形和图形之间有足够的中间缓冲区、并且它们的性能匹配并得到正确管理、就不会出现同步问题。  

    此致、

    Brijesh

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

    现在、会给进程 A 的序列之后的图像缓冲区供进程 B 使用。 在使用进程 B 期间、进程 A 无法使用此缓冲区(否则将导致缓冲区同步问题)、这会阻止进程 A 的图形。 我无法再增加图形的深度和缓冲区的数量。 还有其他方法吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    现在、进程 A 的序列后的图像缓冲区被指定为进程 B 以供使用。 在使用进程 B 期间、进程 A 无法使用此缓冲区[/QUOT]

    这 与两个进程无关、这也可能发生在两个节点 之间。为了以全速并行运行它们、我们需要增加它们之间的管道深度。  

    BTW、在这种情况下、当 Processb 中的第一个节点处理完该帧后、该帧将 从 Processb 中发布、然后即可用于处理。  

    此致、

    Brijesh