论文部分内容阅读
面向通用计算的GPU具有超强的大规模数据并行计算能力,以及高吞吐量、高性价比等特点,而采用其作为加速设备的GPU集群则成为高性能计算领域的研究热点。由于GPU的加入,GPU集群呈现了多层次、复杂的的异构特征,使得应用程序开发、运行带来了很大的难度。当前对这一体系结构进行编程,是通过将传统的节点级通信模型MPI和具体的加速器设备编程模型(如CUDA)进行简单的松散耦合,形成的直观、可用的GPU集群编程模型(如MPI+CUDA)。在MPI+CUDA编程模型中,程序员需要手工的完成任务到节点的分配,这需要了解底层的体系结构细节信息。当集群规模较大时,采用手工的方式进行任务分配难度非常大。而且手工分配的结果和具体的底层集群体系结构高度相关,这也影响了程序的可移植性和可扩展性。此外,该模型按照任务控制逻辑对应用进行划分,这使之难以有效的挖掘应用中的数据并行性,并难以获得任务间的数据流依赖关系,因而难以实施有效地细粒度任务分配策略。基于MPI+CUDA编程模型存在的上述缺陷,本文引入了DISPAR数据流模型这样一种公认的适合于描述数据密集型应用的模型,并试图在这样一个新的编程模型下实施自动、优化的任务分配机制。DISPAR编程模型将数据密集型应用中的计算抽象为虚拟计算单元VNODE。 VNODE之间具有统一的、明确自定义的通信接口PIPE,因此任务之间的数据流依赖关系能够方便的获得。本文设计并实现了基于DISPAR编程模型的任务自动分配系统StreamMAP:(1)通过对DISPAR源程序中的任务资源需求和数据流通信关系进行分析获得整个集群应用的任务资源需求拓扑图,完成对集群任务的抽象表达。(2)提出了由“控制节点发出询问、各节点响应”这样一个获取集群当前资源分布信息(当前节点资源表)的方案,这样只需依赖一个普通的MPI程序就可动态获取集群的资源分布信息,不涉及任何操作系统层面的改造。通过这种较为简单的方式获得底层集群系统的资源模型。(3)在此基础上,提出并实现了一种兼顾高并行度、负载均衡、减少任务见通信代价等多个优化目标的任务分配算法。实验结果表明,通过streamMAP能够达到自动、优化地分配异构GPU集群任务的目标。本文对异构GPU集群任务调度的研究具有一定的指导意义。