自由之战易水寒:CMEM——高速缓存一致性问题的解决

来源:百度文库 编辑:九乡新闻网 时间:2024/04/25 14:17:10

1. CMEM——高速缓存一致性问题的解决

多核设计中,共享的二级高速缓存之间数据可能不一致,不同CPU内核的私有高速缓存也可能存在数据不一致,称为高速缓存的一致性问题。解决一致性问题的方法从整体上分可以分成软件方法和硬件方法两种,各有其优势。Davinci采用软件解决方案。

1) 数据完整性。CE中的CMEM模块是用来做共享内存分配的,因为应用程序是运行在MVista Linux上的,在应用程序里malloc到的buffer都是虚拟地址,实际的物理空间不一定连续,当把这个指针传递给算法的时候,数据完整性问题就出现了,因为算法是运行在DSP/BIOS上的,这是一个只有实地址的世界。为了解决这个问题,在共享缓存动态申请空间的时候,就要调用CMEM API。CMEM驱动模式可以用来在ARM上分配连续的物理缓冲区。

2) CACHE一致性问题。在ARM和DSP内核中都有CACHE用来提高使用外部存储的效率。所有的内核在当它们进行读写的时候,都管理着与它们相关的CAHCE的一致性。但是,当数据经共享内存从一个内核发送到另一个内核时,内核是从不进行CACHE的管理的,因为它们无法互相得知。像虚拟地址问题一样,只要编程者注意到的话这个问题是很容易解决的。当客户端写一个客户端存根函数(stub)来对要发送到服务器端的一个变量或者缓冲区进行CACHE回写时,服务器端就写服务端存根函数(stub)来使得收到的这些变量和缓冲区无效。