论文部分内容阅读
矩阵计算是许多科学计算与机器学习方法的核心组成部分,有效提升矩阵计算的性能对于开发高性能科学计算系统或大数据处理系统有着重要的意义。图形处理器(Graphic Processor Unit,GPU)是一种重要的并行计算设备,可以同时运行大量的线程,同时在浮点运算方面有着巨大的优势,因此已经成为了目前最常用的并行计算协处理器,也是实现高性能矩阵计算的重要计算平台。然而,基于GPU的矩阵计算并行加速还面临着一个挑战性问题:由于GPU的并行计算模型是单指令多数据的,而很多矩阵计算问题又不可避免地出现数据依赖问题,因此如何解决数据依赖条件下多数据的并行调度和计算问题是一个难点。本文围绕这个核心问题,分别针对科学计算和机器学习中的矩阵计算模型及算法设计问题展开研究,主要研究内容包括稠密矩阵计算的优化、对称正定线性方程组的求解问题和具有缺失值的矩阵分解问题。本文研究的主要工作如下:(1)针对稠密矩阵的计算优化问题,本文提出一套处理器的自适应选择与优化方案,可以把合适的矩阵计算分配给合适的处理器。本文通过并行分析和数学建模方法两个层次对向量内积、矩阵与向量乘法、向量三角线性方程组求解、矩阵与矩阵乘法、矩阵三角线性方程组求解等五个常用的稠密矩阵计算进行研究,结合CPU和GPU的硬件架构特点得出一套完整的处理器选择方案,最后在不同大小的向量和矩阵上对并行分析结论和数学模型分别进行验证。实验证明,本文给出的处理器选择方案可以有效选择合适的处理器。基于本文得到的处理器选择方案,可以用于开发自适应高性能的稠密矩阵计算程序。(2)针对稀疏对称正定线性方程组的求解问题,本文设计一种可以高效利用GPU的预处理方法——基于完全逆的矩阵块预处理方法。稀疏对称正定线性方程组的求解问题一般需要用到预处理共轭梯度法,而预处理共轭梯度法中最重要的问题就是选择一个合适的预处理方法。本文先分析现有预处理方法在GPU上实现存在的缺陷,再利用GPU适合批量稠密矩阵计算的特点设计一种预处理方法——基于完全逆的矩阵块预处理方法,给出基于完全逆的矩阵块预处理方法的GPU实现并通过数学模型对各种预处理方法在GPU上的性能进行分析,最后在不同元素分布的稀疏对称正定线性方程组上进行实验。实验证明,与其他预处理方法相比,基于完全逆的矩阵块预处理方法在提高预处理共轭梯度法的收敛效率的同时可以保证计算的稳定性。基于完全逆的矩阵块预处理方法是一种可靠稳定高效的预处理方法,是在无法预知方程组元素分布的情况下最合适的方法。(3)针对具有缺失值的矩阵分解中存在的计算资源浪费问题,本文设计一种新的并行任务分配方法,新的任务分配方法可以去除空白数据块对线程块的占用。具有缺失值的矩阵分解主要用于推荐系统,而目前已有的基于GPU的矩阵分解方法在用户数量与商品数量相差较大时,会造成大量的GPU线程处于无数据执行状态,进而导致效率低下。本文主要针对在用户数量与商品数量相差较大的情况下,分析已有矩阵分块方式的缺陷,设计一种新的矩阵分块方式以及配套的GPU任务分配方法,新的任务分配方法可以有效利用计算资源进而提高计算效率,最后在四个不同的数据集上进行实验验证。实验证明,新的并行任务分配方法比现有方法效率更高。基于本文提出的计算任务分配方法,可以高效利用GPU完成具有缺失值的矩阵分解问题的求解。(4)针对具有缺失值的矩阵分解中存在的计算资源分配不均衡问题,本文设计一种基于向量并行的实现方法,该方法可以充分利用向量计算内在的并行性。本文比较现有的随机梯度下降法与其它优化问题的梯度下降法在并行实现方式上的不同,仔细分析两种并行方式的性能差别,给出一种新的数据划分和并行实现方法,并分析新的并行实现方法如何解决计算资源分配不均衡问题,最后在四个不同的数据集上进行实验验证。实验证明,基于向量并行的实现方法可以提升并行计算效率。基于本文提出的向量并行的实现方法,可以减少前期的数据预处理计算量,同时,在相同计算资源的情况下可以更高效的利用GPU完成具有缺失值的矩阵分解问题的求解。