TI中文支持网
TI专业的中文技术问题搜集分享网站

关于Cache回写进入内存的问题

我现在要做的是八个核都共享同一片数据区,不过每个核负责处理的数据区域是不同的。

核0是主核,除了本身处理一块数据外,还负责通知其他核开始处理,及收到其他核完成处理的通知。

在核0收到其他完成处理的通知后,打开共享内存,读取所有核的处理结果

我的问题是:

1. 数据本来是存放在共享内存中,各核处理的数据结果只会暂时存放在Cache中么?如果需要放入内存中,是需要用Cache_wb写回么?

2. 如果是这样的话,八个核中应该如何调用Cache函数,使得最后所有的数据结果都能存入内存中呢?比如Cache_wb和Cache_disable函数都如何安排?

我的尝试:

1. 各核调用处理函数前都先调用Cache_disable,处理函数后再调用Cache_wb,结果只用核0的数据成功存入内存中了。

2. 在主核读取所有处理结果后面添加了一段

Cache_disable(Cache_Type_ALL);
Cache_inv(outBuf,sizeof(outBuf),Cache_Type_ALL,TRUE);
Cache_wait();

发现其他核的结果都可以读取,而主核的结果却没有了!>_<

Adam Yao94020:

1.  每个核处理完毕了之后,需要cache_WB,才能把cache中结果push到内存

2.  core1-7,处理完毕自己的数据块后做Cache_wb,     core0, 在集中处理数据块之前,做Cache_Inv 

Qian Tang:

回复 Adam Yao94020:

我的代码大概是这个样子的

主核0:

// 初始化共享区域的数据
Cache_wbAll();
// 通知其他核处理数据
Cache_disable();
// 主核处理它这部分的数据,并把结果放在内存中
Cache_wbAll();
// 等待其他核完成处理
Cache_inv();
Cache_wait();
// 主核读取存入结果的内存区域

从核代码

// 获得主核通知
Cache_disable();
// 从核处理数据
Cache_wbAll();
// 通知主核处理完成

最后的结果还是只有主核数据被正确存入了!

Adam Yao94020:

回复 Qian Tang:

这里cache disable应该是不需要的。

同时各个核处理的数据段都必须做到cache line对齐,如果数据放在MSMC上,L1D上的cache line是64字节,如果数据放在DDR上同时打开了L2 cahce,cache line是128字节。

赞(0)
未经允许不得转载:TI中文支持网 » 关于Cache回写进入内存的问题
分享到: 更多 (0)