GPU计算应用日趋广泛
随着图像处理技术的发展,对图形和图像的处理要求也越来越高,特别是3D技术的兴起,使图形图像处理和3D计算技术已经应用到各种视频游戏、电影产业、医疗成像、空间探索、远程通信等方面。同时,伴随着移动互联网以及终端技术的发展和普及,云端须处理的数据量呈爆发式增长,对大数据、视频和3D计算提出了更多的需求。
在通用计算领域,凭借高密度并行计算能力,GPU现已用于解决大量的通用计算问题,形成GPGPU(General-purpose computing>从硬件架构角度,GPU的计算单元有两层结构:SM(Streming Multiprocessor)和SP(Streming Processor)。一个GPU,实际上是一个SM的阵列,每个SM包含多个SP。SM相当于CPU的核,相同的SM中的所有SP可同时处理不同的数据。例如费米架构的GPU卡包含16个SM,每个SM包含32个SP。相对于一个四核的CPU来说,一个费米架构的GPU,核数是其4倍,数据吞吐量是其32倍。在内存方面,CPU程序模型的内存层次由硬件解决,程序员无需关心。而GPU的设计则在SM层设计了程序员可见的共享内存,可供程序员根据需要灵活使用以提高数据访问速度。同时,GPU具有多个寄存器组,可快速进行线程间切换。
从编程模型的角度,CPU使用MIMD(多指令多数据) 指令模型,而GPU采用SIMT(单指令多线程)指令模型。CUDA的编程模型将线程组合在一起形成了线程束、线程块以及线程网络,这些线程组合在一起形成了并行程序。相比CPU的按时间片串行执行程序,GPU采用硬件并行的模式,需大量线程填充数据区,利用有效的工作池来保证一直有事可做,不会出现闲置。当遇到指令延迟与存储器延迟引起的阻塞时,CPU处理器会闲置等待操作完成,而GPU的线程模型会快速切换到另外的线程,以实现对这种延迟的隐藏。
综上所述,CUDA的硬件架构和编程模型,决定其性能优势集中体现在硬件的并行计算上。基于高密度并行处理的CUDA程序,可极大地提高异构系统的整体性能。
基于CUDA构建高密计算云
GPU虚拟化。构建GPU高密计算云,必须解决GPU计算能力的虚拟化问题。目前,对于GPU虚拟化方法的研究,主要集中在三个方面。
设备仿真:采用模拟出完整的硬件环境的方式,为系统提供一个伪设备。实际仿真的设备位于CPU或内存中。由于实际运行的CPU并不具备GPU的大规模并行计算能力,其执行效率太低,在实际应用环境中并不具有实用价值。
设备独占:该方式允许用户通过操作系统直接控制物理设备,本质上是直接通过原生的显卡驱使用GPU,跳过了VMM(Virtual Machine Monitor)的参与。由于缺少VMM跟踪和硬件设备的维护状态,采用该方式无法支持虚拟机的实时迁移、快照等高级特性。
API虚拟化:该方式主要是对应用程序接口API进行重定向。通过拦截所有与GPU相关的API,使用重定向或者模拟的方式,将计算任务发送至物理机,在物理机中利用相应硬件去完成相应功能,最后将计算的结果通过指定的通信方式返回给客户端应用程序。
目前,大多数虚拟化平台对CUDA虚拟化的支持,仅达到设备独占的层次,仅有Citrix XenServer可以达到Partitioning的高度,即在同一虚拟机上将一个物理GPU进行多个复用的功能,而对于更高级的功能,比如基于分时复用、热迁移等功能都没有涉及。
学术界对CUDA的虚拟化方法的研究则更加深入,主要集中在对API重定向技术上,已提出多个基于CUDA的API重定向的虚拟化可行方案,实现对上层应用的完全透明,可无缝支持热迁移、快照等功能。
基于CUDA的API重定向实现GPU虚拟化。
自CUDA架构提出以来,基于CUDA的API重定向的GPU虚拟化技术,成为国内外学者广泛关注的一个热点。由于API重定向技术的灵活性,越来越多的研究人员认定API重定向技术是GPU虚拟化技术的归宿,提出了多种不同的解决方案,如vCUDA(Virtual CUDA)、rCUDA(remote CUDA)、GVim(GPU-accelerated Virtual achines)、gVirtuS等。
vCUDA通过API重定向的方法,拦截用户层的所有CUDA的API调用,重定向到物理机器上执行,实现对程序员的全透明,使得开发难度大大降低。考虑到RPC的性能开销问题,该解决方案采用了懒惰RPC的方法,尽可能减少RPC调用的次数。具体的做法是通过累积、过滤、合并上层调用等方式,合理确定发送RPC的时机,将连续的API打包一次性发送,有效提高了系统性能。