论文部分内容阅读
共享存储多核多级Cache结构已成为高性能计算领域通用的处理器架构。虽然多级Cache结构能够有效缓解“存储墙”,但在科学计算程序中,访存指令占有较大比重,访存效率仍然很低,而且多核并行对访存带宽有更高的需求。因此,减少访存次数和隐藏访存延迟仍然是程序访存优化研究的主要内容。模板计算是一类在图像和视频处理、大规模科学和工程计算等领域广泛使用的访存密集型计算核心,已被众多科研工作者作为性能优化的对象,包括并行加速、通信优化、负载平衡等,而对模板计算的访存优化还需要进一步研究。本文以共享存储多核处理器为平台,从循环分块、向量重组和数据预取三个方面对模板计算进行了访存优化研究,主要贡献及创新包括三个方面:第一、改进了传统的循环分块方法,并提出一种基于OpenMP线程与数据块绑定的并行算法。改进的循环分块方法综合考虑了多核或多线程并行及多级Cache结构的特性;基于OpenMP线程与数据块绑定的并行算法能够有效的解决传统并行算法中并行开销大、不能有效重用相邻分块之间的边界数据等问题。第二、采用向量重组减少模板计算的非对齐访存,并提出一种向量拼接移位的向量重组方法。通过对模板计算访存特点的分析,发现模板计算不仅可以进行向量化,而且一些向量之间存在数据元素的重用。所以在模板计算向量化的基础上,采用向量重组方法减少了模板计算存取数据的次数,有效提升了模板计算的访存效率。在模板计算向量重组方法的研究中,不仅基于模板计算的访存模式提出多种向量重组方法,而且基于模板计算重组向量的特点提出向量拼接移位的向量重组方法,减少了向量操作次数。第三、采用数据预取隐藏模板计算中的访存延迟。数据预取充分利用处理器空闲带宽对数据进行存取,通过将访存与计算重叠,能够有效地隐藏访存延迟。通过对Intel X8664硬件预取和软件预取机制的分析,分别对连续访存和非连续访存两种模式下的模板计算使用了软件预取优化,并使用循环展开和循环剥皮优化了数据预取。实验结果表明,软件预取更有益于优化非连续访存模式下的模板计算。