论文部分内容阅读
近年来,随着图形处理器(Graphic Processor Unit,GPU)的计算能力的增强,其主要用途由图形渲染过渡到通用计算方面,GPU的定位也逐渐演变为具有众核架构的通用处理器。在现今以主核心辅以协处理器模式的CPU-GPU异构并行系统中,兼顾了CPU与GPU在通用计算方面不同的优势,提供了一种优秀的程序设计思路与系统组成方法。基于CPU-GPU异构协同环境的集群作为一种有效的提供并行计算资源的途径,已经得到了科学及工程中计算模拟、海量数据处理等研究领域的广泛应用。 支持向量机(Support Vector Machine,SVM)是一种广泛应用于统计分类以及回归分析的监督学习方法,是当今使用机器学习解决分类问题的重要途径。支持向量机基于结构风险最小化原理,具有全局优化、泛化能力强等优点,已成功应用于人脸识别、文本分类、生物信息学等研究领域。SVM的训练实质上是一个带有约束条件的凸二次优化问题,可以利用原-对偶内点法(Primal-DualInternal Point Method,PD-IPM)对其进行求解。基于内点法的支持向量机在解决小样本、高维数据的模式识别领域具有特有的优势,但是,面对如今庞大的海量数据,占用内存大,训练时间过长的缺点日趋明显,还有待完善与拓展。 针对大规模SVM训练存在的内存需求大,运行时间过长的问题,本文提出一种基于CPU-GPU异构协同环境下的快速大规模SVM训练方法(CGC-SVM)。首先,利用GPU对于计算密集型问题高性能的处理特性,通过使用CUDA语言和NVIDIA提供的CUBLAS库,对IPM算法中计算密集部分进行了算法优化。其次,针对GPU提供数据存储空间不足的问题,提出使用主机端页锁定内存进行数据存储并使GPU线程直接访问的方式,扩大了GPU可访问存储容量,使CPU/GPU两端共享数据存储空间成为可能。再次,为了解决使用页锁定内存技术带来的带宽与计算性能的损失,提出了基于分块流水机制的CPU-GPU协同SYRK实现。最后,利用MPI+Multi-threads+CUDA(MMC)编程模型将实现扩展至集群,进一步降低了针对于大规模数据集的SVM训练的单一节点的内存需求。在千兆网连接的四节点GPU集群系统环境下,利用不同规模的数据集adult、ijcnn1、covtypes、rcv1、epsilon、url进行实验。结果表明,CGC-SVM在满足精度要求的同时,能够在较大规模的的数据集上获得最高10倍于单纯利用CPU进行SVM训练的性能,在存储、计算及可扩展性上均展现了出色的性能。此外,本文所提出的基于CPU-GPU系统环境的SYRK实现,与单纯利用CUBLAS接口实现的SYRK相比,扩大了数倍的可计算规模,并且在充分利用节点计算资源的同时,取得了更好的计算性能。