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: DSP多核cache不一致性问题

Part Number: TMS320C6678


您好,

         我使用的编译环境为CCS5.0,对代码进行软仿。

          代码是基于BIOS的,在main函数中完成IPC和存储数据空间的初始化后,设置1个task,完成基本功能,代码的结构如下,代码编译时开启了-o1的优化选项:

void TsKFunc()

{

mess_data[ CoreNum ] = Process1();

if( CoreNum == 0)

{

data = Process2();

mode = 1;

...

}

}

Process1()是由8核共同执行的,Process2是由核0单独执行的。8核共享的数组mess_data[8]存储在SL2中。

软仿时,基于所使用处理数据:核4会对mess_data的相应位置写1,也就是mess_data[4]=1,其他核则是0,然后通过Process2的处理把8核检测到的信息累加赋值给data,也就是data=1。

但是现在软仿时却出现了以下现象:

软仿时,断点打在mode=1处,这时去核0中查看data的值为0,再去查看mess_data的值,在cache中mess_data[0]~mess_data[7]全为0,但是在SL2中mess_data[4]为1,其他的为0。再去查看其他核中mess_data的值,cache中和SL2中mess_data[4]为1,其他的为0。

也就是说在执行Process2时,不知道为啥核0的cache里mess_data[4]的值变成0了,导致data的结果也出错了。

请问这是为啥?我们也尝试在Process2处理之前对mess_data进行了cache invalid的操作,但是仍然会出现data的结果为0的情况。

这种时候应该去查些什么?怎么解决这个问题?请各位大佬们赐教!