最小化数据访问量
增强并行算法中的数据局部性的一个基本方法是尽量减少并行任务需要访问的共享数据量。一个有效的方法是选择恰当的分解和负载平衡策略。比如,对矩阵--矩阵乘法,采用二维计算映射的方法,可以减少每个并行任务所需要访问的共享数据量(A和B)。和一维映射相比,共享数据访问量可以从n2/p+n2减少到。一般来说,采用较高维的分布能够帮助算法减少需要访问的共享数据量。
另外一种减少共享数据访问量的策略是通过减少并行任务数量的方法来增加每个任务执行的平均计算量。这种方法在需要使用大量处理器的场合并不经常使用,因为它实质上降低了程序的并发度。
同时,我们也可以采用在本地存储中间结果,只在必要的时候提交最后结果的方法来减少共享数据的访问量,这样可以避免对共享数据的多次访问。需要注意的是,虽然数据复制的方法也可以达到同样的目的,但对很多的程序,实际上复制所需要的存储器空间是可以节省下来的。
上面的所有的策略都适用于各种体系结构和各种并行程序模型。
|