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.

[参考译文] AM62P:分别计算所有主器件的带宽 — AM62P + TI SDK +裸机上的 GPU/DSS/A53

Guru**** 2872500 points

Other Parts Discussed in Thread: AM62P

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

https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/1638437/am62p-calculate-the-bandwidth-across-all-the-masters---gpu-dss-a53-individually-on-am62p-ti-sdk-baremetal

部件号: AM62P

团队、

我找不到用于测量所有主器件的 BW 的基准。 我目前正在尝试找出计算 GPU 带宽的方法、需要知道:

  1. 如何计算它?
  2. 是否需要为 AXI 上的 GPU 启用任何时钟才能获得最大带宽?
  3. 是否有 Baremetal 测量带宽的示例?
  4. 请提供与此相关的文档。

谢谢、

Shriya

 

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

    尊敬的 Shriya:  

    您是否考虑过使用 PVRTunes 来计算 GPU 带宽? PVRTunes 专为评测 PowerVR 硬件而设计,还可以测量带宽和其他指标: PVRTune - Imagination Developers。 我认为这里还可以解答更多的文档、示例和问题。

    此致、

    Shriya

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

    尊敬的 Shriya:  

    感谢您提供的信息。 是如果我在 Baremetal 上运行,这会有帮助吗?  在文档中、我看到它支持 Windows/MacOS/Linux。 在这里、我需要弄清楚裸机 TI SDK 的信息。

    谢谢、

    Shriya

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

    根据我的理解、裸机 AM62P TISDK 不支持该功能。   

    您能帮助我了解  PowerVR GPU 中是否有内部硬件性能计数器 (HWPERF) 吗? 如果是、 是否有访问方法?

    我需要在所有总线主器件上测量 BW。

    谢谢、

    Shriya

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

    尊敬的 Shriya:  

    遗憾的是、我们不支持对 GPU 驱动程序使用裸机。 如果您从第三方移植了裸机,请与他们核实是否有任何可用的资源。  

    此致、

    Shriya

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

    Sure Shriya、感谢您的更新。 由于我需要在所有的主设备上测量 BW、我们是否有任何寄存器可以查看它、我从哪里获得这些信息? 由于 DDR perf 提供了聚合的 BW、其中包括所有主器件。  

    谢谢、

    Shriya

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

    您可以在 TRM 中查看以下寄存器定义

    EMIF_SSCFG_PERF_CNT_SEL_REG

    EMIF_SSCFG_PERF_CNT1_REG

    EMIF_SSCFG_PERF_CNT2_REG

    EMIF_SSCFG_PERF_CNT3_REG

    EMIF_SSCFG_PERF_CNT4_REG

    一次最多可以监视四个计数器。  四个计数器均是自由运行的计数器、由 CNT_SEL 寄存器中的选择定义。  您可以监控计数、例如读取/写入次数、FIFO 已满和命令开销。

    此致、

    James

      

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

    您好、James:  

    非常感谢。 这些是用于测量 DDR 的聚合带宽的性能计数器? 计数器测量 DDR 流量。 是的、我正在使用这些。  但是,如果我需要隔离每个总线主机的带宽-> GPU, A53, DSS 等,如何去 Baremetal 上?

    谢谢、

    Shriya

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

    您可以尝试使用 bw_stats 寄存器。  这些寄存器有几次迭代(检查 TRM):

    A53 读取/写入

    视频编码/解码器读取/写入

    GPU 读取/写入

    下文总结了如何使用这些寄存器来确定每个启动器的带宽

    摘要
    速率限制器为读取和写入操作提供单独的带宽统计信息。 每个方向都有自己的一组寄存器来独立于 CIR/PIR 速率限制来监控带宽使用情况。 密钥寄存器组读取带宽统计信息(基址:0x120)
    - RD_BW_STATS (0x120)-控制寄存器
    - RD_BW_STATS_THRSHLD (0x124)-阈值
    - RD_BW_WINDOWS_CNT (0x128)-窗口计数器
    - RD_BW_CIR_CNT (0x12c)-违反 CIR 阈值
    - RD_BW_PIR_CNT (0x130)- PIR 阈值违规
    - RD_BW_THRSHLD_CNT (0x134)-自定义阈值违规
    - RD_BYTES_MAX (0x138)-每个窗口的峰值带宽

    写入带宽统计信息(基址:0x220)

    - WR_BW_STATS (0x220)-控制寄存器
    - WR_BW_STATS_THRSHLD (0x224)-阈值
    - WR_BW_WINDOWS_CNT (0x228)-窗口计数器
    - WR_BW_CIR_CNT (0x22c)-违反 CIR 阈值
    - WR_BW_PIR_CNT (0x230)- PIR 阈值违规
    - WR_BW_THRSHLD_CNT (0x234)-自定义阈值违规
    - WR_BYTES_MAX (0x238)-每个窗口的峰值带宽

    使用方法

    1.配置统计信息窗口 (RD/WR_BW_STATS)

    位[31:16]:窗口 — 统计窗口大小(默认值:0x400 = 1024 个周期)
    -不能为 0(如果写为 0、则自动复位为 1024)
    -窗口时间= window_size / FREQ

    位[0]:EN — 启用统计信息收集

    位[8]:CLR — 清除/复位所有计数器(只写)

    位[9]:溢出 — 统计溢出错误指示器(只读)

    2.设置自定义阈值 (RD/WR_BW_STATS_THRSHLD)

    位[31:0]:threshold — 每个窗口以字节为单位的带宽阈值
    -允许独立于 CIR/PIR 的带宽分析
    -使用固定窗口(不像 CIR/PIR 那样滚动)
    -消耗的 DDR 字节的帐户
    -使用以下方法比较 CIR/PIR:阈值* FREQ / WINDOW_SIZE

    3.读取统计计数器

    Windows_CNT–自收集开始以来经过的窗口数

    CIR_CNT — 带宽超过 CIR 的窗口计数

    PIR_CNT — 带宽超过 PIR 的窗口计数

    THRSHLD_CNT — 带宽超过自定义阈值的窗口计数

    Bytes_MAX — 在任何单个窗口中观察到的最大字节
    -计算峰值带宽:Bytes_MAX * FREQ / WINDOW_SIZE

    使用工作流程
    不带速率限制的统计数据(仅限监控)
    // 1。 通过将 CIR/PIR 设置为 0、确保禁用速率限制
    RD_BW_CIR = 0;//无提交的速率限制
    RD_BW_PIR = 0;//无峰值速率限制

    // 2. 配置窗口大小并启用统计信息
    RD_BW_STATS =(0x400 << 16)| 0x1;// 1024 周期窗口、启用

    // 3. 设置自定义阈值(例如,窗口为 200MB)
    RD_BW_STATS_THRSHLD = 200 * 1024 * 1024;// 200MB(以字节为单位)

    // 4. 运行您的工作负载...

    // 5. 读取统计信息
    Windows = RD_BW_WINDOWS_CNT;
    CIR_violations = RD_BW_CIR_CNT;//将为 0(未设置 CIR)
    PIR_违 例= RD_BW_PIR_CNT;//将为 0(未设置 PIR)
    Threshold_violations = RD_BW_THRSHLD_CNT;//自定义阈值违例
    peak_bytes = RD_bytes_MAX;

    // 6. 计算峰值带宽(MB/秒):
    // peak_bw_mbps =(peak_bytes * frequency)/ window_size / 1024 / 1024
    //示例:@ 400MHz、window=1024
    // peak_bw_mbps =(peak_bytes * 400000000)/ 1024 / 1024 / 1024

    // 7. 清除并根据需要重新启动
    RD_BW_STATS |=(1 << 8);//设置清除位

    重要说明

    统计数据跟踪占用的 DDR 带宽、而不仅仅是数据包字节值
    -如果动态更改窗口大小,请同时写入清除位以重新启动收集
    -检查溢出位 — 如果设置,计数器溢出发生,数据无效

    此致、

    James