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.

[参考译文] AWR2944:如何知道 r5f 上是否启用了 L3 缓存?

Guru**** 2551300 points


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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1540902/awr2944-how-to-know-if-cache-for-l3-is-enabled-on-r5f

器件型号:AWR2944


工具/软件:

您好、专家

客户使用以下代码片段测试 L3 的性能。  

  对于 (int j=0;j<1000;j++)
  {   
    TEMP=CSL_REG32_RD (0x88000000);
    CSL_REG32_WR (0x88000000、Temp+1);
  }
他们发现、无论 MPU 将 L3 配置为“缓存+可共享“或“非缓存“、上述代码的时间消耗始终为 9000 个周期。
您能否帮助说明如何知道 r5f 上是否启用了 L3 缓存?   
更改 L3 MPU 属性时、为什么基准测试是相同的?
谢谢
Ken
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ken:

    让我检查一下、然后由星期一回复您。

    此致、

    Samhitha

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

    嗨、Samhitha

    我们是否有关于此问题的更新?

    谢谢

    Ken

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

    尊敬的 Ken:

    我正在进行几个实验。 如果我执行只读操作、而不是读取和写入操作、则可以看到周期数存在显著差异。

    如果您执行读写、我仍在检查类似时序背后的原因。

    此致、

    Samhitha

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

    嗨、Samhitha

    您可以帮助分享您的代码吗?

    是否有任何更新说明时序相似的原因?

    谢谢

    肯。

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

    尊敬的 Ken:

    下面是我正在使用的代码片段-

    volatile uint32_t start_time = 0, end_time = 0;
    int32_t a[1000];
    
    void test(void *args)
    {
        uint32_t temp;
        
        for(int32_t i=0; i<1000; i++){
            a[i] = 1;
        }
    
        CycleCounterP_reset();
        start_time = CycleCounterP_getCount32();
    
        for(int32_t j=0;j<1000;j++)
        {    
            temp = CSL_REG_RD((uint32_t *)0x88000000);
            CSL_REG_WR((uint32_t *)0x88000000, temp+a[j]);
        }
    
        end_time = CycleCounterP_getCount32();
    
        CacheP_wbInvAll((uint32_t)CacheP_TYPE_ALL);
    
        DebugP_log("Number of cycles! %d\r\n", end_time - start_time);
    
    }

    请注意、 CSL_REG32_RD、 CSL_REG32_WR 宏定义使用“volatile “关键字、可实现直接存储器访问并避免任何优化。 而不是 CSL_REG32_WR/RD 、使用 CSL_REG_WR/RD 宏命令。

    为了避免在发行版构建中进行循环优化、 我修改了您共享的代码、将存储在数组中的数字相加、而不是将 1 添加到 temp 中。

    您会发现、无论 MPU 将 L3 配置为“缓存+可共享“还是“非缓存“、上述代码的时间消耗始终为 9000 个周期。

    通过将 MPU 区域配置为“缓存“、您将启用缓存。 客户可以注释掉写入操作并检查 MPU 配置为缓存或未缓存时的周期。 我建议客户在调试模式下执行实验、以避免任何循环优化。

    是否有任何更新为什么时间相似?

    这比预期的时间长。 我需要内部检查有关该问题的信息。

    此致、

    Samhitha

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

    嗨、Samhitha

    感谢您的解释、  

    我发现“缓存“ 的工作速度足够快、但当我配置为“缓存+可共享“时、代码的执行速度就像“非缓存“一样慢。

    我们可以关闭线程,如果你可以帮助详细说明为什么 Sharable 会减慢代码。  

    谢谢

    Ken

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

    尊敬的 Ken:

    我发现“缓存“ 的工作速度足够快、但当我配置为“缓存+可共享“时、代码的执行速度就像“非缓存“一样慢。

    我可以重现此问题。 正如聊天中提到的、我需要与设计团队核实这种行为。

    此致、

    Samhitha

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

    Ken、

    下面是 R5 TRM 的屏幕截图-

    共享区域中的数据永远不会缓存在 1 级缓存中、即使该区域也可缓存也是如此。 由于未启用高速缓存、您观察到缓存+共享和非高速缓存的性能相同。

    此致、

    Samhitha

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

    Samhita、ć

    感谢您的确认。