首先cpu是中央处理器,gpu是cpu里独立的图像处理器。
其次一些CPU里面是没有GPU的(AMD公司制造的比较多GPU和CPU集成在一起的,现在intel也在研究将二者集成在一起)。
再者CPU和GPU都是具有运算能力的芯片,CPU处理指令运算(执行)为重和数值运算,GPU则没有那么强大图形类数值计算为核心。
在不同类型的运算方面的速度也就决定了它们的能力,它们各有所长因此CPU和GPU的分工可以大致这样分CPU主要是擅长操作系统,系统软件,应用程序,通用计算,系统控制等等。
游戏中人工智能,物理模拟等等;3D建模-光线追踪渲染;
虚拟化技术语——抽象硬件,同时运行多个操作系统或者一个操作系统的多个副本等等。
GPU擅长图形类矩阵运算,非图形类并行数值计算,高端3D游戏。
手机的集成度非常高,最核心的一块叫做soc。
它是cpu,gpu,解码器,甚至wifi,基带集成的。
如果单纯的看cpu的好坏,最简单的就是记住一些常见的品牌,型号联发科的最新的八核,性能还是不错的,但是也只是不错。cpu的构架为a7,性能有限。
gpu的虚拟化
上一篇文章,讲解了计算虚拟化之CPU虚拟化和内存虚拟化。
而GPU从某种意义上来讲,其作用也是用于计算,只不过同CPU应用用于通用计算相比,GPU则主要用于对图形和图像要求较高的场景,比如高清视频编解码、3D游戏、物理仿真等。
本篇带领大家了解一下GPU虚拟化技术。
GPU技术在芯片行业中也如同CPU技术一样快速发展,而且越来越多的用户开始部署虚拟桌面方案。
因此将GPU技术与虚拟化技术融合,是近年来虚拟化行业中比较热门的技术课题,通过此种方式,将大大降低图形图像用户的使用成本以及提高数据的处理效率和数据安全性。
所谓GPU虚拟化,就是将一块GPU卡的计算能力进行切片,分成多个逻辑上虚拟的GPU,即vGPU,以vGPU为单位分配GPU的计算能力。
以vGPU为单位可以将单块GPU卡分配给多台虚拟机使用,使得虚拟机能够运行3D软件、播放高清视频等,极大地提升了用户体验。
目前GPU虚拟化主要有如下几种技术:
DeviceSimulation
APIForwarding
GPUPass-Through
FullGPUVisualization
设备模拟直接将设备分配给指定的虚拟机。
采用类似于CPU虚拟化中二进制转换方法进行模拟。
但相对于CPU,GPU的特性复杂,不同的设备提供商之间的GPU规格区别很大,GPU的资源很难被拆分,模拟的效率低。
因此,典型的QEMU软件仅模拟了VGA设备的基本功能,它通过一个半虚拟化的图像缓冲区来加速特定的2D图像访问,不符合高效、共享的虚拟化要求。
由于设备模拟没有一个确定的机制能使虚拟机进行访问图形硬件的能力,因此这些虚拟的显示设备都是通过使用CPU以及内存的方式对图形数据进行相应处理。
API转发将图形指令如OpenGL从客户虚拟机转发到虚拟机监视器VMM中,实现虚拟化环境下GPU的共享。
该方法目前被广泛应用在VMWare和VirutalBox等软件中。
基于Chromium的VMGL和Oracle的VirtualBox,采用定制过的OpenGL库来替换原有的OpenGL库,将虚拟机中的OpenGL指令转发到虚拟机监视器中去执行。
针对GPU运用于通用计算,rCUDA、vCUDA和gVirtuS、都采用转发CUDA和OpenGL的指令来解决虚拟化环境下运行GPU通用计算程序的问题。
然而API转发受限于平台,例如Windows采用的接口是DirectX,不兼容于OpenGL或CUDA。
因此,一个Linux主机就不能执行Windows客户机转发过来的DirectX命令。
同时由于API转发引起大量的上下文切换,性能损失较大。
显卡穿透(pass-through)也叫显卡直通,是指绕过虚拟机管理系统,将GPU单独分配给某一虚拟机,只有该虚拟机拥有使用GPU的权限,这种独占设备的方法分配方式保存了GPU的完整性和独立性,在性能方面与非虚拟化条件下接近,且可以用来进行通用计算。
但是显卡直通需要利用显卡的一些特殊细节,同时兼容性差,仅在部分GPU中设备可以使用。
同时GPU透传只能将GPU分配给一台虚拟机使用,无法在多台虚拟机间共享,其他虚拟机无法使用到GPU提供的计算能力。
由于显卡直通实际上是由客户操作系统使用原生驱动和硬件,缺少必要的中间层来跟踪和维护GPU状态,它不支持实时迁移等虚拟机高级特性。
显卡虚拟化就是将显卡进行切片,并将这些显卡时间片分配给虚拟机使用的过程。
由于支持显卡虚拟化的显卡一般可以根据需要切分成不同的规格的时间片,因此可以分配给多台虚拟机使用。
GPU全虚拟化允许虚拟机直接访问对性能敏感的资源(如GPU访问显存),基本解决直通和共享的矛盾。
比如类似于IO虚拟化的SR-IOV技术,通过影子页表隔离每个虚拟GPU的访问空间,从而大多数的命令执行会不受虚拟机监控器的干预,因此虚拟GPU就可以获得接近非虚拟化情况下的性能。
不同的显卡厂商,其全虚拟化的实现方式不同。
比如AMD在其最新的GPU上采用了SR-IOV(单根虚拟化)技术来实现;Intel则采用KVMGT技术来实现,Nvidia采用了GPUvm/GRID技术来实现。
还没有评论,来说两句吧...