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.

核0缓存与SL2一致,核1缓存与SL2不一致



硬件平台:6670,软件平台:ccs5.5

L1D和L1P的cache全开,即各32kB,L2的cache打开256KB,在core0上写SL2数据,然后writeback;在core1上对SL2地址做invalide操作,再读SL2数据,这种情况,SL2开头部分数据(48个int 字)没进入cache中,导致读出错误数据。

附上配置图:

要用的数组的定义

附上memory 数据截图:

核0勾选L2缓存和不勾选数据都是一致的;

核一

不勾选L2缓存:

勾选L2缓存:(此处的红色的数据是上一次的数据,而SL2是本次的新数据)

这样导致我接下来使用的数据就是错误的;

第二个问题是:

CACHE_invL2((void*)fft_data, sizeof(fft_data), CACHE_WAIT);这个函数第三个参数有两种配置 CACHE_WAIT 和 CACHE_FENCE_WAIT,

如图

请问  CACHE_invL2Wait();  和 _mfence(); 有什么区别,问题比较多,希望TI员工可以给回答一下,问题比较着急,谢谢了

  • 1 SL2通过基地址0x0c000000进行读写时,是只会经过L1 cache,所以需要做L1 cache writeback or invalidate,你是怎么做的cache操作?

    2 两者都可以,效果是一样的,MFENCE是C66X新加入的指令,确保前面的memory读写已经完成。

  • 首先谢谢回答

    您的意思是SL2只会缓存到L1不会缓存到L2吗;我现在解决这个问题是通过核1处理完成后使用 CACHE_wbAllL2(WAIT)指令。

    我再描述一下我之前的问题,我是核0生成了数组的数据的一部分数据然后writeback,然后核1使用数据后又生成了新的数组数据,但是使用了之后没有在写writeback,请问这样是导致我inv无效的原因吗;

    还有请问 CSL_XMC_invalidatePrefetchBuffer();这个语句是什么意思,要用在什么情况下,在哪个个手册上,谢谢了