在上期,小H在梦里穿越成了“发哥”,并且成功理解了什么是“时分复用”和“空分复用”。这次,小H又梦见了什么呢?
时间闪回到资产阶级革命年代的法国。
在路易十五当政时期,法国产生了启蒙运动,孟德斯鸠、卢梭、伏尔泰邓一批思想家,把三权分立和天赋人权的平等思想传递到了法国人民心中。1789年,随着波旁王朝财政问题的恶化,巴黎市民组织起义,攻占巴士底狱,推翻了波旁王朝,建立了法兰西第一共和国。
但是,法国人民的生活并没有因为革命的初步胜利而有本质的改善。雅各宾派和吉伦特派的互相倾轧,导致拿破仑最终在雾月政变中上台和加冕称帝,建立法兰西第一帝国。1815年,拿破仑兵败滑铁卢,波旁王朝复辟,法国人民又陷入阿图瓦伯爵(查理十世)等人实行的白色恐怖之中。
在这样动荡的社会下,人民苦不堪言,而女性更成为了被压迫和被侵害的对象。芳汀就是这样一个悲惨命运的女人。
芳汀是一个大美女,小时候还学习过芭蕾。
为了学习芭蕾,她的脚多次受伤,变成了这个样子:
苦命的芳汀被恋人托洛米埃骗光钱财并无情抛弃,只好去工厂做工维持生活,却又因为是单亲妈妈而被工厂开除,最终沦入风尘。
很快芳汀因贫病而离开人世,留下了女儿珂赛特和妈妈长得一模一样。
冉阿让找到了孤儿珂赛特,把她带进一家修道院,在那里长大成人。为了救出珂赛特,冉阿让的身份被警官沙威怀疑,最终被再次逮捕。
在珂赛特18岁那年,轰轰烈烈的法国七月革命爆发了。珂赛特女扮男装走上战场,在战斗中成长为了一名女革命者。
最终,革命队伍驱逐了查理十世和路易十九,推翻了二次复辟的波旁王朝,取得了革命胜利。
象征自由,平等,博爱的三色旗飘扬在法兰西的天空,而二公主扮演的珂赛特,也被评价为以自由引导人民,以钢枪保卫和平的精英。
当小H把这个梦讲给方老师的时候,小伙伴们都笑翻了。
这说明:
1. 某二公主在《某冰》里面的造型太深入人心;
2. 小H是个爱读世界名著的孩子,看过《悲惨世界》;
3. 小H游戏打太多了,再打就需要杨永信介入了。
在小H梦里面,二公主一人分饰两角:母亲芳汀和女儿珂赛特。这就是所谓的“时分复用”。最早的GPU虚拟化思路,也是基于时分复用来实现的。这就是NVidia在2010年前后推出的vCUDA。
vCUDA是所谓的API Remoting技术,也就是GPU在Hypervisor上管理,通过替换掉GuestOS里面的CUDA库,把CUDA调用重定向到Hypervisor,实现多个虚拟机共用一个GPU。
具体的实现是,Hypervisor在虚拟机中提供一个物理GPU的逻辑映像——虚拟GPU,在用户态拦截CUDA API,在虚拟GPU中重定向到真正的物理GPU上执行计算。同时,在宿主机上基于原生的CUDA库和GPU驱动,运行vCUDA服务端,接管虚拟GPU拦截的CUDA API,同时进行计算任务的调度。
它的工作原理如下图所示:
在上图中我们可以看出,之所以把虚拟机的CUDA库替换为vCUDA,是因为需要拦截来自虚拟机上CUDA APP的所有CUDA API调用。vCUDA库一方面欺骗虚拟机上CUDA APP,使其以为自己调用的是真实的CUDA,另一方面在内核中调用vGPU驱动(也称为客户端驱动)。
由于虚拟机里面并没有GPU,虚拟机的vGPU驱动实际上也是个假的GPU驱动。实际上它的作用就是通过虚拟机到宿主机的VMRPC(Virtual Machine Remote Procedure Call) Channel,将CUDA调用发送到宿主机。宿主机的vCUDA Stub(管理端)接收到CUDA调用后,调用宿主机上真正的CUDA库和物理GPU驱动,完成GPU运算。
在客户端驱动处理API之前,还需要向管理端去申请GPU资源。每一个独立的调用过程都必须向宿主机的管理端申请GPU资源,从而实现GPU资源和任务的实时调度。
显然,vCUDA是一种时间片调度的虚拟化技术,也就是所谓的“时分复用”。此种实现对于用户的应用而言是透明的,无需针对虚拟化GPU做任何的修改,而且也可以实现非常灵活的调度,单GPU能服务的虚拟机数量不受限制。但缺点也是显而易见的:CUDA API只是GPU运算使用的API中的一种,业界还有DirectX/OpenGL等其他API标准,而且同一套API又有多个不同版本(如DirectX 9和DirectX 11等),兼容性非常复杂。
Nvidia如何在下一代GPU虚拟化技术中解决这一问题呢?
请看下期。