版权归原作者所有,如有侵权,请联系我们

[科普中国]-GPU集群

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

GPU集群是一个计算机集群,其中每个节点配备有图形处理单元(GPU)。通过图形处理单元(GPGPU)上的通用计算来利用现代GPU的计算能力,可以使用GPU集群执行非常快速的计算。GPU集群可以使用来自两个主要独立硬件供应商的硬件(AMD和nVidia)。

简介从硬件架构角度,GPU集群只是把作为外设通过高速PCI总线连接到节点内部通过PCI总线连接GPU。并且通过高速以太网或者高速交换网络进行互连。GPU的加入使得集群呈现节点内部计算资源的异构化。GPU集群单个节点内部不仅可以包含单核CPU、多核CPU甚至多CPU计算资源,而且包含了单GPU或者多GPU。由于GPU不仅具有异构于CPU的计算资源,而且具有复杂而程序员可见的存储层次。CPU与GPU之间通过总线连接,虽然GPU作为计算资源,但是GPU仍然为计算节点的外部设备,CPU和GPU之间的数据传输必须在CPU的控制之下显式进行。GPU作为面向多规模数据并行计算的计算资源使得GPU集群在并行计算能力呈现多层次化。GPU集群不仅能够支持常规粒度的单程序多数据和多程序多数据计算能力,并且可以支持更细粒度的面向大规模数据单程序多数据的和单指令多数据计算能力。给集群提供了强大的大规模数据并行处理能力。

GPU集群这种异构计算资源和多层次并行计算能力给并行程序的设计带来了巨大的困难。并行编程环境作为集群系统的必需部件,因此集群系统的设计必须包含能够契合GPU集群体系结构的编程模型和方便可靠的编程环境。主流的GPU集群编程模型是MPI+CUDA,负责进程间的数据传输,CUDA负责GPU异构计算资源上的程序设计。这种模型虽然不能充分契合体系结构,但是提供给程序员使用异构计算资源和发挥GPU集群多层次并行的能力。对于GPU集群环境,集群中间件包括单一系统映像与传统集群基本一致。由于GPU出色的数据级并行计算能力,GPU集群具备强的大规模数据级并行计算能力,并且这也是GPU集群最佳出众的地方。另外GPU是面向吞吐率的计算设备,因此GPU集群比传统集群具有更强的吞吐率。同样通过节点的扩增以及硬件的更新升级,GPU集群同样具备可扩展性特点。除此之外,GPU集群具有更高的性能价格比以及性能功耗比1。

集群编程模型与范例模式和应用程序模板描述了一个一般化的特征元组,该元组充分地说明了一个并行算法具有的特征,包括进程属性(结构、拓扑和执行)、交互特性以及数据特点(划分和放置。并行程序可以归纳为一些有明确定义的不同编程模式,绝大多数的并行程序所包含的模式种类都相对较少。并行计算资源和问题本身的并行类型决定了程序所采用的并行模式,计算资源可能决定系统可以有效支持的并行粒度大小,并行类型反映了一个应用程序或数据的结构。常用的并行编程模式包括任务播种、单控制流多数据流、数据流水线、分治策略。

任务播种又叫主从模式,包括主任务和多个从任务。主任务主要负责将问题分解成多个小的任务,同时收集各个子问题的解,将其汇总等到计算的最终结构。从进程执行一个很简单的循环:接受消息,进行计算,向主进程发送结果。一般情况下,只有主从进程之间有消息传递。

单控制流多数据流是一种普遍使用的模型。每个进程基本上执行同一代码段,但是处理的数据不同。这种方法需要将应用程序数据分给不同的处理器。

数据流水线是一种比单控制流多数据流更细粒度的并行机制,传统的数据流水线建立在功能划分基础上,然后每个处理器执行整个算法的一小部分。

各进程被组织成为一条流水线一一每个进程相当于流水线的一个阶段,负责某个特定的任务。通信模式可以非常简单,因为数据只在流水线的相邻阶段传递。由于这个原因,这种类型被看作数据流模型。通信完全可以异步执行。这种模型的效率直接取决于流水线各阶段平衡负载的能力。该模型在重构系统的健壮性可以通过在各阶段之间提供多个独立路径来实现。传统的功能划分虽然能够有效分解问题,简化设计,但是无法有效利用异构计算资源本身的独特而强大的计算能力。由于GPU集群强大的异构的大规模数据并行计算能力,使得计算为单元的划分变得必要,因此,针对GPU集群系统,在功能划分的基础之上,通过数据并行计算为单位的再划分和组合使得数据流水线保留了原本细粒度计算特点,又能够充分适应GPU集群具有强大大规模数据并行计算能力的特点。

分治策略是将一个问题分成两个或者两个以上的子问题,然后独立的解决每一个这样的子问题,最后将这些结果综合起来得到最后解。一般情况下,这些子问题和原始问题的实质一样,只是规模变小了,这样通过递归旳方法可以解决。分治策略中常见的三种计算操作是:分解、计算和汇总。程序组织成一种虚拟树结构,一些进程派生出子任务,并且汇总这些子任务的结果计算出综合解。

计算机集群计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多。集群分为同构与异构两种,它们的区别在于:组成集群系统的计算机之间的体系结构是否相同。集群计算机按功能和结构可以分成以下几类:高可用性集群、负载均衡集群、高性能计算集群、网格计算 。

高可用性集群

一般是指当集群中有某个节点失效的情况下,其上的任务会自动转移到其他正常的节点上。还指可以将集群中的某节点进行离线维护再上线,该过程并不影响整个集群的运行。

负载均衡集群

负载均衡集群运行时,一般通过一个或者多个前端负载均衡器,将工作负载分发到后端的一组服务器上,从而达到整个系统的高性能和高可用性。这样的计算机集群有时也被称为服务器群(Server Farm)。一般高可用性集群和负载均衡集群会使用类似的技术,或同时具有高可用性与负载均衡的特点。Linux虚拟服务器(LVS)项目在Linux操作系统上提供了最常用的负载均衡软件。

高性能计算集群

高性能计算集群采用将计算任务分配到集群的不同计算节点而提高计算能力,因而主要应用在科学计算领域。比较流行的HPC采用Linux操作系统和其它一些免费软件来完成并行运算。这一集群配置通常被称为Beowulf集群。这类集群通常运行特定的程序以发挥HPC cluster的并行能力。这类程序一般应用特定的运行库,比如专为科学计算设计的MPI库。

HPC集群特别适合于在计算中各计算节点之间发生大量数据通讯的计算作业,比如一个节点的中间结果或影响到其它节点计算结果的情况。

网格计算

网格计算或网格集群是一种与集群计算非常相关的技术。网格与传统集群的主要差别是网格是连接一组相关并不信任的计算机,它的运作更像一个计算公共设施而不是一个独立的计算机。还有,网格通常比集群支持更多不同类型的计算机集合。网格计算是针对有许多独立作业的工作任务作优化,在计算过程中作业间无需共享数据。网格主要服务于管理在独立执行工作的计算机间的作业分配。资源如存储可以被所有节点共享,但作业的中间结果不会影响在其他网格节点上作业的进展。

本词条内容贡献者为:

王慧维 - 副研究员 - 西南大学