在很多的实际并行程序中,不同处理器上的任务需要对相同的数据进行访问。比如对矩阵--向量乘法Y=Ax,采用输出数据分解的办法,计算y的各元素的任务都需要访问整个向量x。而对于某些应用,除了访问原始数据外,有些任务还需要访问由其它任务动态产生的数据。这些例子都说明,不同任务之间的数据共享是经常会出现的。数据共享的存在会给并行程序带来额外的开销,因为这部分开销对串行程序来说并不存在。因此,并行算法必须尽量的减少这部分数据共享开销,因为它们直接的影响了算法可以达到的性能。
通过尽量使用局部数据(或者是早先得到的数据)的方法可以最小化交互。这类技术通常被称为增强数据局部性。
数据局部性增强技术包括一大类方案,它们尽量地减少数据访问量(非局部数据访问),同时尽量使用最近访问过的数据,最小化访问的频率(请回忆程序的局部性原理)。在很多的情形下,这些策略都和现代微处理器中经常进行的Cache数据重用优化类似。但并行体系结构需要考虑更多的因素,一是由于并行性,二是由于更深的存储器层次。因此对并行体系结构的数据局部性优化有它自己的特点,它们并不总是能用于单处理器系统。
|