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:TIDL 节点的 PC 仿真模式输出与目标模式之间不匹配

Guru**** 2551110 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/888751/compiler-tda4vm-mismatch-between-the-output-of-pc-emulation-mode-and-target-mode-for-tidl-node

器件型号:TDA4VM

工具/软件:TI C/C++编译器

您好!

我开发了一个使用单个 TIDL 节点的语义分割应用。

我要将 TIDL 节点的输出传感器转储到一个二进制文件中。

我已经使用  相同的输入运行了 PSDK 中提供的测试台、测试台的输出是二进制文件、 它是我们的参考输出。

当我在 PC 仿真模式下运行应用程序时、输出二进制文件与 testBench 的输出相匹配、但当我在目标上运行相同的应用程序时、我会遇到不匹配的情况。

此外、每次在目标上运行应用程序时、我都会获得不同的输出。

出于实验目的、我从 dl_demos (app_tidl_AVP)中获取了现有的 AVP 示例、并将 TIDL 节点的输出转储到一个二进制文件中。

我在 仿真模式和目标模式下运行了此 AVP 示例 、并比较了我转储的中间输出。 我还会在那里看到一些不匹配。

这背后的原因可能是什么? 是否需要专门处理以在目标上运行 TIDL 节点?

注意:我使用的是 PSDK 06.02.00.21

TIDL 版本:tidl_j7_01_01_00_10

此致、

Omkar

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

    您好、Omkar、

    您能查看此文档、看看它是否能帮助您:

    此致、

    Yordan

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

    Yordan、您好!

    我已经完成了这个文档。

    我不想在这里检查功能。

    在所有三个阶段(1. testbench)中生成输出 tensor 时没有错误  2. PC 仿真、  3、EVM)

     测试台和 PC 仿真模式的输出 是逐位匹配的、但 PC 仿真的输出和 EVM 的输出之间存在明显的不匹配。

    我不确定文档中是否提到了这种故障排除。

    此致、

    Omkar

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

    您好、Omkar、

    您能否告诉我您是如何编写 TIDL 节点输出的? 根据经验法则、当我们访问多个内核之间的共享缓冲区时、我们需要映射和取消映射缓冲区、然后才能安全地访问缓冲区。 我怀疑 TIDL 节点输出缓冲区的 Maping 和 Unmapping 有问题。

    您能看一下 AVP_TIdl_module.c 文件中的 writeTIDLOutput()函数吗?

    此致、
    Shyam

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

    Shyam、您好!

    我们已经映射和取消映射了缓冲区。

    请在 AVP 示例中找到我们在 app_run_graph()调用之后添加的代码片段,以转储 TIDL 节点的输出(仅用于语义分割)。

    (小部分

    vx_tensor output_tensors[app_max_tensors];
    TIDLObj * tidlObj =&obj->segTIDLObj;
    vx_object_array output_tensors_arr = tidlObj->output1_tensor;
    output_tensors[0]=(vx_tensor) vxGetObjectArrayItem ((vx_object_array) output_tensors_arr、0);
    
    vx_status tenser_status;
    vx_size number_for_dims;
    Tenser_status = vxQueryTensor (output_tensors[0]、vx_Tenser_number_of_dims、&number_of_dims、sizeof (vx_size));
    if (vx_Success = tensor 状态){
    printf ("%lu\n"、number_of _dims);
    }
    
    vx_size dims[number_of _dimms];
    Tenser_status = vxQueryTensor (output_tensors[0]、vx_Tensor_dims、&dims、sizeof (dims));
    if (vx_Success = tensor 状态){
    对于(int i = 0;i "dims[%d]="" :="" %lu\n",i,dims[i]);="" }="" vx_size="" start[3];="" start[0]="start[1]" =="" start[2]="0;" vx_map_id="" map_id_output;="" output_strides[3];="" output_strides[0]="output_strides[1]" output_strides[2]="1;" void="" *output_buffer;="" file="" *="" imgfile;="" char="" imgname="obj-">output_file_path;
    imgFile = fopen (imgName、"WB");
    if (imgFile =NULL){
    printf ("无法打开要写入的二进制文件");
    }
    
    tivxMapTensorPatch (output_tensor[0]、3、start、dims、&map_id_output、
    output_c指令、output_buffer、vx_read_only、vx_memory_type_host);
    {
    
    fwrite (output_buffer、1、dims[0]*dimms[1]、imgFile);
    fclose(imgFile);
    }
    tivxUnmapTensorPatch (output_tensor[0]、map_id_output);
    
    vxReleaseTensor (&output_tensors[0]); 

    「香港

    如果我们遗漏了一些东西、请告知我们。

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

    您好、Omkar、

    如果您使用的是 PSDKRA 6.2、您是否可以通过 TIDL 节点启用层级布线并将其与独立 TIDL 输出进行比较? 这将有助于 TIDL 团队更深入地了解该问题。

    此致、
    Shyam

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

    您好、Omkar、

    我建议您使用 TIDL 独立测试台来加快此问题的进度。

    此致、

    Rishabh

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

    此问题已转移到单独的脱机讨论。 请将 TT 移动至适当的状态。

    此致、
    Shyam

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

    正如对此进行的更新一样、在代码审阅期间观察到的一个问题是、即使在输入缓冲区被访问之前、它也未映射。 这不能确保在将数据传递到其他节点之前将数据正确写入缓冲区。 最好是在边界处映射-取消映射缓冲区。

    请确认建议的更改有效并相应地更新线程。

    此致、
    Shyam

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

    Shyam、您好!

    如调用中所述、我们在目标上运行了独立的测试台、运行了5个帧、并且输出与 PC 仿真模式的输出相匹配。

    因此、我们怀疑应用程序中缺少任何内容。

    测试台成功运行但应用程序的输出与目标不匹配的原因可能是什么?

    此致、

    Omkar

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

    在此处添加几个点:

    1.我们已经按照您的建议对应用进行了更改、涉及到 tensors 的映射和取消映射、但目标上的输出仍然不匹配。

    2、好的是每次运行应用程序时、我们都会获得一致的输出。

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

    您好、Omkar、

    OpenVx 应用是多处理器应用、而 TIDL 测试台运行在同一 C7x 内核上。 这两个代码完全不同。  

    现在、缓冲区映射正确、我们需要了解您的输出为何不符合预期。 您能否提供有关您观察到的内容的更多详细信息?  

    此致、
    Shyam

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

    Shyam、您好!

    如前一个通信中所述、该应用是独立的、具有单个 TIDL 节点。

    为了在目标上运行应用程序、我们是否需要设置任何特定参数?

    目前我们仅设置以下3个参数:

    PRMs->isInfufsPaded                = 1;
    PRMs->quantRangeExpandionFactor    = 1.0;
    PRMs->quantRangeUpdateFactor       = 0.0;

    我们还应该关注什么吗?

    此致、

    Omkar

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

    您好、Omkar、

    即使是单个 TIDL 节点也需要 A72主机。 因此、诸如 network/config/input/output 之类的所有缓冲区都必须从 A72传递到 C7x。  

    您设置的参数大部分看起来都很好、基本上必须与您使用独立 TIDL 测试台提供的参数相匹配。

    当您说输出不匹配时、能否提供更多详细信息?  

    此致、
    Shyam

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

    Shyam、您好!

    请查找此处所附的应用、该应用在 PC 仿真模式下运行时会产生正确的输出、但在目标上运行时会导致不匹配。

    如果您有任何疑问、请告知我们。

    此致、

    Omkare2e.ti.com/.../TIDL_5F00_avp.zip

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

    您能否尝试使用此独立应用程序进行语义分割?

    此致、
    Shyame2e.ti.com/.../app_5F00_tidl_5F00_seg.tar.xz