GUP虚拟化
目前,有多种软件技术方案可以实现GPU虚拟化,通常可分为内核态虚拟化和用户态虚拟化两大类。本文将主要讨论这两类方案的区别,为后续分享GPU远程调用做准备。
以英伟达的GPU为例,应用到硬件从上至下分为用户态、内核态、GPU硬件三个层次。
用户态层:用户态是应用程序使用CUDA API来编写并行计算任务,并通过调用CUDA API与GPU用户态驱动进行通信。
内核态层:主要运行的是GPU的内核态驱动程序,它与操作系统内核紧密集成,受到操作系统以及CPU硬件的特殊保护。
硬件层:这个就是硬件虚拟化,类似于 Nvidia MIG.
用户态
用户态虚拟化:利用CUDA、OpenGL等标准接口,对API进行拦截和转发,对被拦截的函数进行解析,然后调用硬件厂商提供的用户态库中的相应函数(见下图)。
经过API拦截之后,用户态虚拟化方案还可以利用RPC的方式进行远程API Remoting,即CPU主机可以通过网络调用GPU主机的GPU,实现GPU的远程调用。
这个技术方案拥有几个优点:
1、CUDA、OpenGL等接口都是公开的标准化接口,具有开放性和接口稳定性。
2、因为该方案运行在用户态,可以规避内核态代码过于复杂容易引入安全问题。
3、由于该方案工作在用户态,从部署形态上对用户环境的侵入性最小,也最安全。
4、可以支持统一内存接口,然后就可以借用主机内存。
这个方案也有缺点:
1. 相比于内核态接口,用户态API接口的数