我现在要做的是八个核都共享同一片数据区,不过每个核负责处理的数据区域是不同的。
核0是主核,除了本身处理一块数据外,还负责通知其他核开始处理,及收到其他核完成处理的通知。
在核0收到其他完成处理的通知后,打开共享内存,读取所有核的处理结果
我的代码大概是这个样子的
主核0:
// 初始化共享区域的数据 Cache_wbAll(); // 通知其他核处理数据 Cache_disable(); // 主核处理它这部分的数据,并把结果放在内存中 Cache_wbAll(); // 等待其他核完成处理 Cache_inv(); Cache_wait(); // 主核读取存入结果的内存区域
从核代码
// 获得主核通知 Cache_disable(); // 从核处理数据 Cache_wbAll(); // 通知主核处理完成
最后的结果只有主核数据被正确存入了!如果处理Cache,请详细说明下>_<
Andy Yin1:
保证共享数据的地址及长度cache line对齐,每个core在向共享memory写完数据后,执行cache write back将数据回写到实际memory;在读共享数据之前及处理完共享数据之后执行cache invalidate,保证从实际地址读到更新的数据。