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.

[参考译文] Linux/AM5718:IPC 的替代方案

Guru**** 2609955 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/652242/linux-am5718-alternatives-to-ipc

器件型号:AM5718

工具/软件:Linux

您好!

我们刚刚尝试了 MessageQ Linux/TI-RTOS 通信示例、并获得了每条消息~100usecs 的结果

在我们的使用方案中、DSP 应能够与接收和准备数据的 cortex A15内核并行处理相对较小的数据块(大小约为128-256个项目的浮点阵列)。 在这种情况 下,我们将获得大约 x100的 DSP 处理时间本身(对于一个数据块)。

是否有任何其他方法可以将数据从 ARM 传送到 DSP 并启动 DSP 处理、这将显著降低时间开销?  

我认为我们可以使用共享存储器来分配数据交换缓冲区、但我们需要让 DSP 知道它应该开始处理新数据

感谢您的帮助!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Sergey、

    IPC 的底线是使用共享存储器。 ARM 和 DSP 之间有多种通信方式、如文档 processors.wiki.ti.com/.../Processor-sdk-MultiWay-of-ARM-DSP-Communication 中所述。 对于您的应用、我想知道大数据是否会有所帮助。 它是 IPC 的变体、但具有更大的数据缓冲区。

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

    尊敬的 Rex:
    我们使用 DSP 的主要方案是频繁处理小数据块。
    因此、我的主要问题是-激活某些 DSP 任务(从 ARM cortex a15)以开始处理数据的最快方法是什么?
    数据传输本身是另一个问题、很抱歉、没有明确的问题。

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

    MessageQ 会通过内核上下文并通过 IPCGR 中断 DSP、以通知 DSP。 因此、延迟将是内核处理、以几十微秒为单位。 MessageQ 是 TI 开发的一种安全、最快的可用机制、除非用户空间应用程序写入共享存储器并中断 DSP。 您希望应用程序具有多大延迟?

    雷克斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢!
    如果可以通过某种队列使用非阻塞呼叫发送 ARM 至 DSP 消息,则可能需要几十微秒的时间。
    因此、如果延迟为50 μ s、那么、例如、连续发送100条消息且周期为10 μ s 的消息将传入(100 x 10 μ s)+ 50 μ s、而不是100 x (10 μ s + 30 μ s)
    我希望我的解释不是很神秘

    我们需要每1.5ms 对 DSP 进行大约200-300次"调用"。
    在一个每~1.5ms 唤醒一次的 Linux 任务中、我们似乎在不断读取一些数据、例如从 SATA 磁盘读取数据、而这个任务应该将这些数据以小块的形式传递给 DSP 进行处理(大约200-300块)
    因此、将处理组织为流水线是完美的
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Sergey、

    延迟位于适用于每条消息的内核上下文中。 如果消息是按照我之前的帖子中所述从用户空间发送的、并且 DSP 中断、就像您的计算一样。 而不是内核延迟、而是复制到内存的延迟。

    雷克斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Rex:
    很抱歉、我真的很难清楚地理解您的消息。

    请更详细地描述您的邮件的这一部分。
    -"如果消息是我在前面的帖子中提到的从用户空间发送的、并且 DSP 获得中断、就像您的计算一样。 而不是内核延迟、而是复制到内存的延迟。 "
    我在 processors.wiki.ti.com/.../Processor-sdk-MultiWay-of-ARM-DSP-Communication 上查看了这些信息 、但很遗憾、我找不到方法可以中断 Linux 用户空间应用程序中的 DSP (无延迟)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Sergey、

    用户空间应用程序、我是说、在不使用 IPC 的情况下编写应用程序。 应用程序复制数据以共享存储器、并触发中断至 DSP 进行处理。 这样、消息就不会经过内核上下文。

    雷克斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Rex:
    非常感谢
    BTW -您可能知道吗- Linux 端是否有用于 IPCGR 中断使用的高级 API?
    在 e2e.ti.com/.../503640上、我很喜欢这个话题
    但是、我可能只能使用 IPC 框架的某个部分来启用/触发中断?
    谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Sergey、

    AM57x 器件没有 IPCGRx 寄存器。 它使用邮箱事件中断。 中断是 DSP_INTC 的输入。 请参阅 AM572x TRM 中的第19章邮箱和第5.3章 DSP SS 功能说明。

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

    尊敬的 Rex:
    我是否正确理解没有任何代码示例或 c/c++框架用于此目的(在没有任何额外延迟的情况下从 Linux 应用中断 DSP 内核)?

    很抱歉再次询问、但我无法得到明确的答案、整个 IPC 框架似乎很奇怪、没有其他复杂的添加(和增加的延迟)即可从 ARM 用户空间应用程序中获得 DSP 中断功能 我认为、当 Linux 应用程序需要唤醒 DSP (ti-RTOS)任务时、这是非常常见的任务

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

    您好、Sergey、

    用户空间应用程序超出了此论坛的支持范围。 您可能需要引用内核邮箱、并查看您是否可以通过从用户空间访问邮箱寄存器来触发中断。

    雷克斯