1、调试环境下查看内存时有L1DCache选项,不选择的话,即使在操作中修改了共享内存区变量值,也不显示。但是gel中好像是把cache禁止了吧。不知道这是怎么回事?
2、多核程序中在共享内存区定义一全局变量,调试状态下查看内存地址,不同核(相同地址)显示的值不同。请问这是什么原因?所有核都选择了L1DCache选项。
3、我在跑IPC的例程时,Import macro.ini文件,工程中并没有显示添加了ini文件。然后构建工程找到CSL目录,我怀疑是ini没有Import进去,请问怎么解决?
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.
1、调试环境下查看内存时有L1DCache选项,不选择的话,即使在操作中修改了共享内存区变量值,也不显示。但是gel中好像是把cache禁止了吧。不知道这是怎么回事?
2、多核程序中在共享内存区定义一全局变量,调试状态下查看内存地址,不同核(相同地址)显示的值不同。请问这是什么原因?所有核都选择了L1DCache选项。
3、我在跑IPC的例程时,Import macro.ini文件,工程中并没有显示添加了ini文件。然后构建工程找到CSL目录,我怀疑是ini没有Import进去,请问怎么解决?
xiangzhong kong,
您好!
问题1:我的理解该选项只是通过颜色区别该区域是否被L1D cache。
问题2:由于prefetch和cache机制的存在,不同核可能看到不同值。硬件不自动维护cache和prefetch buffer的一致性。
问题3:CCS5.1发现的问题,CCS5.0.3没有。
下面是该问题的两个建议:
1. import之前删除所有存在的宏;
2. 将micro.ini放在项目目录下。
Yu Liu,
您好!
问题1.LID Cache选项,选与不选,显示的内存值是不同的。
问题2.调试时显示invalidate all cache,这是gel文件中把cache禁止了吧,不知道理解的对不对。但是又会出现问题1中出现的状况。这块感觉有点混乱,不是很明白。
xiangzhong kong,
问题1应该是cache使能的。
硬件配置文件应该关联CCS安装目录下的\ccsv5\ccs_base\emulation\boards\evmc6678l\gel\evmc6678l.gel。连接DSP核会有下面的输出。
C66xx_0: GEL Output: Setup Cache...
C66xx_0: GEL Output: L1P = 32K
C66xx_0: GEL Output: L1D = 32K
C66xx_0: GEL Output: L2 = ALL SRAM
C66xx_0: GEL Output: Setup Cache... Done.
问题2这句话可能是你的程序输出,目的不是禁止cache而是将当前cache中的内容清空。之后cache会继续工作。
Yu Liu,
您好!
1、我也是关联的这个文件。但是我的输出是:
C66xx_0: GEL Output: Invalidate Cache...
C66xx_0: GEL Output: Invalidate all Cache... Done.
2、在MSMC共享内存空间,核0定义一全局变量。此时两个核显示的值相同。然后核0改变这个变量的值,核0查看该变量地址中值为改变后的值;但是核1中该地址的值却没有改变。
这个问题该怎么解决呢?
xiangzhong kong,
如果我们仔细看看gel文件,连接某个核在OnTargetConnect()中会设置cache。在OnPreFileLoaded()中会调用Invalidate_Cache();,目的是再程序刚运行时保证cache没有残留的内容。
具体到问题2,涉及到cache和存储之间的一致性。需要在核0进行回写同时invalidate核1cache然后再读。另外也可以考虑通过MAR在多核共享的数据区不进行cache配置。MSMC还需要考虑prefetch buffer的影响。