论文部分内容阅读
近年来,高性能计算机体系结构的发展日新月异,其中基于GPU的异构体系结构成为一种主流的设计方法。相比传统的同构多处理机系统,集成CPU和GPU的异构系统能够提供更好的计算性能和功耗效率,非常适合处理数据并行应用,在工业制造、生物医药、石油物探、气象预测等领域有着广泛的应用前景。目前,限制异构计算的瓶颈在于异构编程环境仍不够成熟,如何高效地利用异构系统中多核CPU和众核GPU进行协同计算是目前高性能计算领域中研究的热点和难点问题。MD5 Crypt破解算法和Lared-P激光等离子体模拟算法是两道典型的数据并行程序,分别在信息安全和物理模型模拟领域有着十分重要的应用价值。这两个应用代表了两类典型的数据并行应用:MD5 Crypt破解算法在并行求解过程中数据相互独立不相关;Lared-P算法则在并行求解过程中存在十分复杂的数据相关。本文针对这两类应用对异构系统上CPU和GPU的协同计算进行了研究。主要取得了如下成果:(1)采用了一种基于MPI-OpenMP-CUDA混合编程模型实现了异构系统上的的协同计算。使用MPI编程接口实现同构节点之间的协作;采用OpenMP实现节点内CPU和GPU之间的协同计算;当计算任务分配到CPU上时,采用嵌套的OpenMP线程对计算任务进行处理,当计算任务分配到GPU上时,则采用CUDA线程对计算任务进行处理。(2)实现了MD5 Crypt破解算法在异构系统上的协同计算。采用基于MPI-OpenMP-CUDA的协同计算方法,将整个密码空间作为总的计算任务,分成多个子任务后通过MPI在节点间进行平均分配;在节点内部分别在CPU和GPU上使用OpenMP和CUDA对分配的任务进行并行处理;针对GPU上的CUDA程序采用了使用常量内存、内存操作优化以及使用共享内存等方法进行了优化;针对CPU与GPU之间的性能差异,采用两路攻击的策略实现了CPU与GPU之间计算任务的动态分配和负载平衡;在多个节点上采用主从的并行模式,通过主进程对任务池的维护,实现了破解算法的断点续算功能。实验结果表明,MD5 Crypt破解程序在TianHe-1A系统上仅使用CPU时每秒可处理4.3万个密码,而CPU和GPU协同计算时,每秒处理的密码数则可达25万,若全系统运行每秒可以处理18亿组密码,对MD5 Crypt算法的安全性提出了挑战。(3)实现了Lared-P算法在异构平台上的并行分解和协同计算。将整个模拟区域作为总的计算任务,通过MPI进程将计算任务划分并分配到节点上;在节点内使用OpenMP的动态调度方法实现了计算任务在CPU和GPU上的动态分配;针对粒子云方程中存在的数据相关,在CPU上采用隔离存在冲突网格的方法实现计算任务的并行分解,在GPU上则提出了一种基于CUDA中SIMT并行机制的并行方法和八色分解方案,实现了任务的并行分解以及数据共享;通过多个MPI进程共享GPU的方法使得数据初始化和GPU计算异步执行,提高了GPU的利用率和程序的执行效率;采用页锁定内存和最小数据量传输的方法对程序的数据传输进行优化,在提高传输速度的同时减少了数据的传输量。最终Lared-P程序在Tianhe-1A的单个节点上的测试性能则相对于CPU串行程序的性能提高了29倍,缩短了整个程序的运行时间。