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.

[参考译文] 编译器:C66x 高速缓存

Guru**** 2595805 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/586546/compiler-c66x-caching

主题中讨论的其他器件:EVMK2G

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

很抱歉这个基本问题。

我有一个简单的循环程序、我希望通过 I$在 evmK2G 上运行该程序。 需要采取哪些步骤。 我读了 SPRUGY8。

1) 1) C66x CSL 命令序列启用缓存:

cache_enable (cache_CE00); //如 SPRUGY8中定义

cache_setL2Size (cache_256KCACHE);//如 SPRUGY8中定义

问题1:cache_c00代表什么?

Q2:SPRUGY8还指出、无论 MAR 设置如何、程序提取总是缓存在 L1P 中。 那么、此 cache_enable 命令是否已过时。

问题3:我是否必须使用"cache_l1dSetSize()设置 L1高速缓存大小;

2) 2)在程序中定义段:

#pragma CODE_SECTION (geta、".SECTION_NAME")

int geta (int i){

               //一些代码…

 

int main (void){

 

(笑声)

 

问题4:这是可行的方法吗? 我在映射文件中看到.section_name。

 

3) 3) C66x 链接器文件

 

存储器

  L2_SRAM_0:o = 0x00800000 l = 0x00080000  /* 512KB 内部 SRAM */

  L2_SRAM_1:o = 0x00880000 l = 0x00080000  /* 512KB 内部 SRAM */

  MSMC_SRAM:o = 0x0C000000 l = 0x00100000  /* 1MB MSMC 共享 SRAM */

  DDR0    :o = 0x81000000 l = 0x80000000  // 2GB 外部 DDR0 */

  CE0      :O = 0x8000000 l = 0x01000000

 

 

部分

  .text        > L2_SRAM_0

  [剪切]

  .section_name > ce0

问题5:这些对我的问题是否有效?

 

 

 

在任何情况下,运行时都保持不变,但我尝试打开 i$。

我们非常感谢您的任何帮助。 感谢你能抽出时间。 再次对此基本问题表示抱歉。

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

    电机控制、

    [报价用户="MotorControl"] Q1:cache_ce00代表什么?[/quot]

    为 早期的 DSP CSL 定义了 cache_CE00宏、以在早期版本的 CSL 中打开该区域的高速缓存(0x80000000至0x80FFFFFF)。 此宏和 API 已针对 C66x 进行了更改、以对应相应的 MAR 寄存器。 也可以使用 K2G 上的以下 API 来完成:

    cache_enableCaching (cache_mar128);

    MotorControl 说:
    Q2:SPRUGY8还说、无论 MAR 设置如何、程序提取总是缓存在 L1P 中。 此 cache_enable 命令是否已过时。[/quot]

    本文件后面对该说明作了澄清。 外部存储器地址的可高速缓存设置(通过 MAR 位)仅影响 C66x 器件上的 L1D 和 L2高速缓存;也就是说、无论可高速缓存设置如何、始终在 L1P 中缓存对外部存储器地址的程序提取。 C64x 器件不是这种情况、其中的设置会影响所有缓存、L1P、L1D 和 L2。

    这意味着您需要仅为 指令/代码的数据启用缓存。此缓存始终在 L1P 中缓存、但您可以更改 L1P 的缓存大小

    [引用 user="MotorControl"] Q3:我是否必须使用"cache_L1dSetSize();[/quot]设置 L1高速缓存大小

    这并非总是必需的、但如果您要将该存储器分区为高速缓存和 SRAM、则需要这样做。

    [报价用户="MotorControl"]Q4:这是可行的方法吗? 我在映射文件中看到.section_name。[/quot]

    是的、您可以使用提供的代码将函数放置在指定的特定存储器区域中。 您可以始终在.out 编译之后查看.map 文件、以查看函数是否放置在正确的存储器段中。

    有关详细信息、请参阅编译器文档:

      

    MotorControl 说:
    Q5:这些有效条目是否适用于我的问题?

    我n`t 您的实现存在任何问题、您在构建此代码并查看映射文件时是否会看到任何问题?

    此致、

    Rahul

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

    Rahul、

     

    非常感谢您花时间观看本演示。

    我的理解是否正确,当您在 CCS 中为 C66X (K2G)生成默认的“hello world”循环时,第一遍将从外部存储器执行,第二次从 L1P 运行。

    我假设我必须执行一些基本的缓存启用。

    我的示波器显示、第一遍的运行时间与下面的相同。 所以我仍然不知道该怎么做。

    此致、MotorControl