我在做多核的同步的时候,定义了一个int型的flag,并且把它放到了MSMC中。在core0中将其值改写为1,但在其他核中该值依然是0,并没有随着core0改变。
怀疑是cache一致性的问题,于是加入了CACHE_invL1d((void *)(&flag),sizeof(int),CACHE_WAIT);但结果依旧。
麻烦帮我看一下。
非常感谢TI的工作人员和各位网友!
chao fan:
回复 Brighton Feng:
谢谢上面这位网友!用你的方法已经调通了!
wei wang6:
回复 chao fan:
我的cache配置是如下的:
L1Pcache 32k byte
L1Dcache 32k byte
L2cache 0k byte.
然后核0、核1都把数据写入到共享内存中:
1.在没有操作系统的时候,利用上面的函数核1和核0都能看到对方写的数据。
2.在有操作系统的时候,就不能看到对方写的数据了。
请问哪位高手能大概指引一下是什么原因导致的吗?
ZQ:
回复 Brighton Feng:
请问:CACHE_invL2(flag address, size of flag);CACHE_wbL2(flag address, size of flag);这两个函数中第二个变量是否有长度限制?
如果我L2开了256KB的cache空间,0核写大于256KB的数据时,1核去访问是否有问题?
Brighton Feng:
回复 ZQ:
size没有限制.
64932136:
chao fan 你好,
我现在也想弄这个MSMC和cache一致性的问题,但是不知道怎么在MSMC中定义一种标志,然后配置cache一致性。请问可不可以把这块的处理方法代码贴出来学习一下。谢谢。
ming wu4:
回复 Brighton Feng:
你好,请问这段伪代码在实际编程中怎么填写,是否有相应的例子参考,谢谢!