TI论坛
直播中

刘勇

7年用户 1316经验值
私信 关注
[问答]

多核6678 cache一致性的问题

1.对于单核来说,没有cache无效/写回一说,因为无论在cache中还是在ram中值都是对应最新的值是吧?
2.在调试6678过程中,发现一个问题.。
   过程是:Core0与Core1双核运行,共享的数据放在一个结构体 X 中,然后放入MSCM内存中,
                (步骤1)首先Core0把数据存入结构体X中,
               (步骤2)Core1读取X中数据进行计算,并更新 X 中数据,
               (步骤3)运算完成后,Core0再读取 X 中数据。
                最开始不加入Cache无效/写回  的操作,会发现(步骤2)读到的X中数据不是Core0最新更新的数据。然后在(步骤3)后面加入无效
                并写回的操作后,整个计算过程完全正确。
3. 那么 问题来了:
           a, 问什么在(步骤1)后不用Cache写回的操作呢?
           b . 还有在(步骤3)读回X数据时也不用Cache无效的操作也正确。这到底是为什么呢?
这和cache无效/写回的原理好像不太对应,哪位大神或ti工作人员帮小弟解释解释,顺便讲讲cache无效/写回的原理机制到底是咋样????
多谢,多谢!!!

回帖(4)

刘勇

2019-1-8 11:45:06
     顺便我还想问一个问题:
     cache分为L1d cache L2 cache两种,L2 cache是read allocate吗?MSMC会经过L2 cache吗,还是只经过L1d cache? 读DDR3中数时,是对L1d cache和 L2 cache同时建立映射关系吗?
举报

李凤璐

2019-1-8 11:51:04
chen zhi 你好,
我现在也在做多核之间数据交换,这块刚开始接触,那个最基本的先将核0的数据赋值给一个变量,变量分配在MSMC中,然后核1读取这个变量的值。这部分的实现代码不会写,请问可不可以把这部分的代码贴出来学习一下。
谢谢!
举报

刘勇

2019-1-8 11:56:48
引用: zhanmeizhang 发表于 2019-1-8 18:58
chen zhi 你好,
我现在也在做多核之间数据交换,这块刚开始接触,那个最基本的先将核0的数据赋值给一个变量,变量分配在MSMC中,然后核1读取这个变量的值。这部分的实现代码不会写,请问可不可以把这部分的代码贴出来学习一下。
谢谢! ...

这个很简单啊,我现在电脑里没有我调试的代码,把数据放在MSMC里有两个方法:
1.使用伪指令##pragma DATA_SECTION();指定一段空间,具体如何用你直接在ccs中help里寻找
2.使用指针指向MSMC中的地址,。
这样核0的数据就相当于放入MSMC中了,然后核也是一样同样的方法,就相当于可以读到MSMC中数据了,
但是这里要注意CACHE的无效写回了,具体如何,可以参考前面的回答。
举报

刘勇

2019-1-8 12:03:46
顺便我还想问一个问题:
     cache分为L1d cache L2 cache两种,L2 cache是read allocate吗?MSMC会经过L2 cache吗,还是只经过L1d cache? 读DDR3中数时,是对L1d cache和 L2 cache同时建立映射关系吗?
谢谢。。。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分