Part Number:TMS320C6678
CACHE_wbInvL2(cnew, mnew * nnew * sizeof(float), CACHE_FENCE_WAIT);
主核和从核一起处理数据,但是主核缓存了从核的部分数据,当主核处理完数据,进行cache写回失效,再从核处理数据写回,但是主核执行该函数并没有把数据写回,缓存中还存在脏数据,主核进行下一步处理时,主核还是用了缓存中的脏数据,并没有用从核写入内存的数据。
Nancy Wang:
相关完整的代码贴出来看一下。读取数据之前是否执行Invalidate操作。
,
Qu Zhong:
CACHE_wbInvL2(cnew, Info->Mnew * nnew * sizeof(float), CACHE_WAIT); CACHE_invL2(Info->Cnew, mnew*nnew*sizeof(float), CACHE_WAIT); _mfence(); _mfence();
这段代码执行后,内存中这部分数据并没有改变
,
Qu Zhong:
我是打断点去看对应的内存,但是这段代码执行后好像跟没执行一样,ddr中的数据没有改变,cache中还是脏数据,是需要导入额外的头文件还是?我目前导入了一个<csl_cacheAux.h>
,
Nancy Wang:
配置MAR看看,详细内容请阅读 2.3 Cacheability
https://www.ti.com.cn/cn/lit/ug/sprugy8/sprugy8.pdf
,
Qu Zhong:
我现在遇到的问题主要是小范围的写回是可以执行的,但是cache_inv指定的范围大一点,cpu中的缓存就不会写回
,
Nancy Wang:
有部分可以应该不是头文件的问题。
有没有测试过多大的范围有效?修改数据存放地址,多测试看一下。