TI中文支持网
TI专业的中文技术问题搜集分享网站

关于多核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无效/写回的原理机制到底是咋样????

多谢,多谢!!!

64932136:

回复 Andy Yin1:

Andy你好,

我现在也在研究多核数据共享的问题,但是没有什么头绪,请问是否有这方面的例程可以参考?

user1746900:

回复 Andy Yin1:

      对不起,我好像描述的有点小问题。。

      现在我的程序(步骤1)到(步骤3)一直循环运行,起先都不加入cache无效/写回,(步骤2)获得数据不更新,然后不是在(步骤3)中加入cache无效/写回操作,而是在(步骤2)运算完毕之后加入cache无效/写回,这样整个运算都正常。

      我的意思是(步骤1)对结构体X 数据更新后,并没有 cache写回的操作,这时更新的数不应该是在Core0的cache中(而没有更新到MSMC中吗?),为什么(步骤2)中读出的数据X却是最新的数,不明白这里?那(步骤3)情况也属于一样的情况。您说,是不是(步骤1)写回的时候cache miss了,然后(步骤3)中也是属于cache miss的情况??

       那如果真是这样的话,我在(步骤1)和(步骤3)中没加入cache无效/写回的操作属于存在隐患问题是不是?应该加上??

user1746900:

回复 Andy Yin1:

     顺便我还想问一个问题:

     cache分为L1d cache L2 cache两种,L2 cache是read allocate吗?MSMC会经过L2 cache吗,还是只经过L1d cache? 读DDR3中数时,是对L1d cache和 L2 cache同时建立映射关系吗?

64932136:

回复 user1746900:

chen zhi 你好,

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

谢谢!

user1746900:

回复 64932136:

这个很简单啊,我现在电脑里没有我调试的代码,把数据放在MSMC里有两个方法:

1.使用伪指令##pragma DATA_SECTION();指定一段空间,具体如何用你直接在ccs中help里寻找

2.使用指针指向MSMC中的地址,。

这样核0的数据就相当于放入MSMC中了,然后核也是一样同样的方法,就相当于可以读到MSMC中数据了,

但是这里要注意CACHE的无效写回了,具体如何,可以参考前面的回答。

user1746900:

回复 Andy Yin1:

顺便我还想问一个问题:

     cache分为L1d cache L2 cache两种,L2 cache是read allocate吗?MSMC会经过L2 cache吗,还是只经过L1d cache? 读DDR3中数时,是对L1d cache和 L2 cache同时建立映射关系吗?

谢谢。。。

赞(0)
未经允许不得转载:TI中文支持网 » 关于多核6678 cache一致性的问题
分享到: 更多 (0)