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同时建立映射关系吗?
谢谢。。。
TI中文支持网


