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.

[参考译文] TDA3LX:更高效的查找操作

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/953329/tda3lx-more-efficiently-lookup-action

器件型号:TDA3LX

您好!

如果我需要执行整个图像大小的查找操作、

是否有任何方法可以更有效地实现目标、

查找操作已简化为以下代码、

int idx = 0;
for (i=0;<imageH; i++)

  对于(j=0、<imageW; j++)
  {
    outPutImg[idx]= LUT [idx];
    IDX++;
  }

我们在 DSP 内核中执行此任务、

具有其他算法操作的 DSP 内核的利用率已达到99%

是否有更有效的方法 来执行表查找任务、可能使用 eve 或?

我们的图像大小可能高达1280x720。

SJay

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

    您好!

    我不知道您在执行什么其他处理、但至少副架提取应由 EDMA 单独执行、无需 CPU。 用户可以配置完成中断、因此一旦提取完成、DSP 就会收到通知、并附带实际的处理算法。

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

    你好,拉吉克  

    我不太确定您的意思、

    我可能会描述太多信息、

    为了简单起见、如果我使用 DSP 执行以下代码、则需要100ms

    int idx = 0;
    for (i=0;<imageH; i++)

      对于(j=0、<imageW; j++)
      {
        outPutImg[idx]= LUT [idx];
        IDX++;
      }

    我想缩短该程序的执行时间、

    如何改进?

    是否有使用 EDMA 或 EVE 内核的方法?

    SJay

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

    您好!

    在最初的帖子中、您说 DSP 相当忙于执行其他工作。

    然后、我建议将副架提取工作卸载到 EDMA 控制器。 不会以更快的速度发生。 实际上、根据系统中的内存流量、它甚至可能需要更长的时间。 重要的是、此工作不会占用 DSP 周期、并且可以与其他工作并行运行。

    您显示的示例对我来说似乎太少了。 实际上、如果'outPutImg'和'LUT'都是线性数组、为什么要在嵌套循环中处理它们? 因此、我假设场景后面还有一些逻辑、只是告诉 EDMA 可以处理2D 传输、例如子帧提取/插入。 如果仅是 lenar 阵列副本、则仍然可以使用 EDMA 从 CPU 卸载此任务。 因此、无论进行实际传输所需的时间是多少、它都不会对 DSP 负载产生影响。 您只需执行几次配置写入即可。

    在这种情况下、每个 EDMA 控制器中都有 QDMA 单元。 QDMA 传输的配置由处理器进行8到1个 DWORD 写入。

    我现在正在猜测这个细冰上、所以如果您不熟悉 DMA、请举个很小的例子。 假设我们有2个要复制的线性数组、如

    unsigned char src[size];
    unsigned char dst[size]; 

    然后使用以下设置对 QDMA 控制器进行编程

    QDMA_OPT = options_bitfiled;
    QDMA_SRC = src;
    QDMA_AB_CNT = make_A_B_CNT_MACRO (大小、0);
    QDMA_DST = DST;
    //零到未使用的寄存器 

    有一些有关哪个配置字触发传输的详细信息、但一般来说、移动数据块很简单。

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

    你好 ,拉吉克

    感谢您的评论、

    实际上、我已经使用过 EDMA、而且我也知道它适用于大型阵列处理。

    我发现我的示例代码描述有点错误、

    应按如下方式进行更改、

    int idx = 0;
    for (i=0;<imageH; i++)

      对于(j=0、<imageW; j++)
      {
        outPutImg[idx]=inPutTexture[ LUT [idx]];
        IDX++;
      }

    如代码所示、

    通过根据查找表查找该值从 inPutTexture 获取值时、

    不适合使用 EDMA 来运行。

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

    嗯、

    我觉得这个例子太简单了。 然而、为什么要在线性数组上使用嵌套循环?

    接下来、LUT 包含哪些内容? 它是否会在输入上进行任何来回移动?

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

    你好 ,拉吉克

    实际上、我将开发一个不在 RTOS 上使用 GPU 的 AVM 系统。


    因此、如果它不是设计为查找表方法、


    AVM 系统很难实现实时、


    查找表 操作用于获取与模型点坐标对应的纹理像素值。

    SJay

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

    您好!

    如果您的处理只是提取较大数组元素的子集、则性能不佳可能与读取顺序有关。 如果您的索引序列(即 LUT)按升序排序、则您的系统的性能可能受数据读取/高速缓存速度的限制。 但是、如果未对 LUT 排序、则可以考虑以某种方式重新排列 LUT 和参考模式、从而按顺序读取输入数据、这有望提高缓存性能。 然而、这在很大程度上取决于 LUT 的设计。

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

    你好 ,拉吉克

    好的、我理解您提供的建议、

    我将根据这个想法进行设计和实施、

    谢谢!

    您想问、您是 TI FAE 吗?

    因为您的帐户看起来不是这样的,但这是我第一次遇到来自非 TI FAE 的回复:O

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

    您好!

    很高兴能提供帮助。

    不、我没有正式加入 TI、而是像您这样的另一个开发人员、只是拥有 TI 处理器方面的经验。

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

    对此主题还有其他问题吗? 请告诉我们是否可以关闭它。

    此致、

    Brijesh

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

    您好!

    您可以关闭它、

    如果还有任何问题、我将创建另一个线程、thx。

     

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

    谢谢、结束本主题。