This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于TMS320C6678使用MSM时,cache一致性维护的问题

我看到技术文档上说,MSM默认状态时cache enable的,而且在MSM上cache一致性的工作需要用户完成。

基于以上两点,我举个例子,假如core0向0x0c000000地址写入一个数据,随后core1读取这个地址的数据,此时这个地址应该映射到core1的L1D中,然后我再次在core0中改变这个地址的数据,在core1上是无法表现出来的,因为core1只会在L1D cache中获取之前已经缓存了的数据。

为了避免上述现象发生,是不是表示要在core1使用MSM中的数据之前,先用cache_inv使L1D cache中这个地址的数据无效?

如果这样做的话,在使用这个数据的时候,L1D cache会重新刷新这个地址位的数据,这样不是就达不到cache高速数据吞吐的目的了么?

  • 对的,MSM需要应用程序维护cache一致性,写端进行cache flush,读端进行cache invalid。

    如果每次处理时都是cache invalid会导致cache miss确实会影响效率,所以如果是大量的数据建议把数据通过EDMA或Navigator等直接存到LL2处理,LL2的cache一致性是由硬件维护。

  • L2是通过snoop命令维护cache一致性的,请问snoop命令会带来额外的时间开销么

  • snoop分为snoop write及read,在write时当cached in L1D会由硬件负责将数据并行更新到L1D,在read时,当数据cached in L1D且为dirty时是直接从L1D 中读数,不会从L1读数,所以并不会影响效率。