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

多核内存一致性问题!

大家好!

       开发板6670EVM, core0将共享内存的一个地址置为1,执行write back;core1执行invalid后,读取该地址的值。

      问题是这样的:如果core0先执行操作,core1后去取值,没有问题。但是如果core1先取值,因为取不到‘1’,循环等待;然后core0赋值,按道理core1可以取到值,继续运行,问题是这种情况core1一直取不到值,永远在循环!何解?

Zhan Xiang:

core1每次读该共享地址前都应该执行invalid,否则一旦数据进了cache,core1会一直读取cache中的数据。

fei xiao1:

回复 Zhan Xiang:

我非常确定,每次都是执行了invalid。

Andy Yin1:

建议在全局变量前加上关键字volatile。

对于你这种使用方式,建议将类似的共享标志变量放在non cache memory区域,可以免除cache一致性的维护。

fei xiao1:

回复 Andy Yin1:

好像是prefetch方面的问题。

在读之前CSL_XMC_invalidatePrefetchBuffer()一次就可以解决问题,但是编译选项改为o2好像又不行了,难道噢o2编译对这条指令又有影响?

Andy Yin1:

回复 fei xiao1:

加上volatile关键字,并在配置memory attributes时将对应MAR寄存器中的PFXbit清零,将prefetch功能关闭。

赞(0)
未经允许不得转载:TI中文支持网 » 多核内存一致性问题!
分享到: 更多 (0)