TI论坛
直播中

萧治维

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

C6678多核编程,设置同步标志时用了cache保护,仍然做不到每个核同步更新

各位工程师好:
        我在L2共享内存中申请了一个同步标志multiCoreSyncDoneCore0Wait[0],每一个核运行到的时候标志的相应位就置一:
if(CoreNum)[
       SYS_CACHE_INV ((void *) &multiCoreSyncDone[0], 128, CACHE_WAIT);
       multiCoreSyncDoneCore0Wait[0] |= (Uint8)(1<        SYS_CACHE_WB ((void *) &multiCoreSyncDoneCore0Wait[0], 128, CACHE_WAIT);
]
else[
       while(multiCoreSyncDoneCore0Wait[0] != 0xFF)
       SYS_CACHE_INV ((void *) &multiCoreSyncDoneCore0Wait[0], 1, CACHE_WAIT);
]
对于每个核multiCoreSyncDoneCore0Wait[0]的值都是不同的,请问这是因为核同步操作不能多个核同时操作一个数,即使是不同位也不可以么?
                                                                                                                                                                                                                                               谢谢!

回帖(4)

王英

2019-1-8 11:05:01
Share L2默认是开启cache的,每个核都会有这个地址的cache,你不能用它做同步标志,会很麻烦的。
一般同步标志要放到不可共享的内存里去,严格意义上还应该用硬件信号量保护。
举报

萧治维

2019-1-8 11:24:38
引用: hdfsf 发表于 2019-1-8 19:45
Share L2默认是开启cache的,每个核都会有这个地址的cache,你不能用它做同步标志,会很麻烦的。
一般同步标志要放到不可共享的内存里去,严格意义上还应该用硬件信号量保护。

谢谢您的答案!
    不过基础太差,有很多地方还不明白。比如cache的详细说明,还有不可共享的内存怎么让其他核读到,硬件信号保护是什么。
    请问想学习上面这些内容需要读哪些文件,有没有相应的实例?谢谢!
举报

王英

2019-1-8 11:39:12
引用: she558742 发表于 2019-1-8 20:05
谢谢您的答案!
    不过基础太差,有很多地方还不明白。比如cache的详细说明,还有不可共享的内存怎么让其他核读到,硬件信号保护是什么。
    请问想学习上面这些内容需要读哪些文件,有没有相应的实例?谢谢!

关于cache的一致性维护可以看看下面两篇文章,第一篇中文我找不到TI的链接了
http://blog.csdn.net/liangwei88624/article/details/6121282
http://www.ti.com/lit/ug/spru610c/spru610c.pdf
举报

萧治维

2019-1-8 11:56:11
引用: hdfsf 发表于 2019-1-8 20:19
关于cache的一致性维护可以看看下面两篇文章,第一篇中文我找不到TI的链接了
http://blog.csdn.net/liangwei88624/article/details/6121282
http://www.ti.com/lit/ug/spru610c/spru610c.pdf

十分感谢!
举报

更多回帖

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