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.

[参考译文] PROCESSOR-SDK-J784S4:TIDL 自定义运算符显示无效的 DDR 存储器基地址

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1568760/processor-sdk-j784s4-tidl-custom-operator-showing-invalid-ddr-memory-base-address

部件号: PROCESSOR-SDK-J784S4

工具/软件:

尊敬的团队:

在研究自定义层实现(使用 ti-processor-sdk-rtos-j784s4-evm-10_01_00_04)时、我尝试  使用 sTIDL_sysMemHandle_t 中的结构打印自定义运算符中可用的 DDR 暂存存储器大小和地址  TIDL_customAbcProcess().

在我们的自定义操作员中 TIDL_customAbcProcess()、打印时

`μ s、 sysMems[TIDL_SYSMEM_DDR_SCRATCH].base`

`Ω 和 sysMems[TIDL_SYSMEM_DDR_SCRATCH].size` 

`μ s sysMems[TIDL_SYSMEM_DDR_SCRATCH].offset`

 观察到以下结果:

 
sysMems[TIDL_SYSMEM_DDR_SCRATC].base=20202020202020
sysMems[TIDL_SYSMEM_DDR_SCRATC].size=538976288
sysMems[TIDL_SYSMEM_DDR_SCRATC].offset=538976288
 
问题
1) 为什么基地址 无效? (它超过`ti-processor-sdk-rtos-j784s4-evm-10_01_00_04/vision_apps/platform/j784s4/rtos/system_memory_map.html`中指定的存储器地址)
2) 为什么 可用的 DDR 暂存存储器为零? (在本例中,size == offset)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好;感谢您的提问。  

    这是否与下面的另一个线程链接中的问题类似? 如果是,我会让我们的记忆专家参与进来。 我会随时更新您的最新信息。

    此致

    Wen Li

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

    尊敬的 Wen Li :
    是的、我 附上以下链接以供参考...

    L3_TITER_LINK

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

    尊敬的 Wen Li :

    对此有任何更新?

    此致、
    Sampanna T

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好;
    基于 SDK .h 文件中的定义
    该结构定义了 TIDL 中的系统存储器句柄。
    (总共四个句柄:0:L1、1:L2、2:L3 和 3:DDR)  
    这是暂存存储器、可在实现定制时使用
    程序。 此记忆的生命仅在的上下文中
    特定的自定义层、不应假定在之后可用
    完成该定制层的处理。
    因此、您可能需要检查此结构是否已在范围/流程之外打印。
    谢谢。此致
    Wen Li
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Wen Li :

    我们在自定义运算符的上下文中使用 TIDL_SYSMEM_DDR_Scratch。 当我们检查起始地址和可用大小时、 观察到以下相同结果:

     
    sysMems[TIDL_SYSMEM_DDR_SCRATC].base=20202020202020
    sysMems[TIDL_SYSMEM_DDR_SCRATC].size=538976288
    sysMems[TIDL_SYSMEM_DDR_SCRATC].offset=538976288

    您能帮助我们获得以下问题的答案吗?
    1. 为什么基地址 无效? (它超过`ti-processor-sdk-rtos-j784s4-evm-10_01_00_04/vision_apps/platform/j784s4/rtos/system_memory_map.html`中指定的存储器地址)
    2. 为什么 可用的 DDR 暂存存储器为零? (在本例中,size == offset)

    此致、
    Sampanna T

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

    尊敬的 Sampanna:

    您如何打印这些地址? 怀疑有打印问题...

    此致、

    Brijesh

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

    你好 Brijesh Jadav ,

    printf("\n  sysMems[TIDL_SYSMEM_DDR_SCRATCH].base=%p 
                sysMems[TIDL_SYSMEM_DDR_SCRATCH].size=%d
                sysMems[TIDL_SYSMEM_DDR_SCRATCH].offset=%d",
                sysMems[TIDL_SYSMEM_DDR_SCRATCH].base,
                sysMems[TIDL_SYSMEM_DDR_SCRATCH].size,
                sysMems[TIDL_SYSMEM_DDR_SCRATCH].offset);

    附加了相同的片段。。。

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

    尊敬的  Sampanna:

    您运行的是这个示例吗? 它是 RTOS SDK 的一部分吗? 一些独立的示例? 如何为 TIDL 提供暂存存储器位置?

    此致、

    Brijesh

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

    e2e.ti.com/.../abc_5F00_custom_5F00_op_5F00_ddr.zip

    你好 Brijesh Jadav  ,

    我们目前正在 tidl 上运行自定义操作符、它是 RTOS SDK(版本 10_01_00_04)的一部分。  


    在随附的 zip 文件 ( abc_custom_op_ddr.zip )...
       下面介绍了 zip 文件的内容、可以使用补丁、模型、配置等重现该问题。 提供的文件中提供的示例。
    此外、还会  在 zip 文件中共享 TIDL 模型导入日志、TIDL 推理日志。

    注意:修补程序是从基础生成的  ti-processor-sdk-rtos-j784s4-evm-10_01_00_04  与 c7x-mma-tidl 目录相关的代码

    .
    ├── abc_custom_op_ddr
    │   ├── artifacts_int16
    │   ├── import_cfg_int16.txt # config for TIDL model import
    │   ├── infer_cfg_int16.txt  # config for TIDL inference on the hardware
    │   ├── inputs
    │   │   └── input_int16.bin  # sample input for inference
    │   ├── model.onnx           # onnx model
    │   └── outputs
    ├── abc_custom_op_ddr.patch        # abc custom op implemenation patch 
    ├── EVM_execution_log.txt      # TIDL inference log on J784S4 evm
    └── TIDL_model_import_log.txt  # TIDL model import log 


    此致、
    Sampanna

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

    您好;

    如果您使用的是 CCS、能否向我们发送已定义存储器分配的链接器文件。

    此时、我们必须加载您的程序才能查看此问题。 因为您已经检查了程序的范围、并确保在正确的范围内调用了这些函数。

    此致

    Wen Li

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

    尊敬的 Wen Li :

    1. 我们不使用 CCS
    2. 我们实际上正在使用 TIDL 自定义运算符(在 ti-processor-sdk-rtos-j784s4-evm-10_01_00_04 上)、因此在没有 CCS 的情况下、我们将在 EVM 上使用基于配置文件的命令行执行、如下所示
      ./TI_DEVICE_armv8_test_dl_algo_host_rt.out s:testvecs/abc/infer_cfg_int16.txt
    3. 信号 存储器映射没有变化 软件开发工具、就像在 vanilla SDK 中一样
    4.  当分配 TIDL_SYSMEM_DDR_SCRATCH 存储器时、实际问题是在 TIDL 自定义操作实现内部发生 、如此处所述。
    5. 对于 DDR 暂存存储器的分配和生命周期、TIDL 自定义运算实施需要哪种正确的方法?

      下面以 zip 文件形式附加了链接器文件和存储器映射文件、
      e2e.ti.com/.../linker_5F00_mem_5F00_map.zip

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

    尊敬的 Sampanna:

    感谢您的反馈和提供的信息。

    根据您提供的信息、您在 EVM 上的实时推理期间获得了这些消息。 只是一个简单的问题、仿真在 PC 端是如何进行的?

    我会将您的消息转发给其他 TI 专家以寻求帮助。 由于节假日、请给我们一些额外的时间来回复。

    此致

    Wen Li  

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

    对不起 Sampanna,我上周不在办公室,所以无法检查它。 我将在下周进行研究。  

    此致、

    Brijesh

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

    您好、Smpanna、

    查看 ti_dl/algo/tidl_custom_int.c 文件中的自定义层实现 src、我看到以下代码被注释掉。 这可能是您看到此暂存存储器的一些随机值的原因。 我将与团队核实为什么要对其进行注释。  

    /*对于 DDR、请使用 ALG_SCRACT_DDR_MEM_MEMREC 参数*/
    // sysMemsLocal[TIDL_SYSMEM_DDR_Scratch].base = intAlgHandle->memRec[ALG_scratch_DDR_MEM_MEMREC].base;
    // sysMemsLocal[TIDL_SYSMEM_DDR_Scratch].size = intAlgHandle->memRec[ALG_scratch_DDR_MEM_MEMREC].size;
    // sysMemsLocal[TIDL_SYSMEM_DDR_SCRATC].offset = 0;

    此致、

    Brijesh

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

    您好、Brijesh、

    感谢您的更新...  如有任何进一步进展、请随时通知我们。

    此致、
    Sampanna T

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

    尊敬的 Sampanna:

    看看现有的错误,我发现我们仍然不支持在 自定义层中使用暂存内存,它不清楚何时会被支持。  

    话虽如此,自定义图层文件主要是模板显示为使用自定义图层的用户的示例,因此用户可以自由修改代码。 用户可以尝试取消注释上述行、以便更正地址、但不确定该存储器的使用方式。  

    此致、

    Brijesh

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

    你好 Brijesh Jadav ,

    感谢您的更新。

    按照建议、我尝试取消注释 指定的 行、 但遇到了 以下错误:

    "src/tidl_custom_int.c", line 189: error: identifier "intAlgHandle" is undefined
    1 error detected in the compilation of "src/tidl_custom_int.c".


    intAlgHandle 似乎 未定义为函数中的局部变量。如果我忽略了某些内容、请您同意为解决此问题可能需要进行的任何其他修改吗?

    感谢您的帮助!

    此致、
    Sampanna T

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

    尊敬的  Sampanna:

    在深入研究此内容之前、您能否帮助了解 在自定义层中将暂存存储器用于何种目的?

    此致、

    Brijesh

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

    您好、Brijesh、

    要存储中间张量结果、我需要临时存储器。

    此致、
    Sampanna T

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

    尊敬的 Sampanna:

    您能尝试在下面添加三行来代替注释行吗?  

    sysMemsLocal[TIDL_SYSMEM_DDR_SCRATC].base =(sysMems + TIDL_SYSMEM_DDR_SCRATCR)->base;
    sysMemsLocal[TIDL_SYSMEM_DDR_Scratch].size =(sysMems + TIDL_SYSMEM_DDR_scratch)->size -(sysMems + TIDL_SYSMEM_DDR_scratch)->offset;
    sysMemsLocal[TIDL_SYSMEM_DDR_SCRATC].offset = 0;

    此致、

    Brijesh

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

    你好 Brijesh Jadav ,

    感谢您的建议。

    我们已经尝试了上述 建议、我们得到了以下基址、大小和偏移量结果。

    sysMems[TIDL_SYSMEM_DDR_SCRATCH].base=0x118000000 (exactly the correct base address for DDR_C7X_1_SCRATCH)
    sysMems[TIDL_SYSMEM_DDR_SCRATCH].size=524544
    sysMems[TIDL_SYSMEM_DDR_SCRATCH].offset=0


    1) 根据`ti-processor-sdk-rtos-j784s4-evm-10_01_00_04/vision_apps/platform/j784s4/rtos/system_memory_map.html`我们看到可用的大小为 128MB。 但是、 如果 使用建议的更改进行打印、则会 显示 大小为 0.5Mb(524544 字节)。 这背后有什么原因吗?

    2) 我们需要~12MB 的 DDR_SCRATCH 来存储中间输出。 有没有更好的方法可以实现这一目标呢?

    此致、
    Sampanna T

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

    尊敬的  Sampanna:

    这很奇怪、您能否尝试打印“(sysMems + TIDL_SYSMEM_DDR_scratch)->size“和“(sysMems + TIDL_SYSMEM_DDR_scratch)->offset“变量的值并共享它们?

    此致、

    Brijesh

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

    你好 Brijesh Jadav ,

    我们再次获得相同的值。

    (sysMems + TIDL_SYSMEM_DDR_Scratch)-> size = 524544
    (sysMems + TIDL_SYSMEM_DDR_scratch)->offset = 0

    此致、
    Sampanna T

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

    尊敬的 Sampanna T :

    我不知道为什么这 会是 0.5Mb .. 我需要进入代码中才能解决这个问题。 让我来检查下一周、然后返回给您。  

    此致、

    Brijesh

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

    尊敬的 Sampanna T :

    与 团队核实、 此处报告的尺寸较小、因为模型会要求更小的尺寸。 那么、您能否检查此虚拟模型是否要求更 小的大小、以及由于分配了哪些更小的暂存存储器大小?  

    关于 自定义模型的 12MB 存储器大小要求、我们的想法是、由于这是更大的大小要求、您能否直接 OpenVX API 从自定义模型实现的暂存缓冲区堆中分配该存储器?  

    此致、

    Brijesh

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

    顺便说  一下、共享包中没有 tidl_io_abc_1.bin 文件、因此在 EVM 上运行此示例会显示以下错误。

    无法打开文件 testvecs/abc/artifacts_int16/tidl_io_abc_1.bin

    此致、

    Brijesh

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

    尊敬的 Sampanna:

    使用以下补丁可增加自定义层的 DDR_Scratch

    diff --git a/ti_dl/algo/src/tidl_alg.c b/ti_dl/algo/src/tidl_alg.c
    index 8a48388..3023a7c 100644
    --- a/ti_dl/algo/src/tidl_alg.c
    +++ b/ti_dl/algo/src/tidl_alg.c
    @@ -86,7 +86,7 @@
    
     #define TEMP_FORCE_OUTPUT_TO_DDR (0)
     #define VAILD_DDR_BUFFER         (1U)
    -#define TIDL_DDR_EXCESS_SCRATCH  (512U*1024U)
    +#define TIDL_DDR_EXCESS_SCRATCH  (16U*1024U*1024U)
    
    
     #ifdef BUILD_WITH_CUDA
    diff --git a/ti_dl/algo/src/tidl_custom_int.c b/ti_dl/algo/src/tidl_custom_int.c
    index faa63c3..9426586 100644
    --- a/ti_dl/algo/src/tidl_custom_int.c
    +++ b/ti_dl/algo/src/tidl_custom_int.c
    @@ -186,9 +186,9 @@ int32_t TIDL_customProcessNew(TIDL_NetworkCommonParams *commonParams,
         sysMemsLocal[TIDL_SYSMEM_L3_SCRATCH].offset = 0;
    
         /* For DDR, use ALG_SCRATCH_DDR_MEM_MEMREC parameters */
    -    // sysMemsLocal[TIDL_SYSMEM_DDR_SCRATCH].base = intAlgHandle->memRec[ALG_SCRATCH_DDR_MEM_MEMREC].base;
    -    // sysMemsLocal[TIDL_SYSMEM_DDR_SCRATCH].size = intAlgHandle->memRec[ALG_SCRATCH_DDR_MEM_MEMREC].size;
    -    // sysMemsLocal[TIDL_SYSMEM_DDR_SCRATCH].offset = 0;
    +    sysMemsLocal[TIDL_SYSMEM_DDR_SCRATCH].base = (void *)((uintptr_t)((sysMems + TIDL_SYSMEM_DDR_SCRATCH)->base) + (uintptr_t)((sysMems + TIDL_SYSMEM_DDR_SCRATCH)->offset));
    +    sysMemsLocal[TIDL_SYSMEM_DDR_SCRATCH].size = (sysMems + TIDL_SYSMEM_DDR_SCRATCH)->size - (sysMems + TIDL_SYSMEM_DDR_SCRATCH)->offset;
    +    sysMemsLocal[TIDL_SYSMEM_DDR_SCRATCH].offset = 0;
       }
    
       if(((uint32_t)createParams->flowCtrl & TIDL_FLOW_CTRL_REF_STAT) == TIDL_FLOW_CTRL_REF_STAT)
    diff --git a/ti_dl/custom/tidl_custom_abc.c b/ti_dl/custom/tidl_custom_abc.c
    index 6e0013a..b9d8619 100644
    --- a/ti_dl/custom/tidl_custom_abc.c
    +++ b/ti_dl/custom/tidl_custom_abc.c
    @@ -139,6 +139,7 @@ int32_t TIDL_customAbcDspProcess(
       int32_t status = CUSTOM_SUCCESS;
       printf("\nAddress: Inp1=%p Inp2=%p Out=%p",inPtrs[0],inPtrs[1],outPtrs[0]);
       printf("\nsysMems[TIDL_SYSMEM_L3_SCRATCH].base=%p sysMems[TIDL_SYSMEM_L3_SCRATCH].size=%d sysMems[TIDL_SYSMEM_L3_SCRATCH].offset=%d",sysMems[TIDL_SYSMEM_L3_SCRATCH].base,sysMems[TIDL_SYSMEM_L3_SCRATCH].size, sysMems[TIDL_SYSMEM_L3_SCRATCH].offset);
    +  printf("\nsysMems[TIDL_SYSMEM_DDR_SCRATCH]].base=%p sysMems[TIDL_SYSMEM_DDR_SCRATCH].size=%d sysMems[TIDL_SYSMEM_DDR_SCRATCH].offset=%d",sysMems[TIDL_SYSMEM_DDR_SCRATCH].base,sysMems[TIDL_SYSMEM_DDR_SCRATCH].size, sysMems[TIDL_SYSMEM_DDR_SCRATCH].offset);
       return status;
     }
    


    此致
    Rahul T r

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

    你好 Rahul Ravikumar , Brijesh Jadav !

    感谢您的更新... 我 已经检查了上述补丁、并尝试打印地址、大小和偏移量。 我们正在获得正确的 DDR 暂存地址、DDR 暂存区大小也~16MB。

    感谢您的支持。

    sysMems[TIDL_SYSMEM_DDR_SCRATCH].base = 0x118000000
    sysMems[TIDL_SYSMEM_DDR_SCRATCH].size = 16777472 
    sysMems[TIDL_SYSMEM_DDR_SCRATCH].offset = 0


    此致、
    Sampanna T

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

    感谢 Sampanna、结束本主题。