第34卷第11期 2017年11月 计算机应用与软件 Computer Applications and Software Vo1.34 No.11 NOV.2017 基于虚拟化环境的多GPU并行通用计算平台研究 徐恒 吴俊敏 , 杨志冈4 尹燕 安徽合肥230027) 安徽合肥230027) (中国科学技术大学软件学院(中国科学技术大学计算机科学与技术学院(中国科学技术大学苏州研究院 江苏苏州215123) 摘 要 针对分布式多节点多GPU的系统环境,实现一种基于CUDA框架的多GPU通用计算虚拟化平台。应 用程序可以如同使用本地GPU一样方便地使用多个远程GPU,原来的CUDA应用程序可以不经过修改或者只进 行少量的修改就可以运行在该虚拟化GPU平台上,从而实现单机多GPU和多机多GPU在编程模式上的统一,并 通过一个基于高斯混合模型的数据聚类程序来进行实验验证。实验结果表明,在不影响程序正确性的前提下,相 对于原来使用CPU的程序,使用两个远程GPU可以获得十倍左右的加速比。 关键词 中图分类号虚拟化TP3 GPU 多机多GPU分布式 文献标识码A DOI:10.3969/j.issn.1000—386x.2017.1 1.014 RESEARCH oF PARALLEL CoMPUTING PLATFoRM oF MULTI.GPU BASED oN VIRTUAL ENVIRoNMENT Xu Heng ・。Wu Junmin ・。Yang Zhigang Yin Yah。 (School ofSotwarfe,University fScoience and Technology fChiona,Hefei 230027,Anhui,China) (School f oComputer Science and Technology,University fScioence and Technology f oChina,Hefei 230027,Anhui,China) (Suzhou Institutefor Advanced Study,University fScioence and Technology ofChina,Suzhou 215123,Jiangsu,China) Abstract Aiming at the distributed multi—node and multi—GPUs system environment,a general computing virtualization platform of multi-GPUs based on CUDA framework is implemented.The application program carl use the remote GPUs in the same way as the local GPUs.The original CUDA application program can be run on the virtual platform of GPUs without modification or with only a few changes,in order to achieve unity in the programming model of single multi-GPUs and multi—machine multi-GPUs.In the end,we verify the correctness of the experiment through a Gaussian mixture model for data classification by CUDA.The experiment shows that the result of a program using two remote GPUs can get about ten times faster than using the original CPU without affecting the correctness. Keywords Virtualization GPU Multi--machine and multi.—GPU Distributed 对于GPU的通用计算功能的研究也成为了热点。在 0 引 言 近年来,GPU的通用计算功能得到了迅速发展。 通用计算领域,以CUDA为代表的并行计算架构将 GPU引入到科学计算。但是CUDA规范只能直接访 问本地的GPU,并没有直接提供对远程GPU的访问接 口,为了能够使用网络中的远程GPU,开发人员需要用 到MPI与CUDA结合等方法,这增加了程序的复杂性 随着GPU的性能提高以及GPU自身的结构特性,使 得GPU在大规模并行计算中起着越来越重要的作用, 收稿日期:2017—01—04。国家重点研发计划项目(2016YFBlO00403)。徐恒,硕士生,主研领域:GPU通用计算,虚拟化。吴俊 敏,副教授。杨志刚,硕士生。尹燕,博士生。 第11期 徐恒等:基于虚拟化环境的多GPU并行通用计算平台研究 75 并且给开发人员带来额外的工作量。 为了能够更加方便地使用多GPU系统的计算资 源,本文以开源项目gVirtuS为基础,实现了一种基于 API的调用都会被这个伪库拦截并转发到后端进行处 理,而后端则运行在具有处理能力的宿主机上,负责处 理前端发来的请求。这种虚拟化方案被称为API重定 向(API remoting),其访问远程GPU时采用的前后端 CUDA框架的、支持多GPU通用计算的虚拟化方案, 可以将分布式环境中多个节点的GPU资源的统一抽 通信方式是TCP/IP,只能使用一台远程主机中的GPU 资源。 象到一个GPU池中。程序可以用本地GPU的方式使 用任意位置、任意数量的GPU的资源,原有的CUDA 以上方案无论是针对虚拟机的vCUDA还是针对 远程物理机的rCUDA,其设计都包含有高效性、普适 程序可以不修改源代码只要在编译过程中进行简单的 配置就可以在该虚拟化平台上运行,即使没有GPU设 备或者只有不支持CUDA的GPU设备也能够十分方 便地使用分布式环境中的非本地GPU资源进行通用 计算。 1 GPU虚拟化背景 虚拟化技术在现代计算机系统中有非常广泛的应 用,是对传统计算资源的使用方式的一种突破。在虚 拟化技术中,由于I/O设备的复杂性、多样性与封闭 性,针对I/0设备的虚拟化一直是瓶颈。GPU属于lI/ 0设备中的特殊部分,其功能主要有图形计算与通用 计算两部分,近年来随着神经网络的兴起,GPU的通 用计算功能越来越受重视,针对GPU通用计算的虚拟 化一直是学术界研究的热点。目前GPU虚拟化技术 主要有三类:1)设备独占;2)设备模拟;3)应用层接 口虚拟化(即API重定向)。此外还有硬件虚拟化,但 是运用较少。 由于CUDA的广泛应用,对GPU通用计算的虚拟 化主要是基于CUDA的解决方案,例如rCUDA_l J、 vCUDA 、gVirtuS 、Gvim 等。其中vCUDA是针 对在虚拟机环境中运行CUDA程序提出的解决方案, “采用在用户层拦截和重定向CUDA API的方法,在虚 拟机中建立物理GPU的逻辑映像” 。vCUDA出现 时间较早,对于CUDA 4.0之后的版本不再支持。 Gvim是基于Xen系统的,实现了基于前后端的CUDA 虚拟化系统,但是并没有实现CUDA全部功能的虚拟 化。rCUDA是目前比较成熟的GPU虚拟化解决方案, 支持最新的CUDA 7.5,支持cuDNN,其不再侧重于针 对虚拟机的GPU虚拟化,而是所有不包括NVIDIA GPU的节点都可以使用rCUDA来使用GPU进行通用 计算。rCUDA可以免费获得,但是不开源,其具体实 现细节与原理都未公开。gVirtuS是基于前后端模式 实现的GPU通用计算虚拟化方案,其前端提供了一个 封装了CUDA接口的伪库。在前端的所有的对CUDA 性、透明性三个原则。高效性是要求虚拟化方案不能 带来额外的开销;普适性是指虚拟化方案不能只针对 特定虚拟化平台有效,在本文中的虚拟化方案除了虚 拟化平台外还包括了没有GPU的物理平台;透明性是 指虚拟化的方案对于CUDA应用保证兼容性,不要求 修改CUDA程序源码或者重新编译,或者只需要做很 少的修改就可以在虚拟化平台上运行,在透明性良好 的虚拟化方案中,原有的单机多GPU程序可以直接在 多机多GPU的分布式环境中运行,从而实现了不同环 境中的编程模式的统一,这也是本文研究的重点。 2 单GPU虚拟化 本节讨论如何通过API重定向虚拟化方案来访问 单个的远程GPU进行通用计算的问题,以此为基础, 下一节再来讨论如何使用分布式环境中的多个GPU 的问题。在本文中的“虚拟节点”这个术语有两层含 义:一是指传统意义上的虚拟机节点;二是指没有配备 可以运行CUDA的GPU的物理机节点。为了不引起 歧义,本文使用“前端节点”这个术语来指代以上两层 含义。相应的,使用“后端节点”这个术语来指代宿 主机。 2.1 API重定向虚拟化方案 API重定向技术虚拟化方案 J,是一种应用层接 口虚拟化,是对GPU相关的应用程序编程接口在应用 层进行拦截,然后使用重定向方式实现相应的功能,将 完成的结果返回给对应的应用程序。 这种方案是针对CUDA运行时API(Runtime API)进行虚拟化,为前端提供了一个运行时伪库,该 伪库重写了CUDA的运行时API,将其实现为对后端 的远程调用。前端编写的CUDA程序对CUDA API的 调用被伪库动态拦截,伪库将CUDA API的参数与名 称发送到前端通信部分,再由前端通信部分通过网络 发送给后端,后端接受相应参数后调用真正的CUDA 程序进行计算,然后将运行结果返回给前端。结构如 图1所示 76 计算机应用与软件 2017生 前端节点 后端节点 应用程序 ll 后端通信部分 CUDA运行时伪库 } 后端处理部分 { 前端处理部分 } DA驱动 { 前端通信部分 } 软件 … … 7 1 r V 硬件 网络 GPU : 图1 API重定向虚拟化方案结构 这种方案解耦了上层软件与底层硬件之间的强耦 合关系,不仅可以应用在虚拟机中,也可以为没有配备 GPU资源或者配备了缺少支持CUDA的GPU资源的 计算机提供一种使用远程节点上的GPU的方法。这 两种方案的区别在于前端与后端的通信方式的不同: 在虚拟机中可以利用虚拟机与宿主机之间的高速通信 方式,而在访问远程节点上的GPU时只能使用网络 通信。 这种方案不依赖于特定的虚拟化平台,前端节点 可以是一个Xen、KVM、Vmware或者其他任何一台虚 拟机,甚至可以是一台真正的物理机,只要与后端节点 有网络连通,都可以使用这种方案来搭建虚拟化平台。 搭建的方式也十分简单,只需要在前端节点中安装好 运行时伪库(一般与原装库同名),然后在配置文件中 将后端节点的IP地址正确的写入即可。原本的代码 不需要做任何的修改,只要在编译时将伪库链接到可 执行文件中,源程序不需要做任何的修改就可以运行 在虚拟化平台上。应用程序可以如同使用本地GPU 一样方便地使用远程GPU,虚拟化平台的复杂的执行 流程对程序员完全透明。 一个典型的CDUA API的执行过程如图2所示, 不同的API执行步骤会有差异,但基本流程都是如图 2所示。图中虚框部分是虚拟化平台所做的处理,一 般包括前端部分与后端部分,分别位于不同的节点上。 前端节点与后端节点之间的交互包括数据传输与函数 调用,前端的所有参数都会被伪库拦截转发给后端,后 端节点接收了参数之后会启动核函数进行运算,最后 将结果返回给前端节点。每一个CUDA API在执行时 都会涉及上述步骤,执行期间会有大量数据传输,涉及 不同组件、不同节点,数据传输对应用程序的性能会产 生重大影响,是虚拟化方案设计时要解决的重要问题。 图2 CUDA函数在虚拟化平台上的执行流程 2.2程序在虚拟化平台上的执行过程 图2显示了CUDA函数在虚拟化平台上的执行流 程,与直接在本地上运行时不同,在虚拟化平台上程序 执行时被分解为了前端与后端两个部分,这使得其执 行步骤更加复杂。在没有虚拟化的环境下,一次GPU 运算的过程可以简单地分成三个步骤: 1)将数据从主机内存拷贝到GPU显存。 2)在GPU上启动核函数,开始计算。 3)将结果由GPU显存拷贝回主机内存。 在虚拟化方案中,由于前端节点与后端节点往往 不是在一台机器上,除了必要的数据外,前后端之间还 需要传输大量的参数信息与控制信息,这些都是由虚 拟化平台来处理。 图3是一个求后端节点的GPU数目的简单程序, 原程序不需要做任何的修改就可以移植到虚拟化平台 上,并得到正确的结果,只是其执行的流程更加复杂: 1)根据配置文件中提供的IP地址,前端传输相 关的参数到后端,完成GPU资源的初始化,并传回句 柄的相关信息。如果无法完成初始化,则报错。 2)在后端GPU上注册代码段(FatBinary),程序 在本地上运行时,这一步骤会隐式的调用一个CUDA 未公开的API—cudaRegisterFatBinary()来完成如内存 偏移、空间大小、GPU设备编号等相关初始化工作。 该API是在程序的所有代码之前被调用。在虚拟化环 境下,这一过程由平台来完成,同样对前端编程人员 透明。 3)将计算数据与参数从前端内存传输到后端节 点的内存,这往往是通往网络传输的。 第11期 徐恒等:基于虚拟化环境的多GPU并行通用计算平台研究 77 4)根据前端传输过来的参数以及控制信息,后端 节点调用GPU进行计算。 5)后端节点将计算结果拷贝回主存,释放资源, 并且完成相关的清理工作,在GPU程序的所有代码执 行结束之后,还需要调用另外一个未公开的CUDA API:一cudaUnregisterFatBinary()来注销相关的信息。 6)虚拟化平台的后端将计算结果传回给前端 节点。 图3一个简单程序在虚拟化平台上的执行 上述一个简单的求后端节点的GPU数目的例子 中就涉及到了两个未公开的CUDA API。由于CUDA 的封闭性,还有其余未曾公开的API,这些不曾出现在 官方文档中的API是实现虚拟化方案的过程中需要处 理的棘手问题。为了保证虚拟化平台的透明性,这些 API的功能都是由虚拟化平台来实现。 以上是对虚拟化平台的程序执行步骤的简单介 绍。一个简单的程序在虚拟化平台上的运行过程往往 就涉及到了复杂的参数传递与控制信息传递,这些数 据都要通过网络来传输,新增加的软件栈也会导致性 能降低。另外,在一些程序中,需要处理大量的数据, 这些数据在前端/后端之间传输所带来的延时往往会 比GPU处理这些数据的时间高的多,这也常常成为程 序的性能瓶颈。 2.3 改变通信方式提高效率 在2.1小节论述了论述了虚拟化平台的普适性、 透明性原则,本小节讨论虚拟化过程的效率性。本文 采用的API重定向技术是在应用层完成了对GPU的 虚拟化,这是一种在CUDA的封闭、不了解其内部细节 情况下提出的虚拟化方案 J,也是目前研究GPU通用 计算虚拟化的主流方案。API重定向方案可以解决 CUDA封闭性问题,然而由于需要拦截/转发、前端处 理、后端处理等步骤来实现平台的功能并对上层程序 员透明,因此带来了额外传输开销与控制开销。新增 加的软件栈也会降低系统的性能_8 J,尤其是在采用网 络传输来实现前端/后端的参数传递与数据传输时。 相对于主机内存到GPU显存的高速传输,网络传输的 延时往往会高好几个数量级,这部分开销也成了整体 性能的瓶颈,如何通过提高通信的性能也是本文要讨 论的重点。 前端节点与后端节点的通信方式有不同的选择, 当需要访问远程的GPU时,采用的是基于socket的传 输方式进行通信,这带来两个问题,一是前端/后端之 间的数据传输延时比较大;二是一个前端节点只能与 一个后端节点进行通信,无法同时对多个GPU进行抽 象和映射。本小节将其通信方式改为ZeroMQ来解决 第一个问题,第二个问题在第4节讨论。由第2.1小 节可以知道,通信部分为CUDA编程提供了有效的底 层通信接口,前端通信部分与后端通信部分的关联十 分紧密,而通信部分与系统的其余部分的耦合性并不 高,在深入研究之后为系统增加了一种新的高效通信 方式:ZeroMQ通信方式。 ZeroMQ是一种基于消息队列的多线程网络库,其 对套接字类型的底层细节进行抽象,提供跨越多种传 输协议的套接字。相对于Socket来说ZeroMQ是一个 更为高效的传输层协议。ZeroMQ设计之初就是为了 高性能的消息发送而服务的,所以其设计追求简洁高 效。ZeroMQ是面向“消息”的而非字节流,发送消息 采用异步模式。 实验表明,采用ZeroMQ通信方式的程序能够比 原来的Socket方式整体性能更高。实验中的后端节点 配置Inter(R)Core(TM)i54590CPU(3.3 GHz)处理 器,4 GB内存和100 GB硬盘,GeForce GTX750 Ti GPU,Ubuntu 14.04 64位操作系统,CUDA版本为7.5。 前端节点是一台物理机,配置Celeron(R)Dual—Core CPU 13000(1.8 GHz)处理器,3 GB内存和30 GB硬 盘,没有NVIDIA显卡,也没有安装CUDA程序,Ubun— tu 14.04 64位操作系统。前后端之间通过百兆以太网 交换机互联。由于网络环境会影响到实验结果,所以 每组数据都是}贝4试多次取平均值,实验运行的程序都 是CUDA SDK自带的程序。计算性能实验在三类平 台上进行对比,即本地GPU计算平台、基于Socket通 78 计算机应用与软件 2017年 信方式的虚拟化计算平台以及基于ZeroMQ通信方式 的虚拟化计算平台。 时达到临界点,规模吏大的矩阵运算不会使程序的性 能更接近本地机,因为传输开销与控制开销以及额外 的软件栈等是虚拟化无法避免的性能损失 以上实验 结果表明虚拟化平台在处理计算密集型的程序时损失 的性能会相对较少 图5中还显示r另外一个问题: 基于ZeroMQ方式 基于Socket方式的虚拟化平台之 问的性能差距不再十分明显 这同样足由于程序的计 图4显示的是向量加法的性能实验结果,其中横 坐标表示的是向量长度,纵坐标是运行时问。除_『运 行时间不同之外,运行结果与本地机上的运行结果没 有差别,说明虚拟化平台不会对程序的正确性有影响。 实验结果表明使用ZeroMQ通信方式可以提高系统的 整体性能,在这个程序中,可以获得20%~35%的性 算比较复杂,需要GPU运算的时问大大超过r数据在 能加速。然而与本地运行的程序相比,随着数据量的 加大,不论是哪一种通信方式的虚拟化方案所带来的 性能损失也越来越大。这是因为随着向量规模的增加 需要传输的数据量越多,就有更多的数据和参数需要 在前端/后端之间传递,自然会有更大的传输开销与控 制开销。而数据在GPU上计算所增加的时间并不多, 这是因为GPU特别适合处理向量加法这种可以并行 的程序,冈此数据规模的加大并不会使GPU的运算时 间大幅提高。 图5 不同平台上矩阵乘法程序的执行结果 图5中横坐标是参加运算的矩阵的阶数,纵坐标 足程序的运行时间。实验结果表明,当矩阵规模越大 时,虚拟化方案的性能反而越接近物理机,当矩阵的规 模为960 X960时,程序在基于ZeroMQ的虚拟化平台 L的运行时间是在物理机器上运行时间的1.12倍,此 网络巾传输的时间,通过改变通信方式获得的性能提 升不再明 ,那么为什么依旧选择ZeroMQ呢?下一 节的多GPU虚拟化来讨论这个问题 3 多GPU虚拟化 多GPU平台主要有两种构架,如图6所示。一种 是单机多GPU, 一种是多机多GPU,即GPU集群 在编程方式L,在单机多GPU的环境下CUDA提供了 直接的编程接口,而对于多机多GPU的结构CUDA没 有相关的编程接口,需要借助其他工具,如基于MPI 与CUDA相结合的方式,要求编程人员显式地采用分 布式MPI编程 目前的多GPU的处理方案中,一般都 足将两种情}兄区别对待,运行在单机多GPU上的CU— DA代码需要进行很大的修改才能移植到多机多GPU 的环境上,如何实现 二者在编裎模式E的统一是本文 讨论的晕点 . ‘ 图6单机多GPU -j多机多GPU 在第2节L} 提到的基于Socket方式来实现的单 GPU虚拟化方案中,由于Socket只支持一对一的通 第11期 徐恒等:基于虚拟化环境的多GPU并行通用计算平台研究 79 信,一个前端节点只能访问一个远程GPU,无法同时调 用集群环境中的多个GPU来加速应用程序。因此,在 基于ZeroMQ通信方式的虚拟化方案除了能够提高效 率外,还实现了另外的功能:ZeroMQ支持一对多的通 GPU资源的分布、数据的传输、冗余与错误处理等都 交给虚拟化平台来处理。这种方式的灵活性极好,对 GPU资源的分配只需要修改配置文件即可。 多GPU虚拟化平台的优势是可以使用分布式环 境中的其他节点的GPU资源,并且理论上没有数目的 信,从而能够同时使用多个远程GPU,实现多GPU的 虚拟化方案,如图7所示。一个前端节点可以绑定多 个后端节点的IP地址,从而能够通过ZeroMQ同时调 用多个后端节点上的GPU资源。GPU集群中存在多 限制,具体需要使用多少的GPU资源取决于程序开发 人员和分布式环境中的GPU资源数目。此外由于虚 拟化平台的透明性很好,使用远程GPU的方式就如同 个节点,每个节点配备了不同的GPU资源,节点之间 通过网络互连。在虚拟化的过程中,通过IP地址来标 识不同节点的GPU,将其映射到一个统一的GPU池 中,并且顺序编号为GPU0,GPU1,…,GPUn等。所有 分布式环境下需要解决的容错性,冗余性等问题都在 虚拟化过程中解决。对于前端节点来说,其能够使用 的GPU的最大数目就是这个GPU池中的数目。在逻 辑上,前端应用调用这个GPU池中的GPU的方式和 使用本地GPU的方式完全相同,从而将多机多GPU 卡的物理环境抽象成了单机多GPU卡的逻辑环境,使 得单机多卡的程序可以不用修改或者只做很少的修改 就可以运行在多机多卡的环境下,实现了两个环境编 程模式的统一。 r一~一一~一一~一一一一一一一一一…一一一 亘亘I ̄pu 1 I 二一 图7 多GPU虚拟化平台的物理结构与逻辑结构 如图7所示,集群中的所有GPU资源都由虚拟化 平台来管理,前端需要使用GPU资源时,只需要在配 置文件中准确描述后端节点的IP地址和需要的GPU 数目,就可以将相应节点上的GPU映射到本地。应用 程序可以像访问本地GPU一样调用这些映射来的 GPU进行加速。此外当有些程序需要的GPU资源超 过了单个节点的能力时,这也是一种很好的解决方案。 程序开发过程中,开发人员只需要专注于CUDA编程, 使用本地GPU一样,可以直接通过CUDA提供的接口 方便的调用,可移植性非常好。例如CUDA SDK自带 的多GPU samples程序绝大部分都可以直接运行在虚 拟化平台上,不需要修改源码,只需要修改编译时的选 项并重新编译即可,只不过这些程序往往都是以演示 功能为主,计算规模不大,并不能体现出多GPU虚拟 化的优势。 在第2节中详细分析了程序在单GPU的虚拟化 平台上的执行流程,在多GPU的虚拟化环境下程序的 执行流程也是基本如此。此外在进行多GPU的并行 计算时,还有数据的分解、运算和合并等步骤,因此会 带来更多的软件栈和控制开销。所以当程序的计算规 模不大时,使用多GPU虚拟化平台往往不能得到很好 的结果。第4节的实验结果可以证明,当计算规模比 较大的时,使用多个GPU是可以抵消这些开销所带来 的性能损失从而提升程序的执行效率。 4实验结果与性能分析 4.1实验环境 实验中的后端节点是两台配置Inter(R)Core (TM)i5-4590CPU(3.3 GHz)处理器,4 GB内存和 100 GB硬盘,GeForce GTX750 Ti GPU,Ubuntu 16.04 和Ubuntu 14.04 64位操作系统,CUDA版本分别为 6.5和7.5;前端节点是一台物理机,配置Celeron(R) Dual—Core CPU 33000(1.8 GHz)处理器,没有NVIDIA 显卡,也没有安装CUDA程序,Ubuntu 14.04 64位操 作系统;前端与后端节点通过百兆以太网互连。 4.2实验内容 实验运行的程序基于CUDA框架使用EM(Expec— tation Maximization)算法在高斯混合模型(Gaussian Mixture Mode1)下进行数据聚类,原程序可以使用单个 节点上的多个GPU进行加速,是CLUSTER ̄加 的GPU 实现,程序有单节点单GPU和单节点多GPU两个不 同的执行模式,当探测到节点中的GPU数目多于一个 会启用多个线程控制多个GPU来加速程序的执 时,80 计算机应用与软件 2017血 行,实验使用的数据集是用Matlab生成的所有不同 类型的程序都是在同一个数据集上执行实验中分别 ,续表1 。cluster 1oo 系数 1  ̄r2  ̄r3 7r1 CPU 0.400 0398 .GPI] 0401 .在前端节点上使用本地CPU和通过虚拟化平台使用1 个、2个远程GPU计算同样的输人数据集后端节点配 置了相同类型的GPU,只是CUDA版本和操作系统版 本有区别。虚拟化平台为基于ZeroMQ通信方式的多 ,0398 .0.202 0.400 0398 .0201 .0402 .GPU虚拟化方案 120 仃2 仃3 仃1 0398 .图8中横轴代表的是初始时cluster的数目不同 的数目会影响程序的执行时间,所以使用这个参数来 做对比,纵轴表示整个程序运行的时间随着初始 ,0.202 0.400 0201 .O401 .140 7r2  ̄r3  ̄rl 0398 .0398 .。0.202 0。4o2 O4oo .0200 .cluster的值增加,使用CPU处理花费的时间增长更 快,使用GPU获得的加速比也越大当初始有200个 cluster时使用1个GPU比CPU获得6.1的加速比而 ,,0401 .1印  ̄r2  ̄r3 7r1 0399 .0.198 0.400 0398 .0200 .使用2个GPU时与使用1个GPU获得185的加速 .0401 .180 仃2  ̄r3  ̄rl 比,实验中继续增加cluster时,获得的加速比并没有继 续增加。 200 J E0398 .0202 .0201 .0.400 0398 .0401 . ̄r2  ̄r3 0.397 0202 .0.202 以上可知,虚拟化平台可以保证程序正确性的情 况下,获得比使用CPU时更好的性能只使用两个 GPU时,就可以获得十倍的加速比;GPU的数目增加 ,时可以获得更大的加速比,但是还未达到线性的加速 比。这是因为在有多个GPU时会涉及更多的数据交 换和参数控制,网络传输的延时也会增加新增加的软 件栈也会影响效率,这些是虚拟化所无法避免的开销,。 图8使用不同设备时程序运行的时间 实验中计算得到了许多参数,如均值、协方差等, 4.3实验结论 基于虚拟化的多GPU通用计算平台上,原来基于 单机多GPU实现的GMM程序不需要修改源代码就可 以运行在没有NVIDIA显卡的前端节点上。通过调用 两个远程GPU就能够获得比使用CPU时十倍以上的 加速比,并且只需要修改一些配置文件就可以方便地 增减所使用的GPU数目,十分灵活。虽然虚拟化带来 了一定的性能损失,但是可以有效地实现单机多GPU 和多机多GPU的编程模式统一。 表1中的系数7r实际上是每个component被选中的概 率,并不指代圆周率,实验中运行的GMM程序会得到 三个系数;CPU列是使用CPU计算出来的系数7r的 值,GPU列是使用GPU计算出来的系数仃的值。可以 看出,对于同样的输入数据集,对于不同的初始。lu . ter,使用GPU计算得到的系数与使用CPU计算的到 的系数有些许的误差,这是由于实验中使用的GPU与 CPU处理浮点数据的精度不同以及小数的舍入导致 的,并不是虚拟化平台影响了程序的正确性。 表1 不同平台上执行得到的compunent的系数 5 结语 实现了基于虚拟化的多GPU通用计算平台,可以 cluster 60 系数 仃1 7r2 CPU 0.402 0.400 GPU 0.402 0.398 十分方便地使用远程GPU进行通用计算。能够使用 分布式环境中不同节点上的多个GPU加速程序,且不 7r3 7r1 80 7r2  ̄r3 0.198 0.402 0.400 0.198 0.200 O.4O2 0.398 0.200 需要对源码做太多的修改。最后在实验中验证了该平 台的有效性。 实验中发现网络性能对于平台的性能有很大的影 (下转第129页) 第11期 杜慧琦等:IEEE1588v2时钟同步技术在战术信息系统中的应用 129 [2]Eidson J,Kang L.IEEE Standard for a Precision Clock Syn. ehronization Protocol for Networked Measurement and Control Systems[C]//IEEE Instrumentation and Measurement Soci— ety,2008. [3]俞慧春.IEEE1588v2时钟特性和应用方案[J].信息安全 与技术,2015(4):44—45,51. [4]徐荣,邹洪强,李允博.分组网络的同步技术[J].电信技 术,2009(4):91—94. [5]周末.基于IEEE1588v2电力系统时间同步的研究与设计 [D].山东:山东大学,2014. [6]陈兴敏,康国钦.LXI的精准时间同步触发方式分析[J]. 电子质量,2008(4):12—14. [7]黄治,陈伟,王向群.IEEE1588在工业以太网交换机中的 关键应用[J].现代电子技术,2012(23):90—93. [8]汪坤,刘华.GPON系统1588时间同步技术的研究与应用 [J].电子设计工程,2015(20):56—59. [9]关世友.基于IEEE1588协议的LXI时间同步的研究与设 计[D].广西:桂林电子科技大学,2011. [1O]张文超.基于以太网交换机的IEEE1588v2时钟同步协议 研究与实现[D].浙江:杭州电子科技大学,2013. (上接第8O页) 响,如果使用高速网络如InfiniBand将会提高虚拟化 平台的性能,此外,还有GPU RMDA技术,多GPU使 用时的P2P问题等能够提升性能的技术可以应用到虚 拟化平台上。 参考文献 [1] Duato J,Pena A J,Silla F,et a1.rCUDA:Reducing the nun- ber of GPU—based accelerators in high performance clusters [C]//High Perfomrance Computing and Simulation (HPCS),2010 International Conference on.IEEE,2010:224 —231. [2] Shi L,Chen H,Sun J,et a1.vCUDA:GPU—accelerated high— performance computing in virtual machines[J].IEEE Trans— actions on Computers,2012,61(6):804—816. [3] 石林.GPU通用计算虚拟化方法研究[D].湖南大 学,2012. [4] Giunta G,Montella R,Agri11o G,et a1.A GPGPU transparent virtualization component for high performance computing clouds[C]//European Conference on Parallel Processing. Springer Berlin Heidelberg,2010:379—391. [5] Gupta V,Gavfilovska A,Schwan K,et a1.GViM:GPU—accel— crated virtual machines[C]//Proceedings of the 3rd ACM Workshop on System・-level Virtualization for High Perform-- ance Computing.ACM,2009:17—24. [6]仝伯兵,杨听吉,谢振平,等.GPU虚拟化技术及应用研究 [J].软件导刊,2015,14(6):153—156. [7]Suzuki Y,Kato S,Yamada H,et a1.GPUvm:why not virtua1. izing GPUs at the hypervisor?[C]//Usenix Conference on Usenix Technical ConfeFence.USENIX Association,2014: 109—120. [8]Liu M,Li T,Jia N,et a1.Understanding the virtualization “Tax”of scale-out pass—through GPUs in GaaS clouds:An empirical study[C]//IEEE,International Symposium on High PERFORMANCE Computer Architecture.IEEE,2015: 259—270. [9]杨经纬,马凯,龙翔.面向集群环境的虚拟化GPU计算平 台简[J].北京航空航天大学学报,2016,42(11):2340 —2348. [10]Bouman C A,Shapiro M,Ncsa,et 1a.Cluster:An unsupervised lagorithm for modeling Gaussian mixtures[J].Soft Manual,2005. [11]Castell6 A,Duato J,Mayo R,et a1.On the use of remote GPUs and low--power processors for the acceleration of scien・- tiifc applications[C]//The Fourth International Conference on Smart Grids,Green Communications and IT Energy—aware Technologies(ENERGY),2014:57—62. [12]Sourouri M,Gillberg T,Baden S B,et a1.Effective muhi.GPU communication using multiple CUDA streams and threads [C]//2014 USENIX Annual Technical Conference Parallel and Distirbuted Systems(ICPADS).IEEE,2014:981—986. [13]Gottschlag M,Hillenbrand M,Kehne J,et a1.LoGV:Low—O— verhead GPGPU Virtualization[C]//IEEE,International Conference on High PERFORMANCE Computing and Com— munications&201 3 IEEE International Conference on Em— bedded and Ubiquitous Computing.IEEE,2014:1721 —1726. [14]Yang C T,Liu J C,Wang H Y,et a1.Implementation of GPU virtualization using PCI pass—through mechanism[J].The Journal of Supercomputing,2014,68(1):183—213. [15]张玉洁.基于多GPGPU并行计算的虚拟化技术研究 [D].南京航空航天大学,2015. [16]闵芳,张志先,张玉洁.虚拟化环境下多GPU并行计算研 究[J].微电子学与计算机,2016,33(3):69—75. [17]张玉洁,吕相文,张云洲.GPU虚拟化环境下的数据通信 策略研究【J].计算机技术与发展,2015,25(8):24—28. [18]张云洲.虚拟化环境下的GPU通用计算关键技术研究 [D].南京航空航天大学,2014. [19]王刚,唐杰,武港山.基于多GPU集群的编程框架[J].计 算机技术与发展,2014,24(1):9—13. [20]陈志佳,朱元昌,邸彦强,等.一种改进的GPU虚拟化实 施方法[J].计算机工程与科学,2015,37(5):901—906.