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.

[参考译文] TDA2EXEVM:在 EVE 的 BAM 中向计算节点添加第二个输入缓冲器。

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/671780/tda2exevm-adding-a-second-input-buffer-to-a-compute-node-in-bam-for-eve

器件型号:TDA2EXEVM

您好!

我正在尝试创建一个用例、可以使用 BAM 框架计算某个帧的积分图像、但我有一些用例
实施问题。 我有代码可用于3个节点(source->compute -> sink),计算节点只有一个输入和一个输出。
我想更改代码并在计算节点中添加第二个输入缓冲区、该缓冲区将存储积分映像的结果、以便与配合使用
以正确计算整个图像的积分图像。

我为添加第二个输入缓冲区所做的更改是:

1)更改 BAM_EdgeParams EDGELIST。
2)更改定义以支持第二个块(2个输入块2个内部块)。
3)初始化 internalBlock[Block2_Params_IDX]参数。 (我不确定该块的 internalBlock[Block2_Params_IDX].size 应该是多少)
对于另一个块,我从     2 * vcop_<...>_count()自动获取它。

4)在 VisionSdk 级别中、我更改了 pAlgHandle 参数以支持第二个缓冲器(针对我的用例结构)。

我在 返回 NULL 的函数 Algivision_create 中得到一个断言错误。

如果我将输入块恢复为1、将内部块恢复为1 、则不会出现此错误。 但我的用例残桩
最后两条消息为:

[EVE1 ]    18.266516 s: 系统:堆= LOCAL_L2            @ 0x40020000、总大小= 24576B (24KB)、可用大小= 22244B (21KB)
[EVE1 ]    18.267065 s: 系统:堆= LOCAL_DDR           @ 0x00000000、总大小= 262144B (256KB)、可用大小= 235080 B (229KB)

如果我将 ivision 的 numBuf 恢复为1、则我完全没有错误、并且算法工作正常(但我需要2个缓冲区、因此它不执行我想要的操作)

您能解释一下如何向计算节点添加第二个输入缓冲器并避免此错误吗?

BR、
Theodore

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Theodore、
    我们已经在 EVE 软件版本中提供了基于 BAM 的积分图像计算小程序。 您可以引用它、也可以直接使用它。 该应用程序位于。
    /apps/integralImage.

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

    您好!

    我知道该算法、但我正在实施与已实施的应用程序不兼容的其他版本。 但是、为了验证我的算法、我需要添加第二个输入缓冲器、这给了我这些错误。

    BR、

    Theodore

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Theodore、
    正如我所理解的、您希望向您的计算节点添加另一个输入缓冲器。 首先、这将涉及更改计算节点的节点属性。 如果我以当前的积分映像内核为例(位于 kernels\imgsiglib\integral_image),则更改如下所示:
    #define BAM_INTEGAL_IMAGE_TI_U8_INPUT_PORT_IN (0)
    #define BAM_INTEGAL_IMAGE_TI_U8_INPUT_PORT_ACC_H (1)
    #define BAM_Integral_image_TI_U8_input_port_new_buffer (2)//这是新的缓冲区*/

    #define NUM_IN_BLOCIES (3)(此内核节点已使用2个输入、因此添加了另一个输入)

    现在、由于这是一个用于计算节点的输入缓冲器、因此我假设它实际上来自源 DMA 节点。 因此、您必须在源 DMA 节点中添加输出缓冲器。 源 DMA 节点还应描述缓冲区的尺寸及其位置(这在源 DMA 节点的_getMemRec 函数中完成)。

    如上所述、这些节点之后、您可以创建边沿列表来描述连接。 如果 bam create 在此之后失败、则应检查函数返回的错误。 然后我们可以进一步调查。

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

    您好!

    我已经完成了这些步骤(至少我认为是这样) 我在 BAM CREATE 中没有得到错误,我得到了一个错误,其中 Algivision_create 返回 NULL,我进一步调试了,我看到我从 Algivision_create_useLinkMem 函数调用的函数 Fxns->ialg.algingInit 接收到状态错误-272。

    此外、我还使用函数赋值 DMAautoIncrementParams 来描述第二个输入缓冲区。 我不知道为什么我在 ivision 级别遇到错误、而不是在 BAM 中遇到错误。

    BR、

    Theodore

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Theodore、
    您能否进入 ialg.init 函数并找出此错误的来源。 正如您提到的、bam create 不会返回此错误、因此应该很容易找到此错误的产生位置。

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

    您好、Anshu、

    事实证明我错了、错误发生在 BAM_initKernelDB 函数内、我错误地假设错误发生在 iVision 函数中、因为我的日志函数在 BAM 框架内无法正常工作。 我将更深入地探讨明天的情况、但如果您今天对它有一些了解、我们将不胜感激。

    提前感谢、

    Theodore

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Theodore、
    您是否对以下全局变量(位于*_graph.c 文件) bamKernelHostDB 和 bamKernelExchecFuncDB 进行了任何更改? 主机和执行函数的内核 ID 中存在一些不匹配情况。 您可以进入 BAM_initKernelDB 内部、以准确了解您面临问题的位置。 此外,如果您还没有浏览过 BAM 框架,我强烈建议您首先浏览该框架,以便框架的一些基本内容清晰(文档作为 algframework 的一部分提供)。 之后、您应该可以更轻松地扩展现有节点以添加额外的缓冲区。

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

    您好、安州、

    提供有关我所做工作的最新信息、以便将来可能参考。 我在与您提到的结构有关的枚举中犯了一些错误。 但是、之后还有一些错误、我在内存管理方面遇到了一些问题(需要在运行时发生才能获得内存要求)。现在修复了这一问题、并且与 Algivision_create 函数一起成功运行了 BAM_createGraph。

    现在、我似乎被困在了*进程中、似乎有一个循环尝试根据缓冲区数量计算多个帧(可能有一些错误代码) 在一次调用中、当我将缓冲区数量更改为2时、它在第二次迭代中会出现残桩。 我还在查看函数*_dmaControl,因为我可能需要对其进行修改,使其支持第二个缓冲区。

    BR、

    Theodore

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Theodore、
    很高兴听到您的原始问题得到解决。 我们可以关闭这个线程吗? 只要您有进一步的问题、就可以启动新的主题帖。

    此致、
    安州